github3api
Advanced tools
| Metadata-Version: 2.1 | ||
| Name: github3api | ||
| Version: 0.0.8 | ||
| Version: 0.0.9 | ||
| Summary: An advanced REST client for the GitHub API | ||
@@ -79,4 +79,5 @@ Home-page: https://github.com/soda480/github3api | ||
| ```python | ||
| for repo in client.get('/user/repos', _get='page'): | ||
| print(repo['full_name']) | ||
| for page in client.get('/user/repos', _get='page'): | ||
| for repo in page: | ||
| print(repo['full_name']) | ||
| ``` | ||
@@ -83,0 +84,0 @@ |
+11
-16
@@ -58,15 +58,11 @@ | ||
| def _get_next_endpoint(self, link_header): | ||
| """ return next endpoint from link header | ||
| def _get_next_endpoint(self, url): | ||
| """ return next endpoint | ||
| """ | ||
| if not link_header: | ||
| if not url: | ||
| logger.debug('link header is empty') | ||
| return | ||
| regex = fr".*<https://{self.hostname}(?P<endpoint>/.*?)>; rel=\"next\".*" | ||
| match = re.match(regex, link_header) | ||
| if match: | ||
| endpoint = match.group('endpoint') | ||
| logger.debug(f'found next endpoint in link header: {endpoint}') | ||
| return endpoint | ||
| logger.debug('next endpoints not found in link header') | ||
| endpoint = url.replace(f'https://{self.hostname}', '') | ||
| logger.debug(f'next endpoint is: {endpoint}') | ||
| return endpoint | ||
@@ -79,3 +75,3 @@ def _get_all(self, endpoint, **kwargs): | ||
| while True: | ||
| link_header = None | ||
| url = None | ||
| response = super(GitHubAPI, self).get(endpoint, raw_response=True, **kwargs) | ||
@@ -88,5 +84,5 @@ if response: | ||
| items.append(data) | ||
| link_header = response.headers.get('Link') | ||
| url = response.links.get('next', {}).get('url') | ||
| endpoint = self._get_next_endpoint(link_header) | ||
| endpoint = self._get_next_endpoint(url) | ||
| if not endpoint: | ||
@@ -103,5 +99,4 @@ logger.debug('no more pages to retrieve') | ||
| response = super(GitHubAPI, self).get(endpoint, raw_response=True, **kwargs) | ||
| for page in response.json(): | ||
| yield page | ||
| endpoint = self._get_next_endpoint(response.headers.get('Link')) | ||
| yield response.json() | ||
| endpoint = self._get_next_endpoint(response.links.get('next', {}).get('url')) | ||
| if not endpoint: | ||
@@ -108,0 +103,0 @@ logger.debug('no more pages') |
+4
-3
| Metadata-Version: 2.1 | ||
| Name: github3api | ||
| Version: 0.0.8 | ||
| Version: 0.0.9 | ||
| Summary: An advanced REST client for the GitHub API | ||
@@ -79,4 +79,5 @@ Home-page: https://github.com/soda480/github3api | ||
| ```python | ||
| for repo in client.get('/user/repos', _get='page'): | ||
| print(repo['full_name']) | ||
| for page in client.get('/user/repos', _get='page'): | ||
| for repo in page: | ||
| print(repo['full_name']) | ||
| ``` | ||
@@ -83,0 +84,0 @@ |
+2
-2
@@ -24,5 +24,5 @@ #!/usr/bin/env python | ||
| name = 'github3api', | ||
| version = '0.0.8', | ||
| version = '0.0.9', | ||
| description = 'An advanced REST client for the GitHub API', | ||
| long_description = "[](https://github.com/soda480/github3api/actions)\n[](https://codecov.io/gh/soda480/github3api)\n[](https://frontend.code-inspector.com/project/13337/dashboard)\n[](https://badge.fury.io/py/github3api)\n\n# github3api #\nAn advanced REST client for the GitHub API. It is a subclass of [rest3client](https://pypi.org/project/rest3client/) tailored for the GitHub API with special optional directives for GET requests that can return all pages from an endpoint or return a generator that can be iterated over. By default all requests will be retried if ratelimit request limit is reached.\n\n\n### Installation ###\n```bash\npip install github3api\n```\n\n### Example Usage ###\n\n```python\n>>> from github3api import GitHubAPI\n```\n\n`GitHubAPI` instantiation\n```python\n# instantiate using no-auth\n>>> client = GitHubAPI()\n\n# instantiate using a token\n>>> client = GitHubAPI(bearer_token='****************')\n```\n\n`GET` request\n```python\n# GET request - return JSON response\n>>> client.get('/rate_limit')['resources']['core']\n{'limit': 60, 'remaining': 37, 'reset': 1588898701}\n\n# GET request - return raw resonse\n>>> client.get('/rate_limit', raw_response=True)\n<Response [200]>\n```\n\n`POST` request\n```python\n>>> client.post('/user/repos', json={'name': 'test-repo1'})['full_name']\n'soda480/test-repo1'\n\n>>> client.post('/repos/soda480/test-repo1/labels', json={'name': 'label1', 'color': '#006b75'})['url']\n'https://api.github.com/repos/soda480/test-repo1/labels/label1'\n```\n\n`PATCH` request\n```python\n>>> client.patch('/repos/soda480/test-repo1/labels/label1', json={'description': 'my label'})['url']\n'https://api.github.com/repos/soda480/test-repo1/labels/label1'\n```\n\n`DELETE` request\n```python \n>>> client.delete('/repos/soda480/test-repo1')\n```\n\n`GET all` directive - Get all pages from an endpoint and return list containing only matching attributes\n```python\nfor repo in client.get('/user/repos', _get='all', _attributes=['full_name']):\n print(repo['full_name'])\n```\n\n`GET page` directive - Yield a page from endpoint\n```python\nfor repo in client.get('/user/repos', _get='page'):\n print(repo['full_name'])\n```\n\n### Projects using `github3api` ###\n\n* [edgexfoundry/sync-github-labels](https://github.com/edgexfoundry/cd-management/tree/git-label-sync) A script that synchronizes GitHub labels and milestones\n\n* [edgexfoundry/prune-github-tags](https://github.com/edgexfoundry/cd-management/tree/prune-github-tags) A script that prunes GitHub pre-release tags\n\n* [edgexfoundry/create-github-release](https://github.com/edgexfoundry/cd-management/tree/create-github-release) A script to facilitate creation of GitHub releases\n\n\n### Development ###\n\nEnsure the latest version of Docker is installed on your development server. Fork and clone the repository.\n\nBuild the Docker image:\n```sh\ndocker image build \\\n--target build-image \\\n--build-arg http_proxy \\\n--build-arg https_proxy \\\n-t \\\ngithub3api:latest .\n```\n\nRun the Docker container:\n```sh\ndocker container run \\\n--rm \\\n-it \\\n-e http_proxy \\\n-e https_proxy \\\n-v $PWD:/github3api \\\ngithub3api:latest \\\n/bin/sh\n```\n\nExecute the build:\n```sh\npyb -X\n```\n\nNOTE: commands above assume working behind a proxy, if not then the proxy arguments to both the docker build and run commands can be removed.\n", | ||
| long_description = "[](https://github.com/soda480/github3api/actions)\n[](https://codecov.io/gh/soda480/github3api)\n[](https://frontend.code-inspector.com/project/13337/dashboard)\n[](https://badge.fury.io/py/github3api)\n\n# github3api #\nAn advanced REST client for the GitHub API. It is a subclass of [rest3client](https://pypi.org/project/rest3client/) tailored for the GitHub API with special optional directives for GET requests that can return all pages from an endpoint or return a generator that can be iterated over. By default all requests will be retried if ratelimit request limit is reached.\n\n\n### Installation ###\n```bash\npip install github3api\n```\n\n### Example Usage ###\n\n```python\n>>> from github3api import GitHubAPI\n```\n\n`GitHubAPI` instantiation\n```python\n# instantiate using no-auth\n>>> client = GitHubAPI()\n\n# instantiate using a token\n>>> client = GitHubAPI(bearer_token='****************')\n```\n\n`GET` request\n```python\n# GET request - return JSON response\n>>> client.get('/rate_limit')['resources']['core']\n{'limit': 60, 'remaining': 37, 'reset': 1588898701}\n\n# GET request - return raw resonse\n>>> client.get('/rate_limit', raw_response=True)\n<Response [200]>\n```\n\n`POST` request\n```python\n>>> client.post('/user/repos', json={'name': 'test-repo1'})['full_name']\n'soda480/test-repo1'\n\n>>> client.post('/repos/soda480/test-repo1/labels', json={'name': 'label1', 'color': '#006b75'})['url']\n'https://api.github.com/repos/soda480/test-repo1/labels/label1'\n```\n\n`PATCH` request\n```python\n>>> client.patch('/repos/soda480/test-repo1/labels/label1', json={'description': 'my label'})['url']\n'https://api.github.com/repos/soda480/test-repo1/labels/label1'\n```\n\n`DELETE` request\n```python \n>>> client.delete('/repos/soda480/test-repo1')\n```\n\n`GET all` directive - Get all pages from an endpoint and return list containing only matching attributes\n```python\nfor repo in client.get('/user/repos', _get='all', _attributes=['full_name']):\n print(repo['full_name'])\n```\n\n`GET page` directive - Yield a page from endpoint\n```python\nfor page in client.get('/user/repos', _get='page'):\n for repo in page:\n print(repo['full_name'])\n```\n\n### Projects using `github3api` ###\n\n* [edgexfoundry/sync-github-labels](https://github.com/edgexfoundry/cd-management/tree/git-label-sync) A script that synchronizes GitHub labels and milestones\n\n* [edgexfoundry/prune-github-tags](https://github.com/edgexfoundry/cd-management/tree/prune-github-tags) A script that prunes GitHub pre-release tags\n\n* [edgexfoundry/create-github-release](https://github.com/edgexfoundry/cd-management/tree/create-github-release) A script to facilitate creation of GitHub releases\n\n\n### Development ###\n\nEnsure the latest version of Docker is installed on your development server. Fork and clone the repository.\n\nBuild the Docker image:\n```sh\ndocker image build \\\n--target build-image \\\n--build-arg http_proxy \\\n--build-arg https_proxy \\\n-t \\\ngithub3api:latest .\n```\n\nRun the Docker container:\n```sh\ndocker container run \\\n--rm \\\n-it \\\n-e http_proxy \\\n-e https_proxy \\\n-v $PWD:/github3api \\\ngithub3api:latest \\\n/bin/sh\n```\n\nExecute the build:\n```sh\npyb -X\n```\n\nNOTE: commands above assume working behind a proxy, if not then the proxy arguments to both the docker build and run commands can be removed.\n", | ||
| long_description_content_type = 'text/markdown', | ||
@@ -29,0 +29,0 @@ classifiers = [ |
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
24270
-0.77%241
-2.03%