{"id":24755043,"url":"https://github.com/francois-le-ko4la/rest-api-controller","last_synced_at":"2026-05-07T07:31:27.234Z","repository":{"id":84214997,"uuid":"127336352","full_name":"francois-le-ko4la/rest-api-controller","owner":"francois-le-ko4la","description":"rest-api-controller is a Python package to manage REST API request","archived":false,"fork":false,"pushed_at":"2024-04-07T18:48:39.000Z","size":184,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-01-28T12:40:23.145Z","etag":null,"topics":["pep8","python3","rest-api","rest-client","restful"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/francois-le-ko4la.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-03-29T19:11:05.000Z","updated_at":"2018-06-02T13:07:35.000Z","dependencies_parsed_at":"2025-01-28T12:34:21.221Z","dependency_job_id":"6681af25-2b8a-4bea-acdb-65fac44bd233","html_url":"https://github.com/francois-le-ko4la/rest-api-controller","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/francois-le-ko4la%2Frest-api-controller","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/francois-le-ko4la%2Frest-api-controller/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/francois-le-ko4la%2Frest-api-controller/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/francois-le-ko4la%2Frest-api-controller/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/francois-le-ko4la","download_url":"https://codeload.github.com/francois-le-ko4la/rest-api-controller/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245061387,"owners_count":20554563,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["pep8","python3","rest-api","rest-client","restful"],"created_at":"2025-01-28T12:34:14.555Z","updated_at":"2026-05-07T07:31:27.181Z","avatar_url":"https://github.com/francois-le-ko4la.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"apicontroller\n## Description:\n`apicontroller` is a Python package to manage REST API requests.\nWe provide examples to use it.\n\n## Setup:\n```shell\n$ git clone https://github.com/francois-le-ko4la/rest-api-controller.git\n$ cd rest-api-controller\n$ make install\n```\n\n## Test:\n```shell\n$ make test\n```\n\n## Use:\n\n* Import the package\n```python\nfrom apicontroller import RestAPIController\n```\n\n* API wo authentication using tests\n```python\nimport time\n\n\n#init the Class\nmy_api = RestAPIController(host=\"http://api.open-notify.org\",\n    DEBUG=True)\n\n# send the request\nresult = my_api.request(\"GET\", \"/iss-now.json\")\n\n# test result\nif result is None:\n    exit()\n\n# use the result\nprint(result)\nprint(time.ctime(int(result['timestamp'])))\nprint(result['iss_position']['longitude'] + \", \" +\n    result['iss_position']['latitude'])\n```\n\n* API OAuth1 (username / token) - GITHUB\n```python\nmy_github_api = RestAPIController(\n    host = \"https://api.github.com\",\n    auth = (\"*** USERNAME ***\", \"*** TOKEN ***\"),\n    DEBUG= True\n    )\nmy_github_api.request(\"GET\", \"/user\")\n```\n\n* OAuth Token - Facebook\n```python\nmy_fb_api = RestAPIController(\n    token=(\"OAuth\", \"*** TOKEN ***\"),\n    host = \"https://graph.facebook.com\",\n    DEBUG = True\n    )\nmy_fb_api.request(\"GET\", \"/v2.12/me/taggable_friends\",\n    {'fields':'id, name, picture.width(500).height(500).type(large)',\n    'limit':'5000'})\n```\n\n## Project structure\n\n```\n.\n├── apicontroller\n│   ├── __about__.py\n│   ├── controller.py\n│   ├── exceptions.py\n│   └── __init__.py\n├── last_check.log\n├── LICENSE\n├── Makefile\n├── pictures\n│   ├── classes_apicontroller.png\n│   └── packages_apicontroller.png\n├── README.md\n├── runtime.txt\n├── setup.cfg\n├── setup.py\n└── tests\n    ├── test_doctest.py\n    ├── test_pycodestyle.py\n    └── use_it.py\n```\n\n## Todo:\n\n- [X] Create the project\n- [X] Write code and tests\n- [X] Test installation and requirements (setup.py and/or Makefile)\n- [X] Test code\n- [X] Validate features\n- [X] Write Doc/stringdoc\n- [X] Run PEP8 validation\n- [X] Clean \u0026 last check\n- [X] Release\n- [X] improve (un)install\n- [X] manage global var\n- [X] Release: 0.2.0\n- [X] improve package var\n- [X] improve exceptions\n- [X] Release: 0.3.0\n\n\n## License\n\nThis package is distributed under the [GPLv3 license](./LICENSE)\n### Runtime\n\n```\n\npython-3.6.x\n\n\n```\n\n### UML Diagram\n![alt text](pictures/classes_apicontroller.png)\n\n\n### Objects\n\n[RestAPIController()](#restapicontroller)\u003cbr /\u003e\n[@Property RestAPIController.host](#property-restapicontrollerhost)\u003cbr /\u003e\n[RestAPIController.isconnected()](#restapicontrollerisconnected)\u003cbr /\u003e\n[RestAPIController.request()](#restapicontrollerrequest)\u003cbr /\u003e\n[APIError()](#apierror)\u003cbr /\u003e\n[APIConnectionError()](#apiconnectionerror)\u003cbr /\u003e\n[APIHTTPError()](#apihttperror)\u003cbr /\u003e\n[APIBadHostnameError()](#apibadhostnameerror)\u003cbr /\u003e\n\n\n#### RestAPIController()\n```python\nclass RestAPIController(object):\n```\n\n```\nMy REST API Controller\n\nUse:\n    \u003e\u003e\u003e # oups\n    \u003e\u003e\u003e my_api = RestAPIController(host=\"http://pz.g\")\n    \u003e\u003e\u003e print(my_api.request(\"GET\", \"/iss-now.json\"))\n    Traceback (most recent call last):\n    ...\n    apicontroller.exceptions.APIConnectionError: \"http://pz.g\" unreachable!\n    \u003e\u003e\u003e # oups 2\n    \u003e\u003e\u003e my_api = RestAPIController(host=\"http://api.open-notify.org\")\n    \u003e\u003e\u003e result = my_api.request(\"GREP\", \"/iss-now.json\")\n    Traceback (most recent call last):\n    ...\n    apicontroller.exceptions.APIHTTPError: Client Error - {'method': 'GREP', 'url': 'http://api.open-notify.org/iss-now.json'}.\n    \u003e\u003e\u003e # oups 3\n    \u003e\u003e\u003e my_api = RestAPIController(host=\"api.open-notify.org\")\n    Traceback (most recent call last):\n    ...\n    apicontroller.exceptions.APIBadHostnameError: \"api.open-notify.org\" is not validated!\n    \u003e\u003e\u003e my_api = RestAPIController(host=\"http://api.open-notify.org\")\n    \u003e\u003e\u003e result = my_api.request(\"GET\", \"/iss-now.json\")\n    \u003e\u003e\u003e result['message']\n    'success'\n```\n\n##### @Property RestAPIController.host\n```python\n@property\ndef RestAPIController.host(self):\n```\n\u003e \u003cbr /\u003e\n\u003e None\u003cbr /\u003e\n\u003e \u003cbr /\u003e\n##### RestAPIController.isconnected()\n```python\n@__isconnected\ndef RestAPIController.isconnected(self):\n```\n\u003e \u003cbr /\u003e\n\u003e Provide a link status between this script \u0026 REST API server\u003cbr /\u003e\n\u003e This function is decorated by @__isconnected.\u003cbr /\u003e\n\u003e If the link is down, then decorator will change the value.\u003cbr /\u003e\n\u003e \u003cbr /\u003e\n\u003e \u003cb\u003eArgs:\u003c/b\u003e\u003cbr /\u003e\n\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;  None\u003cbr /\u003e\n\u003e \u003cbr /\u003e\n\u003e \u003cb\u003eReturns:\u003c/b\u003e\u003cbr /\u003e\n\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;  True\u003cbr /\u003e\n\u003e \u003cbr /\u003e\n##### RestAPIController.request()\n```python\n@__loadjson\n@__sendrequest\n@__isconnected\n@__enable_debug\ndef RestAPIController.request(self, cur_method, cur_path, cur_args=None):\n```\n\u003e \u003cbr /\u003e\n\u003e Provide all arguments to request.\u003cbr /\u003e\n\u003e This function is decorated by __enable_debug,\u003cbr /\u003e\n\u003e __isconnected, __sendrequest, and __loadjson\u003cbr /\u003e\n\u003e \u003cbr /\u003e\n\u003e \u003cb\u003eArgs:\u003c/b\u003e\u003cbr /\u003e\n\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;  cur_method (str): \"GET\", \"PUT\" ...\u003cbr /\u003e\n\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;  cur_path (str): url = host+path\u003cbr /\u003e\n\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;  cur_args (dict): HTTP args\u003cbr /\u003e\n\u003e \u003cbr /\u003e\n\u003e \u003cb\u003eReturns:\u003c/b\u003e\u003cbr /\u003e\n\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;  dict(): request's args send to decorators\u003cbr /\u003e\n\u003e \u003cbr /\u003e\n#### APIError()\n```python\nclass APIError(Exception):\n```\n\n```\nGeneric exception for apicontroller\n```\n\n#### APIConnectionError()\n```python\nclass APIConnectionError(APIError):\n```\n\n```\nNone\n```\n\n#### APIHTTPError()\n```python\nclass APIHTTPError(APIError):\n```\n\n```\nNone\n```\n\n#### APIBadHostnameError()\n```python\nclass APIBadHostnameError(APIError):\n```\n\n```\nNone\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrancois-le-ko4la%2Frest-api-controller","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrancois-le-ko4la%2Frest-api-controller","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrancois-le-ko4la%2Frest-api-controller/lists"}