diff --git a/api/__init__.py b/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/activity/__init__.py b/api/activity/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/apps/__init__.py b/api/apps/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/apps/apps.py b/api/apps/apps.py new file mode 100644 index 0000000..da3a787 --- /dev/null +++ b/api/apps/apps.py @@ -0,0 +1,21 @@ +from core.rest_client import RestClient +from api.apps.installactions import Installation + + +class Apps(RestClient): + def __init__(self, api_root_url, **kwargs): + super(Apps, self).__init__(api_root_url, **kwargs) + self.installaction = Installation(self.api_root_url, **kwargs) + + def create_gitHub_app_from_a_manifest(self, code, **kwargs): + """ + https://developer.github.com/v3/apps/#create-a-github-app-from-a-manifest + """ + return self.post("/app-manifests/{}/conversions".format(code), **kwargs) + + def get_a_user_installation(self, username, **kwargs): + """ + https://developer.github.com/v3/apps/#get-a-user-installation + """ + headers = {'Accept': 'application/vnd.github.machine-man-preview+json'} + return self.get("/users/{}/installation".format(username), headers=headers, **kwargs) diff --git a/api/apps/installactions.py b/api/apps/installactions.py new file mode 100644 index 0000000..a039858 --- /dev/null +++ b/api/apps/installactions.py @@ -0,0 +1,29 @@ +from core.rest_client import RestClient + + +class Installation(RestClient): + def list_repositories(self, **kwargs): + """ + https://developer.github.com/v3/apps/installations/#list-repositories + :param kwargs: + :return: + """ + headers = {'Accept': 'application/vnd.github.machine-man-preview+json'} + return self.get("/installation/repositories", headers=headers, **kwargs) + + def list_installations_for_a_user(self, **kwargs): + """ + https://developer.github.com/v3/apps/installations/#list-installations-for-a-user + :param kwargs: + :return: + """ + headers = {'Accept': 'application/vnd.github.machine-man-preview+json'} + return self.get("/user/installations", headers=headers, **kwargs) + + def add_repository_to_installation(self, installation_id, repository_id, **kwargs): + """ + https://developer.github.com/v3/apps/installations/#add-repository-to-installation + """ + headers = {'Accept': 'application/vnd.github.machine-man-preview+json'} + return self.put("/user/installations/{}/repositories/{}".format(installation_id, repository_id), headers = headers, **kwargs) + diff --git a/api/checks/__init__.py b/api/checks/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/checks/checks.py b/api/checks/checks.py new file mode 100644 index 0000000..d5defe8 --- /dev/null +++ b/api/checks/checks.py @@ -0,0 +1,8 @@ +from core.rest_client import RestClient +from api.checks.runs import Runs + + +class Checks(RestClient): + def __init__(self, api_root_url, **kwargs): + super(Checks, self).__init__(api_root_url, **kwargs) + self.runs = Runs(self.api_root_url, **kwargs) diff --git a/api/checks/runs.py b/api/checks/runs.py new file mode 100644 index 0000000..97616b9 --- /dev/null +++ b/api/checks/runs.py @@ -0,0 +1,49 @@ +from core.rest_client import RestClient + + +class Runs(RestClient): + + def list_check_runs(self, owner, repo, ref, **kwargs): + """ + https://developer.github.com/v3/checks/runs/#list-check-runs-for-a-specific-ref + """ + headers = {'Accept': 'application/vnd.github.antiope-preview+json'} + return self.get("/repos/{}/{}/commits/{}/check-runs".format(owner, repo, ref), headers=headers, **kwargs) + + def create_a_check_runs(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/checks/runs/#create-a-check-run + """ + headers = {'Accept': 'application/vnd.github.antiope-preview+json'} + return self.post('/repos/{}/{}/check-runs'.format(owner, repo), headers = headers, **kwargs) + + def updata_a_check_runs(self, owner, repo, check_run_id, **kwargs): + """ + https://developer.github.com/v3/checks/runs/#update-a-check-run + """ + headers = {'Accept': 'application/vnd.github.antiope-preview+json'} + return self.patch('/repos/{}/{}/check-runs/{}'.format(owner, repo, check_run_id), headers = headers, **kwargs) + + def list_check_runs_in_a_check_suite(self, owner, repo, check_suite_id, **kwargs): + """ + https://developer.github.com/v3/checks/runs/#list-check-runs-in-a-check-suite + """ + headers = {'Accept': 'application/vnd.github.antiope-preview+json'} + return self.get('/repos/{}/{}/check-suites/{}/check-runs'.format(owner, repo, check_suite_id), headers = headers, **kwargs) + + def get_a_single_check_run(self, owner, repo, check_run_id, **kwargs): + """ + https://developer.github.com/v3/checks/runs/#get-a-check-run + """ + headers = {'Accept': 'application/vnd.github.antiope-preview+json'} + return self.get('/repos/{}/{}/check-runs/{}'.format(owner, repo, check_run_id), headers = headers, **kwargs) + + def list_annotations_for_a_check_run(self, owner, repo, check_run_id, **kwargs): + """ + https://developer.github.com/v3/checks/runs/#list-check-run-annotations + """ + headers = {'Accept': 'application/vnd.github.antiope-preview+json'} + return self.get('/repos/{}/{}/check-runs/{}/annotations'.format(owner, repo, check_run_id), headers = headers, **kwargs) + + + diff --git a/api/gists/__init__.py b/api/gists/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/git_data/__init__.py b/api/git_data/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/interactions/__init__.py b/api/interactions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/interactions/interactions.py b/api/interactions/interactions.py new file mode 100644 index 0000000..e70474c --- /dev/null +++ b/api/interactions/interactions.py @@ -0,0 +1,14 @@ +from core.rest_client import RestClient +from api.interactions.orgs import Orgs +from api.interactions.repos import Repos + + +class Interactions(RestClient): + """ + https://developer.github.com/v3/interactions/#interactions + """ + + def __init__(self, api_root_url, **kwargs): + super(Interactions, self).__init__(api_root_url, **kwargs) + self.orgs = Orgs(self.api_root_url, **kwargs) + self.repos = Repos(self.api_root_url, **kwargs) diff --git a/api/interactions/orgs.py b/api/interactions/orgs.py new file mode 100644 index 0000000..912f709 --- /dev/null +++ b/api/interactions/orgs.py @@ -0,0 +1,27 @@ +from core.rest_client import RestClient + + +class Orgs(RestClient): + def __init__(self): + self.headers = {'Accept': 'application/vnd.github.sombra-preview'} + + def get_interactions_limits_for_org(self, org, **kwargs): + """ + https://developer.github.com/v3/interactions/orgs/#get-interaction-restrictions-for-an-organization + :param org: organization name + """ + return self.get('/orgs/{}/interaction-limits'.format(org), headers=self.headers, **kwargs) + + def update_interactions_limits_for_org(self, org, **kwargs): + """ + https://developer.github.com/v3/interactions/orgs#add-or-update-interaction-restrictions-for-an-organization + :param org: organization name + """ + return self.put('/orgs/{}/interaction-limits'.format(org), headers=self.headers, **kwargs) + + def remove_interaction_restrictions_for_org(self, org, **kwargs): + """ + https://developer.github.com/v3/interactions/orgs#remove-interaction-restrictions-for-an-organization + :param org: organization name + """ + return self.delete('/orgs/{}/interaction-limits'.format(org), headers=self.headers, **kwargs) diff --git a/api/interactions/repos.py b/api/interactions/repos.py new file mode 100644 index 0000000..c4fc7c0 --- /dev/null +++ b/api/interactions/repos.py @@ -0,0 +1,29 @@ +from core.rest_client import RestClient + + +class Repos(RestClient): + def __init__(self): + self.headers = {'Accept': 'application/vnd.github.sombra-preview'} + + def get_interaction_restrictions_for_repo(self, owner, **kwargs): + """ + https://developer.github.com/v3/interactions/repos#get-interaction-restrictions-for-a-repository + :param owner: organization owner + """ + return self.get('/repos/{}/:repo/interaction-limits'.format(owner), headers=self.headers, **kwargs) + + def update_interaction_restrictions_for_repo(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/interactions/repos/#add-or-update-interaction-restrictions-for-a-repository + :param owner: organization owner + :param repo: repository + """ + return self.put('/repos/{}/{}/interaction-limits'.format(owner, repo), headers=self.headers, **kwargs) + + def remove_interaction_restrictions_for_repo(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/interactions/repos/#remove-interaction-restrictions-for-a-repository + :param owner: organization owner + :param repo: repository + """ + return self.delete('/repos/{}/{}/interaction-limits'.format(owner, repo), header=self.headers, **kwargs) diff --git a/api/issues/__init__.py b/api/issues/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/issues/events.py b/api/issues/events.py new file mode 100644 index 0000000..e596d46 --- /dev/null +++ b/api/issues/events.py @@ -0,0 +1,30 @@ +from core.rest_client import RestClient + + +class Events(RestClient): + def list_events_for_an_issue(self, owner, repo, issue_number, **kwargs): + """ + https://developer.github.com/v3/issues/events/#list-events-for-an-issue + """ + headers = {'Accept': 'application/vnd.github.starfox-preview+json,' + 'application/vnd.github.sailor-v-preview+json'} + return self.get('/repos/{}/{}/issues/{}/events'.format(owner, repo, issue_number), **kwargs, headers = headers) + + + def list_events_for_a_repository(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/issues/events/#list-issue-events-for-a-repository + """ + headers = {'Accept': 'application/vnd.github.starfox-preview+json,' + 'application/vnd.github.sailor-v-preview+json'} + return self.get('/repos/{}/{}/issues/events'.format(owner, repo), **kwargs, headers = headers) + + def get_a_single_event(self, owner, repo, event_id, **kwargs): + """ + https://developer.github.com/v3/issues/events/#get-an-issue-event + """ + headers = {'Accept': 'application/vnd.github.starfox-preview+json,' + 'application/vnd.github.machine-man-preview,' + 'application/vnd.github.sailor-v-preview+json'} + return self.get('/repos/{}/{}/issues/events/{}'.format(owner, repo, event_id), **kwargs, headers = headers) + diff --git a/api/issues/issues.py b/api/issues/issues.py new file mode 100644 index 0000000..308f774 --- /dev/null +++ b/api/issues/issues.py @@ -0,0 +1,24 @@ +from core.rest_client import RestClient +from api.issues.events import Events + + +class Issues(RestClient): + + def __init__(self, api_root_url, **kwargs): + super(Issues, self).__init__(api_root_url, **kwargs) + self.event = Events(self.api_root_url, **kwargs) + + def create_issue(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/issues/#create-an-issue + """ + return self.post("/repos/{}/{}/issues".format(owner, repo), **kwargs) + + def list_issue(self, **kwargs): + """ + https://developer.github.com/v3/issues/#list-issues + """ + header = {'Accept': 'application/vnd.github.machine-man-preview'} + return self.get("/issues", headers=header, **kwargs) + + diff --git a/api/marketplace/__init__.py b/api/marketplace/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/migrations/__init__.py b/api/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/misc/__init__.py b/api/misc/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/orgs/__init__.py b/api/orgs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/projects/__init__.py b/api/projects/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/projects/cards.py b/api/projects/cards.py new file mode 100644 index 0000000..e450b9f --- /dev/null +++ b/api/projects/cards.py @@ -0,0 +1,45 @@ +from core.rest_client import RestClient + +class Cards(RestClient): + + def list_project_cards(self, column_id, **kwargs): + """ + https://developer.github.com/v3/projects/cards/#list-project-cards + """ + hearders = {'Accept':'application/vnd.github.inertia-preview+json'} + return self.get('/projects/columns/{}/cards'.format(column_id), hearders = hearders, **kwargs) + + def get_a_project_card(self, card_id): + """ + https://developer.github.com/v3/projects/cards/#get-a-project-card + """ + hearders = {'Accept': 'application/vnd.github.inertia-preview+json'} + return self.get('/projects/columns/cards/{}'.format(card_id), hearders = hearders) + + def create_a_project_card(self, column_id, **kwargs): + """ + https://developer.github.com/v3/projects/cards/#create-a-project-card + """ + hearders = {'Accept': 'application/vnd.github.inertia-preview+json'} + return self.post('/projects/columns/{}/cards'.format(column_id), hearders = hearders, **kwargs) + + def update_a_project_card(self, card_id, **kwargs): + """ + https://developer.github.com/v3/projects/cards/#update-a-project-card + """ + hearders = {'Accept': 'application/vnd.github.inertia-preview+json'} + return self.patch('/projects/columns/cards/{}'.format(card_id), hearders = hearders, **kwargs) + + def delete_a_project_card(self, card_id): + """ + https://developer.github.com/v3/projects/cards/#delete-a-project-card + """ + hearders = {'Accept': 'application/vnd.github.inertia-preview+json'} + return self.delete('/projects/columns/cards/{}'.format(card_id), hearders = hearders) + + def move_a_project_card(self, card_id, **kwargs): + """ + https://developer.github.com/v3/projects/cards/#move-a-project-card + """ + hearders = {'Accept': 'application/vnd.github.inertia-preview+json'} + return self.post('/projects/columns/cards/{}/moves'.format(card_id),hearders = hearders, **kwargs) diff --git a/api/projects/collaborators.py b/api/projects/collaborators.py new file mode 100644 index 0000000..a62483a --- /dev/null +++ b/api/projects/collaborators.py @@ -0,0 +1,32 @@ +from core.rest_client import RestClient + +class Collaborators(RestClient): + + def add_user_as_a_collaborator(self, project_id, username, **kwargs): + """ + https://developer.github.com/v3/projects/collaborators/#add-user-as-a-collaborator + """ + headers ={'Accept':'application/vnd.github.inertia-preview+json'} + return self.put('/projects/{}/collaborators/{}'.format(project_id, username),headers = headers, **kwargs) + + def list_collaborator(self, project_id, **kwargs): + """ + https://developer.github.com/v3/projects/collaborators/#list-collaborators + """ + headers = {'Accept': 'application/vnd.github.inertia-preview+json'} + return self.get('/projects/{}/collaborators'.format(project_id), headers = headers, **kwargs) + + def review_a_users_permission_level(self, project_id, username, **kwargs): + """ + https://developer.github.com/v3/projects/collaborators/#review-a-users-permission-level + """ + headers = {'Accept':'application/vnd.github.inertia-preview+json'} + return self.get('/projects/{}/collaborators/{}/permission'.format(project_id,username), headers = headers, **kwargs) + + def remove_user_as_a_collaborator(self, project_id, username): + """ + https://developer.github.com/v3/projects/collaborators/#remove-user-as-a-collaborator + """ + headers = {'Accept':'application/vnd.github.inertia-preview+json'} + return self.delete('/projects/{}/collaborators/{}'.format(project_id,username), headers = headers) + diff --git a/api/projects/columns.py b/api/projects/columns.py new file mode 100644 index 0000000..d26277c --- /dev/null +++ b/api/projects/columns.py @@ -0,0 +1,48 @@ +from core.rest_client import RestClient + +class Columns(RestClient): + + def create_a_project_column(self, project_id, **kwargs): + """ + https://developer.github.com/v3/projects/columns/#create-a-project-column + """ + headers ={'Accept':'application/vnd.github.inertia-preview+json'} + return self.post('/projects/{}/columns'.format(project_id), headers, **kwargs) + + def delete_a_project_column(self, column_id): + """ + https://developer.github.com/v3/projects/columns/#delete-a-project-column + """ + hearders = {'Accept':'application/vnd.github.inertia-preview+json'} + return self.delete('/projects/columns/{}'.format(column_id), hearders = hearders) + + def update_a_project_column(self, column_id): + """ + https://developer.github.com/v3/projects/columns/#update-a-project-column + """ + hearders = {'Accept':'application/vnd.github.inertia-preview+json'} + return self.patch('/projects/columns/{}'.format(column_id), hearders = hearders) + + def move_a_project_column(self, column_id, **kwargs): + """ + https://developer.github.com/v3/projects/columns/#move-a-project-column + """ + hearders = {'Accept':'application/vnd.github.inertia-preview+json'} + return self.post('/projects/columns/{}/moves'.format(column_id), hearders = hearders, **kwargs) + + def get_a_project_column(self, column_id): + """ + https://developer.github.com/v3/projects/columns/#get-a-project-column + """ + hearders = {'Accept':'application/vnd.github.inertia-preview+json'} + return self.get('/projects/columns/{}'.format(column_id), hearders = hearders) + + def list_project_columns(self, project_id): + """ + https://developer.github.com/v3/projects/columns/#list-project-columns + """ + hearders = {'Accept': 'application/vnd.github.inertia-preview+json'} + return self.get('/projects/{}/columns'.format(project_id), hearders=hearders) + + + diff --git a/api/projects/projects.py b/api/projects/projects.py new file mode 100644 index 0000000..e78d9ee --- /dev/null +++ b/api/projects/projects.py @@ -0,0 +1,76 @@ +from core.rest_client import RestClient +from api.projects.cards import Cards +from api.projects.columns import Columns +from api.projects.collaborators import Collaborators + +class Projects(RestClient): + def __int__(self, api_root_url, **kwargs): + super(Projects, self).__init__(api_root_url, **kwargs) + self.cards = Cards(self.api_root_url, **kwargs) + self.columns = Columns(self.api_root_url, **kwargs) + self.collaborators = Collaborators(self.api_root_url, **kwargs) + + def list_repository_projects(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/projects/#list-repository-projects + """ + headers = {'Accept':'application/vnd.github.inertia-preview+json'} + return self.get('/repos/:{}/{}/projects'.format(owner,repo), headers = headers, **kwargs) + + def list_organization_projects(self, org, **kwargs): + """ + https://developer.github.com/v3/projects/#list-organization-projects + """ + headers = {'Accept':'application/vnd.github.inertia-preview+json'} + return self.get('/orgs/{}/projects'.format(org), headers =headers, **kwargs) + + def list_user_projects(self, username, **kwargs): + """ + https://developer.github.com/v3/projects/#list-user-projects + """ + headers = {'Accept':'application/vnd.github.inertia-preview+json'} + return self.get('/users/{}/projects'.format(username),headers = headers, **kwargs) + + def get_a_project(self, project_id): + """ + https://developer.github.com/v3/projects/#get-a-project + """ + headers = {'Accept':'application/vnd.github.inertia-preview+json'} + return self.get('/projects/{}'.format(project_id), headers = headers) + + def create_a_repository_projec(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/projects/#get-a-project + """ + headers = {'Accept':'application/vnd.github.inertia-preview+json'} + return self.post('/repos/{}/{}/projects'.format(owner,repo), headers = headers, **kwargs) + + def create_an_organization_project(self, org, **kwargs): + """ + https://developer.github.com/v3/projects/#get-a-project + """ + headers = {'Accept':'application/vnd.github.inertia-preview+json'} + + return self.post('/orgs/{}/projects'.format(org), headers = headers, **kwargs) + + def create_a_user_project(self, **kwargs): + """ + https://developer.github.com/v3/projects/#get-a-project + """ + headers = {'Accept':'application/vnd.github.inertia-preview+json'} + return self.post('/user/projects', headers = headers, **kwargs) + + def update_a_project(self, project_id, **kwargs): + """ + https://developer.github.com/v3/projects/#get-a-project + """ + headers = {'Accept':'application/vnd.github.inertia-preview+json'} + return self.patch('/projects/{}'.format(project_id), headers = headers, **kwargs) + + def delete_a_project(self, project_id): + """ + https://developer.github.com/v3/projects/#get-a-project + """ + headers = {'Accept':'application/vnd.github.inertia-preview+json'} + + return self.delete('/projects/'.format(project_id), headers = headers) \ No newline at end of file diff --git a/api/pulls/__init__.py b/api/pulls/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/pulls/comments.py b/api/pulls/comments.py new file mode 100644 index 0000000..ae8bba0 --- /dev/null +++ b/api/pulls/comments.py @@ -0,0 +1,42 @@ +from core.rest_client import RestClient + +class Comments(RestClient): + + def list_comments_on_a_pull_request(self, owner, repo, pull_number, **kwargs): + """ + https://developer.github.com/v3/pulls/comments/#list-comments-on-a-pull-request + """ + headers = {'Accept':'application/vnd.github.squirrel-girl-preview'} + return self.get('/repos/{}/{}/pulls/{}/comments'.format(owner, repo, pull_number), **kwargs, headers=headers) + + def list_comments_in_a_repository(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/pulls/comments/#list-comments-in-a-repository + """ + headers = {'Accept':'application/vnd.github.squirrel-girl-preview'} + return self.get('/repos//pulls/comments'.format(owner, repo), **kwargs, headers=headers) + + def get_a_single_comment(self, owner, repo, comment_id): + """ + https://developer.github.com/v3/pulls/comments/#get-a-single-comment + """ + headers = {'Accept': 'application/vnd.github.squirrel-girl-preview'} + return self.get('/repos/{}/{}/pulls/comments/{}'.format(owner, repo, comment_id), headers=headers) + + def create_a_comment(self, owner, repo, pull_number, **kwargs): + """ + https://developer.github.com/v3/pulls/comments/#create-a-comment + """ + return self.post('/repos/{}/{}/pulls/{}/comments'.format(owner, repo, pull_number), **kwargs) + + def edit_a_comment(self, owner, repo, comment_id, **kwargs): + """ + https://developer.github.com/v3/pulls/comments/#create-a-comment + """ + return self.patch('/repos/{}/{}/pulls/comments/{}'.format(owner, repo, comment_id), **kwargs) + + def delete_a_comment(self, owner, repo, comment_id): + """ + https://developer.github.com/v3/pulls/comments/#delete-a-comment + """ + return self.delete('/repos/{}/{}/pulls/comments/{}'.format(owner, repo, comment_id)) \ No newline at end of file diff --git a/api/pulls/pulls.py b/api/pulls/pulls.py new file mode 100644 index 0000000..9b7367e --- /dev/null +++ b/api/pulls/pulls.py @@ -0,0 +1,81 @@ +from core.rest_client import RestClient +from api.pulls.comments import Comments +from api.pulls.review_requests import Review_requests +from api.pulls.reviews import Reviews + +class Pulls(RestClient): + def __init__(self, api_root_url, **kwargs): + super(Pulls, self).__init__(api_root_url, **kwargs) + self.comments = Comments(self.api_root_url, **kwargs) + self.review_requests = Review_requests(self.api_root_url, **kwargs) + self.reviews = Reviews(self.api_root_url, **kwargs) + + def list_pull_request(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/pulls/#list-pull-requests + """ + headers = {'Accept':'application/vnd.github.shadow-cat-preview+json,' + 'application/vnd.github.symmetra-preview+json,' + 'application/vnd.github.sailor-v-preview+json'} + return self.get('/repes/{}/{}/pulls'.format(owner, repo), **kwargs, headers = headers) + + def get_a_single_pull_request(self, owner, repo, pull_number): + """ + https://developer.github.com/v3/pulls/#get-a-single-pull-request + """ + headers = {'Accept': 'application/vnd.github.shadow-cat-preview+json,' + 'application/vnd.github.symmetra-preview+json,' + 'application/vnd.github.sailor-v-preview+json'} + return self.get('/repes/{}/{}/pulls/{}'.format(owner, repo, pull_number), headers = headers) + + def create_a_pull_request(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/pulls/#create-a-pull-request + """ + headers = {'Accept': 'application/vnd.github.shadow-cat-preview+json,' + 'application/vnd.github.symmetra-preview+json,' + 'application/vnd.github.sailor-v-preview+json'} + + return self.post('/repos/{}/{}/pulls'.format(owner, repo),**kwargs, headers=headers) + + def update_a_pull_request_branch(self, owner, repo, pull_number, **kwargs): + """ + https://developer.github.com/v3/pulls/#update-a-pull-request-branch + """ + headers={'Accept':'application/vnd.github.lydian-preview+json'} + return self.put('/repos/{}/{}/pulls/{}/update-branch'.format(owner, repo, pull_number),**kwargs, headers=headers) + + def update_a_pull_request(self, owner, repo, pull_number, **kwargs): + """ + https://developer.github.com/v3/pulls/#update-a-pull-request + """ + headers = {'Accept': 'application/vnd.github.shadow-cat-preview+json,' + 'application/vnd.github.symmetra-preview+json,' + 'application/vnd.github.sailor-v-preview+json'} + return self.patch('/repos/{}/{}/pulls/{}'.format(owner, repo, pull_number), **kwargs, headers = headers) + + def list_a_commits_on_a_pull_request(self, owner ,repo, pull_number): + """ + https://developer.github.com/v3/pulls/#list-commits-on-a-pull-request + """ + return self.get('/repos/{}/{}/pulls/{}/commits'.format(owner, repo, pull_number)) + + def list_pull_requests_files(self, owner, repo, pull_number): + """ + https://developer.github.com/v3/pulls/#list-commits-on-a-pull-request + """ + return self.get('/repos/{}/{}/pulls/{}/files'.format(owner, repo, pull_number)) + + def get_a_if_pull_request_has_been_merged(self, owner, repo, pull_number): + """ + https://developer.github.com/v3/pulls/#get-if-a-pull-request-has-been-merged + """ + return self.get('/repos/{}/{}/pulls/{}/merge'.format(owner, repo, pull_number)) + + def merged_a_pull_request(self, owner, repo, pull_number, **kwargs): + """ + https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button + """ + return self.put('/repos/{}/{}/pulls/{}/merge'.format(owner, repo, pull_number), **kwargs) + + diff --git a/api/pulls/review_requests.py b/api/pulls/review_requests.py new file mode 100644 index 0000000..0375636 --- /dev/null +++ b/api/pulls/review_requests.py @@ -0,0 +1,22 @@ +from core.rest_client import RestClient + +class Review_requests(RestClient): + + def list_review_request(self, owner, repo, pull_number): + """ + https://developer.github.com/v3/pulls/review_requests/#list-review-requests + """ + return self.get('/repos/{}/{}/pulls/{}/requested_reviewers'.format(owner, repo, pull_number)) + + def create_a_review_request(self, owner, repo, pull_number): + """ + https://developer.github.com/v3/pulls/review_requests/#create-a-review-request + """ + headers = {'Accept':'application/vnd.github.symmetra-preview+json'} + return self.post('/repos/{}/{}/pulls/{}/requested_reviewers'.format(owner, repo, pull_number),headers = headers) + + def delete_a_review_request(self, owner, repo, pull_number): + """ + https://developer.github.com/v3/pulls/review_requests/#delete-a-review-request + """ + return self.delete('/repos/{}/{}/pulls/{}/requested_reviewers'.format(owner, repo, pull_number)) diff --git a/api/pulls/reviews.py b/api/pulls/reviews.py new file mode 100644 index 0000000..8c836ea --- /dev/null +++ b/api/pulls/reviews.py @@ -0,0 +1,52 @@ +from core.rest_client import RestClient + +class Reviews(RestClient): + + def list_reviews_on_a_pull_request(self, owner, repo, pull_number): + """ + https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request + """ + return self.get('/repos/{}/{}/pulls/{}/reviews'.format(owner, repo, pull_number)) + + def get_a_single_review(self, owner, repo, pull_number, review_id): + """ + https://developer.github.com/v3/pulls/reviews/#get-a-single-review + """ + return self.get('/repos/{}/{}/pulls/{}/reviews/{}'.format(owner, repo, pull_number, review_id)) + + def delete_a_pending_review(self, owner, repo, pull_number, review_id): + """ + https://developer.github.com/v3/pulls/reviews/#delete-a-pending-review + """ + return self.delete('/repos/{}/{}/pulls/{}/reviews/{}'.format(owner, repo, pull_number, review_id)) + + def get_a_comments_for_a_single_review(self, owner, repo, pull_number, review_id): + """ + https://developer.github.com/v3/pulls/reviews/#delete-a-pending-review + """ + return self.get('/repos/{}/{}/pulls/{}/reviews/{}/comments'.format(owner, repo, pull_number, review_id)) + + def create_a_pull_request_review(self, owner, repo, pull_number, **kwargs): + """ + https://developer.github.com/v3/pulls/reviews/#create-a-pull-request-review + """ + headers = {'Accept':'application/vnd.github.v3.diff'} + return self.post('/repos/{}/{}/pu lls/{}/reviews'.format(owner, repo, pull_number), **kwargs, headers =headers) + + def update_a_pull_request_review(self, owner, repo, pull_number, review_id, **kwargs): + """ + https://developer.github.com/v3/pulls/reviews/#update-a-pull-request-review + """ + return self.put('/repos/{}/{}/pulls/{}/reviews/{}'.format(owner, repo, pull_number, review_id), **kwargs) + + def submit_a_pull_request_review(self, owner, repo, pull_number, review_id, **kwargs): + """ + https://developer.github.com/v3/pulls/reviews/#submit-a-pull-request-review + """ + return self.post("/repos/{}/{}/pulls/{}/reviews/{}/events".format(owner, repo, pull_number, review_id), **kwargs) + + def dismiss_a_pull_request_review(self, owner, repo, pull_number, review_id, **kwargs): + """ + https://developer.github.com/v3/pulls/reviews/#dismiss-a-pull-request-review + """ + return self.put("/repos/{}/{}/pulls/{}/reviews/{}/dismissals".format(owner, repo, pull_number, review_id), **kwargs) \ No newline at end of file diff --git a/api/reactions/__init__.py b/api/reactions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/reactions/reactions.py b/api/reactions/reactions.py new file mode 100644 index 0000000..d18402c --- /dev/null +++ b/api/reactions/reactions.py @@ -0,0 +1,10 @@ +from core.rest_client import RestClient + + +class Reactions(RestClient): + + def list_reactions_for_a_commit_comment(self, owner, repo, comment_id, **kwargs): + """ + https://developer.github.com/v3/reactions/#list-reactions-for-a-commit-comment + """ + return self.get("/repos/{}/{}/comments/{}/reactions".format(owner, repo, comment_id), **kwargs) diff --git a/api/repositories/__init__.py b/api/repositories/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/repositories/branches.py b/api/repositories/branches.py new file mode 100644 index 0000000..c468560 --- /dev/null +++ b/api/repositories/branches.py @@ -0,0 +1,223 @@ +from core.rest_client import RestClient + + +class Branches(RestClient): + + # 135 + def list_branches(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#list-branches + """ + return self.get('/repos/{}/{}/branches'.format(owner, repo), **kwargs) + + # 136 + def get_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#get-branch + """ + return self.get('/repos/{}/{}/branches/{}'.format(owner, repo, branch), **kwargs) + + # 137 + def get_branch_protection(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#get-branch-protection + """ + return self.get('/repos/{}/{}/branches/{}/protection'.format(owner, repo, branch), **kwargs) + + # 138 + def update_branch_protection(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#update-branch-protection + """ + return self.put('/repos/{}/{}/branches/{}/protection'.format(owner, repo, branch), **kwargs) + + # 139 + def remove_branch_protection(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#remove-branch-protection + """ + return self.delete('/repos/{}/{}/branches/{}/protection'.format(owner, repo, branch), **kwargs) + + # 140 + def get_required_status_checks_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#get-required-status-checks-of-protected-branch + """ + return self.get('/repos/{}/{}/branches/{}/protection/required_status_checks'.format(owner, repo, branch), **kwargs) + + # 141 + def update_required_status_checks_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#update-required-status-checks-of-protected-branch + """ + return self.patch('/repos/{}/{}/branches/{}/protection/required_status_checks'.format(owner, repo, branch), **kwargs) + + # 142 + def remove_required_status_checks_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#remove-required-status-checks-of-protected-branch + """ + return self.delete('/repos/{}/{}/branches/{}/protection/required_status_checks'.format(owner, repo, branch), **kwargs) + + # 143 + def list_required_status_checks_contexts_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#list-required-status-checks-contexts-of-protected-branch + """ + return self.get('/repos/{}/{}/branches/{}/protection/required_status_checks/contexts'.format(owner, repo, branch), **kwargs) + + # 144 + def replace_required_status_checks_contexts_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#replace-required-status-checks-contexts-of-protected-branch + """ + return self.put('/repos/{}/{}/branches/{}/protection/required_status_checks/contexts'.format(owner, repo, branch), **kwargs) + + # 145 + def add_required_status_checks_contexts_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#add-required-status-checks-contexts-of-protected-branch + """ + return self.post('/repos/{}/{}/branches/{}/protection/required_status_checks/contexts'.format(owner, repo, branch), **kwargs) + + # 146 + def remove_required_status_checks_contexts_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#remove-required-status-checks-contexts-of-protected-branch + """ + return self.delete('/repos/{}/{}/branches/{}/protection/required_status_checks/contexts'.format(owner, repo, branch), **kwargs) + + # 147 + def get_pull_request_review_enforcement_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#get-pull-request-review-enforcement-of-protected-branch + """ + return self.get('/repos/{}/{}/branches/{}/protection/required_pull_request_reviews'.format(owner, repo, branch), **kwargs) + + # 148 + def update_pull_request_review_enforcement_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#update-pull-request-review-enforcement-of-protected-branch + """ + return self.patch('/repos/{}/{}/branches/{}/protection/required_pull_request_reviews'.format(owner, repo, branch), **kwargs) + + # 149 + def remove_pull_request_review_enforcement_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#remove-pull-request-review-enforcement-of-protected-branch + """ + return self.delete('/repos/{}/{}/branches/{}/protection/required_pull_request_reviews'.format(owner, repo, branch), **kwargs) + + # 150 + def get_required_signatures_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#get-required-signatures-of-protected-branch + """ + return self.get('/repos/{}/{}/branches/{}/protection/required_signatures'.format(owner, repo, branch), **kwargs) + + # 151 + def add_required_signatures_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#add-required-signatures-of-protected-branch + """ + return self.post('/repos/{}/{}/branches/{}/protection/required_signatures'.format(owner, repo, branch), + **kwargs) + + # 152 + def remove_required_signatures_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#remove-required-signatures-of-protected-branch + """ + return self.delete('/repos/{}/{}/branches/{}/protection/required_signatures'.format(owner, repo, branch), **kwargs) + + # 153 + def get_admin_enforcement_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#get-admin-enforcement-of-protected-branch + """ + return self.get('/repos/{}/{}/branches/{}/protection/enforce_admins'.format(owner, repo, branch), **kwargs) + + # 154 + def add_admin_enforcement_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#add-admin-enforcement-of-protected-branch + """ + return self.post('/repos/{}/{}/branches/{}/protection/enforce_admins'.format(owner, repo, branch), **kwargs) + + # 155 + def remove_admin_enforcement_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#remove-admin-enforcement-of-protected-branch + """ + return self.delete('/repos/{}/{}/branches/{}/protection/enforce_admins'.format(owner, repo, branch), **kwargs) + + # 156 + def get_restrictions_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#get-restrictions-of-protected-branch + """ + return self.get('/repos/{}/{}/branches/{}/protection/restrictions'.format(owner, repo, branch), **kwargs) + + # 157 + def remove_restrictions_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#remove-restrictions-of-protected-branch + """ + return self.delete('/repos/{}/{}/branches/{}/protection/restrictions'.format(owner, repo, branch), **kwargs) + + # 158 + def list_team_restrictions_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#list-team-restrictions-of-protected-branch + """ + return self.get('/repos/{}/{}/branches/{}/protection/restrictions/teams'.format(owner, repo, branch), **kwargs) + + # 159 + def replace_team_restrictions_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#replace-team-restrictions-of-protected-branch + """ + return self.put('/repos/{}/{}/branches/{}/protection/restrictions/teams'.format(owner, repo, branch), **kwargs) + + # 160 + def add_team_restrictions_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#add-team-restrictions-of-protected-branch + """ + return self.post('/repos/{}/{}/branches/{}/protection/restrictions/teams'.format(owner, repo, branch), **kwargs) + + # 161 + def remove_team_restrictions_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#remove-team-restrictions-of-protected-branch + """ + return self.delete('/repos/{}/{}/branches/{}/protection/restrictions/teams'.format(owner, repo, branch), **kwargs) + + # 162 + def list_user_restrictions_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#list-user-restrictions-of-protected-branch + """ + return self.get('/repos/{}/{}/branches/{}/protection/restrictions/users'.format(owner, repo, branch), **kwargs) + + # 163 + def replace_user_restrictions_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#replace-user-restrictions-of-protected-branch + """ + return self.put('/repos/{}/{}/branches/{}/protection/restrictions/users'.format(owner, repo, branch), **kwargs) + + # 164 + def add_user_restrictions_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#add-user-restrictions-of-protected-branch + """ + return self.post('/repos/{}/{}/branches/{}/protection/restrictions/users'.format(owner, repo, branch), **kwargs) + + # 165 + def remove_user_restrictions_of_protected_branch(self, owner, repo, branch, **kwargs): + """ + https://developer.github.com/v3/repos/branches/#remove-user-restrictions-of-protected-branch + + """ + return self.delete('/repos/{}/{}/branches/{}/protection/restrictions/users'.format(owner, repo, branch), **kwargs) diff --git a/api/repositories/collaborators.py b/api/repositories/collaborators.py new file mode 100644 index 0000000..0e864f9 --- /dev/null +++ b/api/repositories/collaborators.py @@ -0,0 +1,36 @@ +from core.rest_client import RestClient + +class Collaborators(RestClient): + + def list_collaborators(self,owner,repo,**kwargs): + """ + https://developer.github.com/v3/repos/collaborators/#list-collaborators + """ + headlers = {'Accept':'application/vnd.github.hellcat-preview+json'} + return self.get('/repos/{}/{}/collaborators'.format(owner, repo), headlers=headlers, **kwargs) + + def check_if_a_user_is_a_collaborator(self,owner,repo,username,**kwargs): + """ + https://developer.github.com/v3/repos/collaborators/#check-if-a-user-is-a-collaborator + """ + headlers = {'Accept': 'application/vnd.github.hellcat-preview+json'} + return self.get('/repos/{}/{}/collaborators/{}'.format(owner,repo,username), headlers=headlers, **kwargs) + + def review_a_user_permission_level(self,owner,repo,username,**kwargs): + """ + https://developer.github.com/v3/repos/collaborators/#review-a-users-permission-level + :param kwargs:admin,write,read,none。 + """ + return self.get('/repos/{}/{}/collaborators/{}/permission'.format(owner,repo,username), **kwargs) + + def add_user_as_a_collaborator(self,owner,repo,username,**kwargs): + """ + https://developer.github.com/v3/repos/collaborators/#add-user-as-a-collaborator + """ + return self.put('/repos/:owner/{}/collaborators/{}'.format(owner,repo,username), **kwargs) + + def remove_user_as_a_collaborator(self,owner,repo,username,**kwargs): + """ + https://developer.github.com/v3/repos/collaborators/#remove-user-as-a-collaborator + """ + return self.delete('/repos/{}/{}/collaborators/{}'.format(owner,repo,username), **kwargs) \ No newline at end of file diff --git a/api/repositories/comments.py b/api/repositories/comments.py new file mode 100644 index 0000000..0c08946 --- /dev/null +++ b/api/repositories/comments.py @@ -0,0 +1,39 @@ +from core.rest_client import RestClient + +class Comments(RestClient): + + def list_commit_comments_for_a_repository(self, owner, repo): + """ + https://developer.github.com/v3/repos/comments/#list-commit-comments-for-a-repository + """ + return self.get("/repos/{}/{}/comments".format(owner, repo)) + + def list_comment_for_a_single_commit(self, owner, repo, commit_sha): + """ + https://developer.github.com/v3/repos/comments/#list-comments-for-a-single-commit + """ + return self.get("/repos/{}/{}/commits/{}".format(owner, repo, commit_sha)) + + def create_a_commit_comment(self, owner, repo, commit_sha, **kwargs): + """ + https://developer.github.com/v3/repos/comments/#create-a-commit-comment + """ + return self.post("/repos/{}/{}/commits/{}".format(owner, repo, commit_sha), **kwargs) + + def get_a_single_commit_comment(self, owner, repo, comment_id): + """ + https://developer.github.com/v3/repos/comments/#get-a-single-commit-comment + """ + return self.get("/repos/{}/{}/comments/{}".format(owner, repo, comment_id)) + + def update_a_commit_comment(self, owner, repo, comment_id, **kwargs): + """ + https://developer.github.com/v3/repos/comments/#update-a-commit-comment + """ + return self.patch("/repos/{}/{}/comments/{}".format(owner, repo, comment_id), **kwargs) + + def delete_a_comment_commit(self, owner, repo, comment_id): + """ + https://developer.github.com/v3/repos/comments/#delete-a-commit-comment + """ + return self.delete("/repos/{}/{}/comments/{}".format(owner, repo, comment_id)) \ No newline at end of file diff --git a/api/repositories/commits.py b/api/repositories/commits.py new file mode 100644 index 0000000..26a143f --- /dev/null +++ b/api/repositories/commits.py @@ -0,0 +1,35 @@ +from core.rest_client import RestClient + +class Commits(RestClient): + + def list_commits_on_a_repository(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository + """ + return self.get("/repos/{}/{}/commits".format(owner, repo), **kwargs) + + def get_a_single_commit(self, owner, repo, ref, **kwargs): + """ + https://developer.github.com/v3/repos/commits/#get-a-single-commit + """ + return self.get("/repoe/{}/{}/commits/{}".format(owner, repo, ref),**kwargs) + + def compare_two_commits(self, owner, repo, base, head, **kwargs): + """ + https://developer.github.com/v3/repos/commits/#compare-two-commits + """ + return self.get("/repos/{}/{}/compare/{}...{}".format(owner, repo, base, head), **kwargs) + + def list_branchese_for_HEAD_commit(self, owner, repo, commit_sha): + """ + https://developer.github.com/v3/repos/commits/#list-branches-for-head-commit + """ + headers = {"Accept":"application/vnd.github.groot-preview+json"} + return self.get("/repos/{}/{}/commits/{}/branches-where-head".format(owner, repo, commit_sha), headers = headers) + + def list_pull_requests_associated_with_commit(self, owner, repo, commit_sha): + """ + https://developer.github.com/v3/repos/commits/#list-pull-requests-associated-with-commit + """ + return self.get("/repos/{}/{}/commits/{}/pulls".format(owner, repo, commit_sha)) + diff --git a/api/repositories/contents.py b/api/repositories/contents.py new file mode 100644 index 0000000..6c8d7c8 --- /dev/null +++ b/api/repositories/contents.py @@ -0,0 +1,33 @@ +from core.rest_client import RestClient + +class Contents(RestClient): + + def get_the_readme(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/contents/#get-the-readme + """ + return self.get("/repos/{}/{}/readme".format(owner, repo), **kwargs) + + def get_contents(self, owner, repo, path, **kwargs): + """ + https://developer.github.com/v3/repos/contents/#get-contents + """ + return self.get("/repos/{}/{}/contents/{}".format(owner, repo, path), **kwargs) + + def create_or_update_file(self, owner, repo, path, **kwargs): + """ + https://developer.github.com/v3/repos/contents/#create-or-update-a-file + """ + return self.put("/repo/{}/{}/contents/{}".format(owner, repo, path), **kwargs) + + def delete_a_file(self, owner, repo, path, **kwargs): + """ + https://developer.github.com/v3/repos/contents/#delete-a-file + """ + return self.delete("/repo/{}/{}/contents/{}".format(owner, repo, path), **kwargs) + + def get_archive_link(self, owner, repo, archive_format, ref): + """ + https://developer.github.com/v3/repos/contents/#get-archive-link + """ + return self.get("/repos/{}/{}/{}/".format(owner, repo, archive_format, ref)) diff --git a/api/repositories/deployments.py b/api/repositories/deployments.py new file mode 100644 index 0000000..81e4990 --- /dev/null +++ b/api/repositories/deployments.py @@ -0,0 +1,49 @@ +from core.rest_client import RestClient + +class Deployments(RestClient): + + def list_deployments(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/deployments/#list-deployments + """ + headers = {'Accept':'application/vnd.github.ant-man-preview+json'} + return self.get("/repos/{}/{}/deployments".format(owner, repo), headers = headers, **kwargs) + + def get_a_single_deployment(self, owner, repo, deployment_id): + """ + https://developer.github.com/v3/repos/deployments/#get-a-single-deployment + """ + headers = {'Accept':'application/vnd.github.machine-man-preview'} + return self.get("/repos/{}/{}/deployments/{}".format(owner, repo, deployment_id), headers=headers) + + def create_deployment(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/deployments/#create-a-deployment + """ + headers = {'Accept':'application/vnd.github.ant-man-preview+json'} + return self.post("/repos/{}/{}/deployments".format(owner, repo),headers=headers, **kwargs) + + def list_deployment_statuses(self, owner, repo, deployment_id): + """ + https://developer.github.com/v3/repos/deployments/#list-deployment-statuses + """ + headers = {'Accept':'application/vnd.github.ant-man-preview+json,application/vnd.github.flash-preview+json'} + return self.get("/repos/{}/{}/deployments/{}/statuses".format(owner, repo, deployment_id),headers=headers) + + def get_a_single_deployment_status(self, owner, repo, deployment_id, status_id): + """ + https://developer.github.com/v3/repos/deployments/#get-a-single-deployment-status + """ + headers = {'Accept':'application/vnd.github.machine-man-preview,' + 'application/vnd.github.flash-preview+json,' + 'application/vnd.github.ant-man-preview+json'} + return self.get("/repos/{}/{}/deployments/{}/statuses/{}",format(owner, repo, deployment_id, status_id),headers=headers) + + def create_a_deployment_status(self, owner, repo, deployment_id, **kwargs): + """ + https://developer.github.com/v3/repos/deployments/#create-a-deployment-status + """ + headers = {'Accept':'application/vnd.github.flash-preview+json,' + 'application/vnd.github.ant-man-preview+json'} + return self.post("/repos/{}/{}/deployments/{}/statuses".format(owner, repo, deployment_id), headers=headers, **kwargs) + diff --git a/api/repositories/downloads.py b/api/repositories/downloads.py new file mode 100644 index 0000000..eb89c13 --- /dev/null +++ b/api/repositories/downloads.py @@ -0,0 +1,21 @@ +from core.rest_client import RestClient + +class Downloads(RestClient): + + def list_downloads_for_a_repository(self, owner, repo): + """ + https://developer.github.com/v3/repos/downloads/#list-downloads-for-a-repository + """ + return self.get("/repos/{}/{}/downloads".format(owner, repo)) + + def get_a_single_downloads(self, owner, repo, download_id): + """ + https://developer.github.com/v3/repos/downloads/#get-a-single-download + """ + return self.get("/repos/{}/{}/downloads/{}".format(owner, repo, download_id)) + + def delete_a_downlaod(self, owner, repo, download_id): + """ + https://developer.github.com/v3/repos/downloads/#delete-a-download + """ + return self.delete("/repos/{}/{}/downloads/{}".format(owner, repo, download_id)) \ No newline at end of file diff --git a/api/repositories/forks.py b/api/repositories/forks.py new file mode 100644 index 0000000..e1dbb55 --- /dev/null +++ b/api/repositories/forks.py @@ -0,0 +1,15 @@ +from core.rest_client import RestClient + +class Forks(RestClient): + + def List_forks(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/forks#list-forks + """ + return self.get('/repos/{}/{}/forks'.format(owner, repo), **kwargs) + + def Create_a_fork(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/forks/#create-a-fork + """ + return self.post('/repos/{}/{}/forks'.format(owner, repo), **kwargs) \ No newline at end of file diff --git a/api/repositories/hooks.py b/api/repositories/hooks.py new file mode 100644 index 0000000..18b5729 --- /dev/null +++ b/api/repositories/hooks.py @@ -0,0 +1,46 @@ +from core.rest_client import RestClient + + +class Hooks(RestClient): + + def create_a_hook(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/hooks/#create-a-hook + """ + return self.post("/repos/{}/{}/hooks".format(owner, repo), **kwargs) + + def edit_a_hook(self, owner,repo, hook_id, **kwargs): + """ + https://developer.github.com/v3/repos/hooks/#edit-a-hook + """ + return self.patch("/repos/{}/{}/hooks/{}".format(owner, repo, hook_id), **kwargs) + + def delete_a_hook(self, owner, repo, hook_id): + """ + https://developer.github.com/v3/repos/hooks/#delete-a-hook + """ + return self.delete_a_hook("/repos/{}/{}/hooks/{}".format(owner, repo, hook_id)) + + def test_a_push_hook(self, owner, repo, hook_id): + """ + https://developer.github.com/v3/repos/hooks/#test-a-push-hook + """ + return self.post(("/repos/{}/{}/hooks/{}/test".format(owner, repo, hook_id))) + + def ping_a_hook(self, owner, repo, hook_id): + """ + https://developer.github.com/v3/repos/hooks/#ping-a-hook + """ + return self.post(("/repos/{}/{}/hooks/{}/pings".format(owner, repo, hook_id))) + + def list_hooks(self,owner,repo, **kwargs): + """ + https://developer.github.com/v3/repos/hooks#list-hooks + """ + return self.get("/repos/{}/{}/hooks".format(owner, repo), **kwargs) + + def pubSubHubbub(self, owner, repo, event, **kwargs): + """ + https://developer.github.com/v3/repos/hooks/#pubsubhubbub + """ + return self.post("/repos/{}/{}/events/{}".format(owner, repo, event), **kwargs) \ No newline at end of file diff --git a/api/repositories/invitations.py b/api/repositories/invitations.py new file mode 100644 index 0000000..399fa57 --- /dev/null +++ b/api/repositories/invitations.py @@ -0,0 +1,40 @@ +from core.rest_client import RestClient + +class Invitations(RestClient): + + def list_invitations_for_a_repository(self, owner, repo): + """ + https://developer.github.com/v3/repos/invitations/#invite-a-user-to-a-repository + """ + return self.get("/repos/{}/{}/invitations".format(owner, repo)) + + def delete_a_repository_invitation(self, owner, repo, invitation_id): + """ + https://developer.github.com/v3/repos/invitations/#delete-a-repository-invitation + """ + return self.delete("/repos/{}/{}/invitations/{}".format(owner, repo, invitation_id)) + + def update_a_repository_invitation(self, owner, repo, invitation_id, **kwargs): + """ + https://developer.github.com/v3/repos/invitations/#update-a-repository-invitation + """ + return self.patch("/repos/{}/{}/invitations/{}".format(owner, repo, invitation_id), **kwargs) + + def list_a_user_repository_invitations(self): + """ + https://developer.github.com/v3/repos/invitations/#list-a-users-repository-invitations + """ + return self.get("/user/repository_invitations") + + def accept_a_repository_inviation(self, invitation_id): + """ + https://developer.github.com/v3/repos/invitations/#accept-a-repository-invitation + """ + return self.patch("/user/repository_invitations/{}".format(invitation_id)) + + def decline_a_repository_invitation(self, invitation_id): + """ + https://developer.github.com/v3/repos/invitations/#decline-a-repository-invitation + """ + self.delete("/user/repository_invitations/{}".format(invitation_id)) + diff --git a/api/repositories/keys.py b/api/repositories/keys.py new file mode 100644 index 0000000..3aee6b0 --- /dev/null +++ b/api/repositories/keys.py @@ -0,0 +1,35 @@ +from core.rest_client import RestClient + + +class Keys(RestClient): + + def List_deploy_keys(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/keys#list-deploy-keys + """ + return self.get('/repos/{}/{}/keys'.format(owner, repo), **kwargs) + + def Get_deploy_key(self, owner, repo, key_id, **kwargs): + """ + https://developer.github.com/v3/repos/keys#get-a-deploy-key + :return: + """ + return self.get('/repos/{}/{}/keys/{}'.format(owner, repo, key_id), **kwargs) + + def Add_deploy_key(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/keys#get-a-deploy-key + """ + return self.post('/repos/{}/{}/keys'.format(owner, repo), **kwargs) + + def Edit_deploy_key(self): + """ + https://developer.github.com/v3/repos/keys/#remove-a-deploy-key + """ + print('Deploy keys are immutable. If you need to update a key, remove the key and create a new one instead.') + + def Remove_deploy_key(self, owner, repo, key_id, **kwargs): + """ + https://developer.github.com/v3/repos/keys#remove-a-deploy-key + """ + return self.delete('/repos/{}/{}/keys/{}'.format(owner, repo, key_id), **kwargs) diff --git a/api/repositories/merging.py b/api/repositories/merging.py new file mode 100644 index 0000000..2c1d290 --- /dev/null +++ b/api/repositories/merging.py @@ -0,0 +1,10 @@ +from core.rest_client import RestClient + + +class Merging(RestClient): + + def Perform_a_merge(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/merging/#perform-a-merge + """ + return self.post('/repos/{}/{}/merges'.format(owner, repo), **kwargs) \ No newline at end of file diff --git a/api/repositories/pages.py b/api/repositories/pages.py new file mode 100644 index 0000000..928297d --- /dev/null +++ b/api/repositories/pages.py @@ -0,0 +1,53 @@ +from core.rest_client import RestClient + +class Pages(RestClient): + + def get_latest_pages_build(self, owner, repo): + """ + https://developer.github.com/v3/repos/pages/#get-latest-pages-build + """ + return self.get("/repos/{}/{}/pages/builds/latest".format(owner, repo)) + + def list_pages_builds(self, owner, repo): + """ + https://developer.github.com/v3/repos/pages/#list-pages-builds + """ + return self.get("/repos/{}/{}/pages/builds".format(owner, repo)) + + def request_a_page_build(self, owner, repo): + """ + https://developer.github.com/v3/repos/pages/#request-a-page-build + """ + + headers = {'Accept':'application/vnd.github.mister-fantastic-preview+json'} + return self.post("/repos/{}/{}/pages/builds".format(owner, repo),headers = headers) + + def update_information_about_a_pages_site(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/pages/#update-information-about-a-pages-site + """ + headers = {'Accept':'application/vnd.github.mister-fantastic-preview+json'} + return self.put("/repos/{}/{}/pages".format(owner, repo), headers = headers, **kwargs) + + def disable_a_pages_site(self, owner, repo): + """ + https://developer.github.com/v3/repos/pages/#disable-a-pages-site + """ + headers = {'Accept': 'application/vnd.github.switcheroo-preview+json'} + return self.delete("/repos/{}/{}/pages".format(owner, repo),headers = headers) + + def enable_a_pages_site(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/pages/#enable-a-pages-site + """ + headers = {'Accept': 'application/vnd.github.switcheroo-preview+json' + ',application/vnd.github.mister-fantastic-preview+json'} + return self.post("/repos/{}/{}/pages".format(owner, repo),headers =headers, **kwargs) + + def get_information_about_a_pages_site(self, owner, repo): + """ + https://developer.github.com/v3/repos/pages/#get-information-about-a-pages-site + """ + + headers = {'Accept':'application/vnd.github.mister-fantastic-preview+json'} + return self.get("/repos/{}/{}/pages".format(owner, repo), headers = headers) \ No newline at end of file diff --git a/api/repositories/releases.py b/api/repositories/releases.py new file mode 100644 index 0000000..f678b79 --- /dev/null +++ b/api/repositories/releases.py @@ -0,0 +1,75 @@ +from core.rest_client import RestClient + + +class Releases(RestClient): + def list_releases_for_repos(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/releases/#list-releases-for-a-repository + """ + return self.get("/repos/{}/{}/releases".format(owner, repo), **kwargs) + + def get_single_release(self, owner, repo, release_id, **kwargs): + """ + https://developer.github.com/v3/repos/releases/#get-a-single-release + """ + return self.get("/repos/{}/{}/releases/{}".format(owner, repo, release_id), **kwargs) + + def get_latest_release(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/releases/#get-the-latest-release + """ + return self.get("/repos/{}/{}/releases/latest".format(owner, repo), **kwargs) + + def get_release_by_tag_name(self, owner, repo, tag, **kwargs): + """ + https://developer.github.com/v3/repos/releases/#get-a-release-by-tag-name + """ + return self.get("/repos/{}/{}/releases/tags/{}".format(owner, repo, tag), **kwargs) + + def create_release(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/releases/#create-a-release + """ + return self.post("/repos/{}/{}/releases".format(owner, repo), **kwargs) + + def edit_release(self, owner, repo, release_id, **kwargs): + """ + https://developer.github.com/v3/repos/releases/#edit-a-release + """ + return self.patch("/repos/{}/{}/releases/{}".format(owner, repo, release_id), **kwargs) + + def delete_release(self, owner, repo, release_id, **kwargs): + """ + https://developer.github.com/v3/repos/releases/#delete-a-release + """ + return self.delete("/repos/{}/{}/releases/{}".format(owner, repo, release_id), **kwargs) + + def delete_release_asset(self, owner, repo, asset_id, **kwargs): + """ + https://developer.github.com/v3/repos/releases/#delete-a-release-asset + """ + return self.delete("/repos/{}/{}/releases/assets/{}".format(owner, repo, asset_id), **kwargs) + + def edit_realease_asset(self, owner, repo, asset_id, **kwargs): + """ + https://developer.github.com/v3/repos/releases/#edit-a-release-asset + """ + return self.patch("/repos/{}/{}/releases/assets/{}".format(owner, repo, asset_id), **kwargs) + + def get_single_release_asset(self, owner, repo, asset_id, **kwargs): + """ + https://developer.github.com/v3/repos/releases/#get-a-single-release-asset + """ + return self.get("/repos/{}/{}/releases/assets/{}".format(owner, repo, asset_id), **kwargs) + + def upload_release_asset(self, upload_url, **kwargs): + """ + https://developer.github.com/v3/repos/releases/#upload-a-release-asset + """ + return self.post("{}".format(upload_url), **kwargs) + + def list_assets_for_release(self, owner, repo, release_id, **kwargs): + """ + https://developer.github.com/v3/repos/releases/#list-assets-for-a-release + """ + return self.get("/repos/{}/{}/releases/{}/assets".format(owner, repo, release_id), **kwargs) diff --git a/api/repositories/repos.py b/api/repositories/repos.py new file mode 100644 index 0000000..8f599dc --- /dev/null +++ b/api/repositories/repos.py @@ -0,0 +1,85 @@ +from core.rest_client import RestClient +from api.repositories.releases import Releases +from api.repositories.traffic import Traffic +from api.repositories.statistics import Statistics +from api.repositories.statuses import Statuses +from api.repositories.hooks import Hooks +from api.repositories.branches import Branches +from api.repositories.pages import Pages +from api.repositories.repositories import Repositories +from api.repositories.comments import Comments +from api.repositories.commits import Commits +from api.repositories.invitations import Invitations +from api.repositories.contents import Contents +from api.repositories.deployments import Deployments +from api.repositories.downloads import Downloads + + +class Repos(RestClient): + def __init__(self, api_root_url, **kwargs): + super(Repos, self).__init__(api_root_url, **kwargs) + self.releases = Releases(self.api_root_url, **kwargs) + self.traffic = Traffic(self.api_root_url, **kwargs) + self.statistics = Statistics(self.api_root_url, **kwargs) + self.statuses = Statuses(self.api_root_url, **kwargs) + self.hooks = Hooks(self.api_root_url, **kwargs) + self.branches = Branches(self.api_root_url, **kwargs) + self.pages = Pages(self.api_root_url, **kwargs) + self.repositories = Repositories(self.api_root_url, **kwargs ) + self.comments = Comments(self.api_root_url, **kwargs ) + self.commits = Commits(self.api_root_url, **kwargs ) + self.invitations = Invitations(self.api_root_url, **kwargs ) + self.contents = Contents(self.api_root_url, **kwargs ) + self.deployments = Deployments(self.api_root_url, **kwargs ) + self.downloads = Downloads(self.api_root_url, **kwargs ) + + + def list_your_repos(self, **kwargs): + """ + https://developer.github.com/v3/repos/#list-your-repositories + """ + return self.get("/user/repos", **kwargs) + + def list_user_repos(self, username, **kwargs): + """ + https://developer.github.com/v3/repos/#list-user-repositories + :param username: username + """ + return self.get("/users/{}/repos".format(username), **kwargs) + + def list_organization_repos(self, org, **kwargs): + """ + https://developer.github.com/v3/repos/#list-organization-repositories + :param org: orgnization name + """ + return self.get("/orgs/{}/repos".format(org), **kwargs) + + def list_all_public_repos(self, **kwargs): + """ + https://developer.github.com/v3/repos/#list-all-public-repositories + """ + return self.get("/repositories", **kwargs) + + def create_user_repo(self, **kwargs): + """ + https://developer.github.com/v3/repos/#create + """ + return self.post("/user/repos", **kwargs) + + def create_organization_repo(self, org, **kwargs): + """ + https://developer.github.com/v3/repos/#create + """ + return self.post("/orgs/{}/repos".format(org), **kwargs) + + def get_repo(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/#get + """ + return self.get("/repos/{}/{}".format(owner, repo), **kwargs) + + def edit_repo(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/#edit + """ + return self.patch("/repos/{}/{}".format(owner, repo), **kwargs) diff --git a/api/repositories/repositories.py b/api/repositories/repositories.py new file mode 100644 index 0000000..ce09f96 --- /dev/null +++ b/api/repositories/repositories.py @@ -0,0 +1,52 @@ +from core.rest_client import RestClient + +class Repositories(RestClient): + + def replace_all_topics_for_a_repository(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/#replace-all-topics-for-a-repository + """ + headers = {'Accept':'application/vnd.github.mercy-preview+json'} + return self.put("/repos/{}/{}/topics".format(owner, repo), headers = headers, **kwargs) + + def list_contributors(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/#list-contributors + """ + return self.get('/repos/{}/{}/contributors'.format(owner, repo), **kwargs) + + def list_languages(self, owner, repo): + """ + https://developer.github.com/v3/repos/#list-languages + """ + return self.get('/repos/{}/{}/languages'.format(owner, repo)) + + def list_tags(self, owner, repo): + """ + https://developer.github.com/v3/repos/#list-tags + """ + return self.get('/repos/{}/{}/tags'.format(owner, repo)) + + def delete_a_repository(self, owner, repo): + """ + https://developer.github.com/v3/repos/#delete-a-repository + """ + return self.delete('/repos/{}/{}'.format(owner, repo)) + + def transfer_a_repository(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/#transfer-a-repository + """ + headers = {'Accept':'application/vnd.github.nightshade-preview+json'} + return self.delete('/repos/{}/{}/transfer'.format(owner, repo), headers = headers ,**kwargs) + + def list_teams(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/#list-teams + """ + return self.get("/repos/{}/{}/teams".format(owner, repo), **kwargs) + + + + + diff --git a/api/repositories/statistics.py b/api/repositories/statistics.py new file mode 100644 index 0000000..f84196d --- /dev/null +++ b/api/repositories/statistics.py @@ -0,0 +1,33 @@ +from core.rest_client import RestClient + + +class Statistics(RestClient): + def get_contributors_list(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/statistics/#get-contributors-list-with-additions-deletions-and-commit-counts + """ + return self.get("/repos/{}/{}/stats/contributors".format(owner, repo), **kwargs) + + def get_last_year_commit(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/statistics/#get-the-last-year-of-commit-activity-data + """ + return self.get("/repos/{}/{}/stats/commit_activity".format(owner, repo), **kwargs) + + def get_number_of_additions_deletions(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/statistics/#get-the-number-of-additions-and-deletions-per-week + """ + return self.get("/repos/{}/{}/stats/code_frequency".format(owner, repo), **kwargs) + + def get_weekly_commit_count(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/statistics/#get-the-weekly-commit-count-for-the-repository-owner-and-everyone-else + """ + return self.get("/repos/{}/{}/stats/participation".format(owner, repo), **kwargs) + + def get_numbers_commits_hour(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/statistics/#get-the-number-of-commits-per-hour-in-each-day + """ + return self.get("/repos/{}/{}/stats/punch_card".format(owner, repo), **kwargs) diff --git a/api/repositories/statuses.py b/api/repositories/statuses.py new file mode 100644 index 0000000..a197b91 --- /dev/null +++ b/api/repositories/statuses.py @@ -0,0 +1,22 @@ +from core.rest_client import RestClient + + +class Statuses(RestClient): + + def create_a_status(self, owner, repo, sha, **kwargs): + """ + https://developer.github.com/v3/repos/statuses/#create-a-status + """ + return self.post("/repos/{}/{}/statuses/{}".format(owner, repo, sha), **kwargs) + + def list_statuses_for_specific_ref(self, owner, repo, ref, **kwargs): + """ + https://developer.github.com/v3/repos/statuses/#list-statuses-for-a-specific-ref + """ + return self.get("/repos/{}/{}/commits/{}/statuses".format(owner, repo, ref), **kwargs) + + def get_combined_status_for_specific_ref(self, owner, repo, ref, **kwargs): + """ + https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref + """ + return self.get("/repos/{}/{}/commits/{}/status".format(owner, repo, ref), **kwargs) diff --git a/api/repositories/traffic.py b/api/repositories/traffic.py new file mode 100644 index 0000000..3943c39 --- /dev/null +++ b/api/repositories/traffic.py @@ -0,0 +1,30 @@ +from core.rest_client import RestClient + + +class Traffic(RestClient): + + def list_referrers(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/traffic/#list-referrers + """ + return self.get("/repos/{}/{}/traffic/popular/referrers".format(owner, repo), **kwargs) + + def list_paths(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/traffic/#list-paths + """ + return self.get("/repos/{}/{}/traffic/popular/paths".format(owner, repo), **kwargs) + + def list_views(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/traffic/#views + :param kwargs: day,week + """ + return self.get("/repos/{}/{}/traffic/views".format(owner, repo), **kwargs) + + def list_clones(self, owner, repo, **kwargs): + """ + https://developer.github.com/v3/repos/traffic/#clones + :param kwargs: day,week + """ + return self.get("/repos/{}/{}/traffic/clones".format(owner, repo), **kwargs) diff --git a/api/scim/__init__.py b/api/scim/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/search/__init__.py b/api/search/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/teams/__init__.py b/api/teams/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/users/__init__.py b/api/users/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/__init__.py b/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/base.py b/core/base.py new file mode 100644 index 0000000..109bede --- /dev/null +++ b/core/base.py @@ -0,0 +1,2 @@ +class CommonItem(): + pass \ No newline at end of file diff --git a/core/rest_client.py b/core/rest_client.py new file mode 100644 index 0000000..dada251 --- /dev/null +++ b/core/rest_client.py @@ -0,0 +1,53 @@ +import requests +import json as json_parser + + +class RestClient(): + def __init__(self, api_root_url, username=None, password=None, token=None): + self.api_root_url = api_root_url + self.session = requests.session() + if username and password: + self.session.auth = (username, password) + elif token: + self.session.headers["Authorization"] = "token {}".format(token) + + def get(self, url, **kwargs): + return self.request(url, "get", **kwargs) + + def post(self, url, data=None, json=None, **kwargs): + return self.request(url, "post", data, json, **kwargs) + + def options(self, url, **kwargs): + return self.request(url, "potions", **kwargs) + + def head(self, url, **kwargs): + return self.request(url, "head", **kwargs) + + def put(self, url, data=None, **kwargs): + return self.request(url, "put", data, **kwargs) + + def patch(self, url, data=None, **kwargs): + return self.request(url, "patch", data, **kwargs) + + def delete(self, url, **kwargs): + return self.request(url, "delete", **kwargs) + + def request(self, url, method_name, data=None, json=None, **kwargs): + url = self.api_root_url + url + if method_name == "get": + return self.session.get(url, **kwargs) + if method_name == "post": + return self.session.post(url, data, json, **kwargs) + if method_name == "options": + return self.session.options(url, **kwargs) + if method_name == "head": + return self.session.head(url, **kwargs) + if method_name == "put": + return self.session.put(url, data, **kwargs) + if method_name == "patch": + if json: + data = json_parser.dumps(json) + return self.session.patch(url, data, **kwargs) + if method_name == "delete": + return self.session.delete(url, **kwargs) + diff --git a/github.py b/github.py new file mode 100644 index 0000000..d64abc3 --- /dev/null +++ b/github.py @@ -0,0 +1,15 @@ +from api.repositories.repos import Repos +from api.issues.issues import Issues +from api.checks.checks import Checks +from api.interactions.interactions import Interactions +from api.apps.apps import Apps + +class Github(): + def __init__(self, **kwargs): + self.api_root_url = "https://api.github.com" + self.repos = Repos(self.api_root_url, **kwargs) + self.issues = Issues(self.api_root_url, **kwargs) + self.checks = Checks(self.api_root_url, **kwargs) + self.interactions = Interactions(self.api_root_url, **kwargs) + self.apps = Apps(self.api_root_url, **kwargs) + diff --git a/operations/__init__.py b/operations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/operations/repo.py b/operations/repo.py new file mode 100644 index 0000000..97789f2 --- /dev/null +++ b/operations/repo.py @@ -0,0 +1,39 @@ +from core.base import CommonItem + + +def create_repo(github, name, org=None, description=None, homepage=None, private=False, has_issues=True, + has_projects=True, has_wiki=True): + """ + + :param github: github 对象 + :param name: string, repo 名称 + :param org: string, 如果是要在一个organization下建repo,就在这里输入 org 名字;否则默认建在当前用户下。 + :param description: string, repo的描述 + :param homepage: string, repo的主页URL + :param private: boolean, 值为 true的时候建立一个私有repo,为 false时建立公开repo,默认是false + :param has_issues: boolean, true会建立有issues的repo, false 则没有,默认是true + :param has_projects: boolean, true会建立有projects的repo, false 则没有,默认是true + :param has_wiki: boolean, true会建立有wiki的repo,false则没有,默认是true + :return: common item + """ + result = CommonItem() + payload = { + "name": name, + "description": description, + "homepage": homepage, + "private": private, + "has_issues": has_issues, + "has_projects": has_projects, + "has_wiki": has_wiki + } + result.success = False + if org: + response = github.repos.create_organization_repo(org=org, json=payload) + else: + response = github.repos.create_user_repo(json=payload) + result.response = response + if response.status_code == 201: + result.success = True + else: + result.error = "create repo got {},should be 201".format(str(response.status_code)) + return result diff --git a/scripts/debug.py b/scripts/debug.py new file mode 100644 index 0000000..1a1b97e --- /dev/null +++ b/scripts/debug.py @@ -0,0 +1,13 @@ +from github import Github +from operations.repo import create_repo + +if __name__ == '__main__': + github = Github(token="xxxx") + + # # test 1: 在当前用户下创建一个repo,除了repo名字以外全部用默认值 + result = create_repo(github, "simpletest") + assert result.success == True, result.error + + # test 2: 在当前用户下创建一个repo,使用一些输入值 + result = create_repo(github, "simpletest03", has_issues=False) + assert result.success == True, result.error