hubcap


Namehubcap JSON
Version 0.1.1 PyPI version JSON
download
home_pagehttps://github.com/thorwhalen/hubcap
SummaryA py2store (i.e. dict-like) interface to github
upload_time2024-02-09 12:48:57
maintainer
docs_urlNone
authorThor Whalen
requires_python
licenseapache-2.0
keywords github
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # hubcap
A py2store (i.e. dict-like) interface to github

To install:	```pip install hubcap```


# Examples

## Basics

The simplest facade to github data.

Interact with github like you'd interact with a `dict` object.

Warning: You'll need to have a github api token (google it if you don't have one;
it's easy to get). You'll have to specify this token when making hubcap objects,
or put it in an environmental variable under the name `GITHUB_TOKEN` or `HUBCAP_GITHUB_TOKEN` 
(useful since github actions doesn't allow you to have env variables starting with `GITHUB`).


```python
>>> s = GitHubReader('thorwhalen')  # connnecting to a particular user/organization
>>> list(s)  # doctest: +SKIP
['agen',
 'aix',
 ...
 'viral',
 'wealth',
 'wrapt']
>>> 'a_non_existing_repository_name' in s
False
>>> 'hubcap' in s  # of course, this will be true, it's what you're using now!
True
>>> repo = s['hubcap']
>>> list(repo)
['master']
>>> branch = repo['master']
>>> list(branch)  # doctest: +NORMALIZE_WHITESPACE
['/.gitattributes',
 '/.github/',
 '/.gitignore',
 '/LICENSE',
 '/README.md',
 '/docsrc/',
 '/hubcap/',
 '/setup.cfg',
 '/setup.py']
>>> content = branch['/setup.cfg']
>>> print(content[:32].decode())
[metadata]
name = hubcap
version
```


## Listing repositories and information about them


List repositories for a given user or organization, along with 78 fields of info.

```python
>>> from hubcap.examples import repos_info, actions_info
>>>
>>> repos = repos_info('i2mint')  # doctest: +SKIP
>>> print(repos.shape)   # doctest: +SKIP
(60, 78)
>>> repos.head()  # doctest: +SKIP
                         id                           node_id       name  ... watchers  default_branch                                        permissions
full_name                                                                 ...
i2mint/py2mqtt    425694616                      R_kgDOGV-VmA    py2mqtt  ...        0            main  {'admin': True, 'maintain': True, 'push': True...
i2mint/mongodol   341721959  MDEwOlJlcG9zaXRvcnkzNDE3MjE5NTk=   mongodol  ...        0          master  {'admin': True, 'maintain': True, 'push': True...
i2mint/dol        299438731  MDEwOlJlcG9zaXRvcnkyOTk0Mzg3MzE=        dol  ...        4          master  {'admin': True, 'maintain': True, 'push': True...
i2mint/stream2py  238989487  MDEwOlJlcG9zaXRvcnkyMzg5ODk0ODc=  stream2py  ...        2          master  {'admin': True, 'maintain': True, 'push': True...
i2mint/creek      321448350  MDEwOlJlcG9zaXRvcnkzMjE0NDgzNTA=      creek  ...        0          master  {'admin': True, 'maintain': True, 'push': True...

[5 rows x 78 columns]
>>> list(repos.columns)   # doctest: +SKIP
['id', 'node_id', 'name', 'full_name', 'private', 'owner', 'html_url', 'description',
'fork', 'url', 'forks_url', 'keys_url', 'collaborators_url', 'teams_url', 'hooks_url
', 'issue_events_url', 'events_url', 'assignees_url', 'branches_url', 'tags_url',
'blobs_url', 'git_tags_url', 'git_refs_url', 'trees_url', 'statuses_url', 'languages_url
', 'stargazers_url', 'contributors_url', 'subscribers_url', 'subscription_url',
'commits_url', 'git_commits_url', 'comments_url', 'issue_comment_url', 'contents_url',
'compare_url', 'merges_url', 'archive_url', 'downloads_url', 'issues_url', 'pulls_url',
'milestones_url', 'notifications_url', 'labels_url', 'releases_url', 'deployments_url
', 'created_at', 'updated_at', 'pushed_at', 'git_url', 'ssh_url', 'clone_url', 'svn_url',
'homepage', 'size', 'stargazers_count', 'watchers_count', 'language', 'has_issue
s', 'has_projects', 'has_downloads', 'has_wiki', 'has_pages', 'forks_count',
'mirror_url', 'archived', 'disabled', 'open_issues_count', 'license', 'allow_forking',
'is_template', 'topics', 'visibility', 'forks', 'open_issues', 'watchers',
'default_branch', 'permissions']

```


Get info about github actions for a given repository.

```python
>>> actions = actions_info('i2mint/mongodol')   # doctest: +SKIP
>>> print(actions.shape)   # doctest: +SKIP
(10, 30)
>>> actions.head()    # doctest: +SKIP
           id                    name  ...                                         repository                                    head_repository
0  1468986198  Continuous Integration  ...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...
1  1445456774  Continuous Integration  ...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...
2  1437461380  Continuous Integration  ...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...
3  1343133456  Continuous Integration  ...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...
4  1262878182  Continuous Integration  ...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...

[5 rows x 30 columns]
>>>
>>> list(actions.columns)   # doctest: +SKIP
['id', 'name', 'node_id', 'head_branch', 'head_sha', 'run_number', 'event', 'status',
'conclusion', 'workflow_id', 'check_suite_id', 'check_suite_node_id', 'url', 'html_url',
'pull_requests', 'created_at', 'updated_at', 'run_attempt', 'run_started_at',
'jobs_url', 'logs_url', 'check_suite_url', 'artifacts_url', 'cancel_url', 'rerun_url',
'previous_attempt_url', 'workflow_url', 'head_commit', 'repository', 'head_repository']
```


Find most recently changed repositories and check if their CI failed or not.

```python
>>> from hubcap.examples import date_selection_lidx
>>> updated_recently = repos.iloc
...     [date_selection_lidx(repos, hours_ago=24)]  # doctest: +SKIP
>>> {repo: get_last_build_status(repo)
...     for repo in updated_recently['full_name']}  # doctest: +SKIP
{'i2mint/py2mqtt': 'failure',
 'i2mint/mongodol': 'success',
 'i2mint/dol': 'success',
 'i2mint/stream2py': 'success',
 'i2mint/creek': 'success'}
```


Note: You can get this directly using the `ci_status` function

```python
>>> from hubcap.examples import ci_status
>>> ci_status('i2mint', hours_ago=24)  # doctest: +SKIP
{'i2mint/py2mqtt': 'failure',
 'i2mint/mongodol': 'success',
 'i2mint/dol': 'success',
 'i2mint/stream2py': 'success',
 'i2mint/creek': 'success'}
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/thorwhalen/hubcap",
    "name": "hubcap",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "github",
    "author": "Thor Whalen",
    "author_email": "",
    "download_url": "https://files.pythonhosted.org/packages/a2/64/9db9c103cb154d2b682763d84c2745a03a121f6348b786146f4a2aa3df72/hubcap-0.1.1.tar.gz",
    "platform": "any",
    "description": "# hubcap\nA py2store (i.e. dict-like) interface to github\n\nTo install:\t```pip install hubcap```\n\n\n# Examples\n\n## Basics\n\nThe simplest facade to github data.\n\nInteract with github like you'd interact with a `dict` object.\n\nWarning: You'll need to have a github api token (google it if you don't have one;\nit's easy to get). You'll have to specify this token when making hubcap objects,\nor put it in an environmental variable under the name `GITHUB_TOKEN` or `HUBCAP_GITHUB_TOKEN` \n(useful since github actions doesn't allow you to have env variables starting with `GITHUB`).\n\n\n```python\n>>> s = GitHubReader('thorwhalen')  # connnecting to a particular user/organization\n>>> list(s)  # doctest: +SKIP\n['agen',\n 'aix',\n ...\n 'viral',\n 'wealth',\n 'wrapt']\n>>> 'a_non_existing_repository_name' in s\nFalse\n>>> 'hubcap' in s  # of course, this will be true, it's what you're using now!\nTrue\n>>> repo = s['hubcap']\n>>> list(repo)\n['master']\n>>> branch = repo['master']\n>>> list(branch)  # doctest: +NORMALIZE_WHITESPACE\n['/.gitattributes',\n '/.github/',\n '/.gitignore',\n '/LICENSE',\n '/README.md',\n '/docsrc/',\n '/hubcap/',\n '/setup.cfg',\n '/setup.py']\n>>> content = branch['/setup.cfg']\n>>> print(content[:32].decode())\n[metadata]\nname = hubcap\nversion\n```\n\n\n## Listing repositories and information about them\n\n\nList repositories for a given user or organization, along with 78 fields of info.\n\n```python\n>>> from hubcap.examples import repos_info, actions_info\n>>>\n>>> repos = repos_info('i2mint')  # doctest: +SKIP\n>>> print(repos.shape)   # doctest: +SKIP\n(60, 78)\n>>> repos.head()  # doctest: +SKIP\n                         id                           node_id       name  ... watchers  default_branch                                        permissions\nfull_name                                                                 ...\ni2mint/py2mqtt    425694616                      R_kgDOGV-VmA    py2mqtt  ...        0            main  {'admin': True, 'maintain': True, 'push': True...\ni2mint/mongodol   341721959  MDEwOlJlcG9zaXRvcnkzNDE3MjE5NTk=   mongodol  ...        0          master  {'admin': True, 'maintain': True, 'push': True...\ni2mint/dol        299438731  MDEwOlJlcG9zaXRvcnkyOTk0Mzg3MzE=        dol  ...        4          master  {'admin': True, 'maintain': True, 'push': True...\ni2mint/stream2py  238989487  MDEwOlJlcG9zaXRvcnkyMzg5ODk0ODc=  stream2py  ...        2          master  {'admin': True, 'maintain': True, 'push': True...\ni2mint/creek      321448350  MDEwOlJlcG9zaXRvcnkzMjE0NDgzNTA=      creek  ...        0          master  {'admin': True, 'maintain': True, 'push': True...\n\n[5 rows x 78 columns]\n>>> list(repos.columns)   # doctest: +SKIP\n['id', 'node_id', 'name', 'full_name', 'private', 'owner', 'html_url', 'description',\n'fork', 'url', 'forks_url', 'keys_url', 'collaborators_url', 'teams_url', 'hooks_url\n', 'issue_events_url', 'events_url', 'assignees_url', 'branches_url', 'tags_url',\n'blobs_url', 'git_tags_url', 'git_refs_url', 'trees_url', 'statuses_url', 'languages_url\n', 'stargazers_url', 'contributors_url', 'subscribers_url', 'subscription_url',\n'commits_url', 'git_commits_url', 'comments_url', 'issue_comment_url', 'contents_url',\n'compare_url', 'merges_url', 'archive_url', 'downloads_url', 'issues_url', 'pulls_url',\n'milestones_url', 'notifications_url', 'labels_url', 'releases_url', 'deployments_url\n', 'created_at', 'updated_at', 'pushed_at', 'git_url', 'ssh_url', 'clone_url', 'svn_url',\n'homepage', 'size', 'stargazers_count', 'watchers_count', 'language', 'has_issue\ns', 'has_projects', 'has_downloads', 'has_wiki', 'has_pages', 'forks_count',\n'mirror_url', 'archived', 'disabled', 'open_issues_count', 'license', 'allow_forking',\n'is_template', 'topics', 'visibility', 'forks', 'open_issues', 'watchers',\n'default_branch', 'permissions']\n\n```\n\n\nGet info about github actions for a given repository.\n\n```python\n>>> actions = actions_info('i2mint/mongodol')   # doctest: +SKIP\n>>> print(actions.shape)   # doctest: +SKIP\n(10, 30)\n>>> actions.head()    # doctest: +SKIP\n           id                    name  ...                                         repository                                    head_repository\n0  1468986198  Continuous Integration  ...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...\n1  1445456774  Continuous Integration  ...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...\n2  1437461380  Continuous Integration  ...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...\n3  1343133456  Continuous Integration  ...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...\n4  1262878182  Continuous Integration  ...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...  {'id': 341721959, 'node_id': 'MDEwOlJlcG9zaXRv...\n\n[5 rows x 30 columns]\n>>>\n>>> list(actions.columns)   # doctest: +SKIP\n['id', 'name', 'node_id', 'head_branch', 'head_sha', 'run_number', 'event', 'status',\n'conclusion', 'workflow_id', 'check_suite_id', 'check_suite_node_id', 'url', 'html_url',\n'pull_requests', 'created_at', 'updated_at', 'run_attempt', 'run_started_at',\n'jobs_url', 'logs_url', 'check_suite_url', 'artifacts_url', 'cancel_url', 'rerun_url',\n'previous_attempt_url', 'workflow_url', 'head_commit', 'repository', 'head_repository']\n```\n\n\nFind most recently changed repositories and check if their CI failed or not.\n\n```python\n>>> from hubcap.examples import date_selection_lidx\n>>> updated_recently = repos.iloc\n...     [date_selection_lidx(repos, hours_ago=24)]  # doctest: +SKIP\n>>> {repo: get_last_build_status(repo)\n...     for repo in updated_recently['full_name']}  # doctest: +SKIP\n{'i2mint/py2mqtt': 'failure',\n 'i2mint/mongodol': 'success',\n 'i2mint/dol': 'success',\n 'i2mint/stream2py': 'success',\n 'i2mint/creek': 'success'}\n```\n\n\nNote: You can get this directly using the `ci_status` function\n\n```python\n>>> from hubcap.examples import ci_status\n>>> ci_status('i2mint', hours_ago=24)  # doctest: +SKIP\n{'i2mint/py2mqtt': 'failure',\n 'i2mint/mongodol': 'success',\n 'i2mint/dol': 'success',\n 'i2mint/stream2py': 'success',\n 'i2mint/creek': 'success'}\n```\n",
    "bugtrack_url": null,
    "license": "apache-2.0",
    "summary": "A py2store (i.e. dict-like) interface to github",
    "version": "0.1.1",
    "project_urls": {
        "Homepage": "https://github.com/thorwhalen/hubcap"
    },
    "split_keywords": [
        "github"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a2649db9c103cb154d2b682763d84c2745a03a121f6348b786146f4a2aa3df72",
                "md5": "d1fc38a3820e68f006bd68c2c6034ea4",
                "sha256": "5b3c88a464948651c2f7ee4e665f01042e551bc120e42e53f579881cb2de0783"
            },
            "downloads": -1,
            "filename": "hubcap-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "d1fc38a3820e68f006bd68c2c6034ea4",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 25779,
            "upload_time": "2024-02-09T12:48:57",
            "upload_time_iso_8601": "2024-02-09T12:48:57.424682Z",
            "url": "https://files.pythonhosted.org/packages/a2/64/9db9c103cb154d2b682763d84c2745a03a121f6348b786146f4a2aa3df72/hubcap-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-02-09 12:48:57",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "thorwhalen",
    "github_project": "hubcap",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "hubcap"
}
        
Elapsed time: 0.18077s