diff --git a/api/gists/comment.py b/api/gists/comment.py new file mode 100644 index 0000000..303893c --- /dev/null +++ b/api/gists/comment.py @@ -0,0 +1,34 @@ +from core.rest_client import RestClient + + +class Comment(RestClient): + + def list_comments_on_a_gist(self, gist_id ,**kwargs): + """ + https://developer.github.com/v3/gists/comments#list-comments-on-a-gist #631 + """ + return self.get('/gists/{}/comments'.format(gist_id), **kwargs) + + def get_a_single_comment(self, gist_id,comment_id, **kwargs): + """ + https://developer.github.com/v3/gists/comments#get-a-single-comment #632 + """ + return self.get('/gists/{}/comments/{}'.format(gist_id, comment_id), **kwargs) + + def create_a_comment(self, gist_id, **kwargs): + """ + https://developer.github.com/v3/gists/comments#create-a-comment #633 + """ + return self.post('/gists/{}/comments'.format(gist_id), **kwargs) + + def edit_a_comment(self ,gist_id, comment_id, **kwargs): + """ + https://developer.github.com/v3/gists/comments/#edit-a-comment + """ + return self.patch('/gists/{}/comments/{}'.format(gist_id, comment_id), **kwargs) + + def delete_a_comment(self ,gist_id, comment_id, **kwargs): + """ + https://developer.github.com/v3/gists/comments/#delete-a-comment + """ + return self.delete('/gists/{}/comments/{}'.format(gist_id, comment_id), **kwargs) \ No newline at end of file diff --git a/api/gists/gist.py b/api/gists/gist.py new file mode 100644 index 0000000..a7291b1 --- /dev/null +++ b/api/gists/gist.py @@ -0,0 +1,87 @@ +from core.rest_client import RestClient +from api.gists.comment import Comment + + +class Gists(RestClient): + + def __init__(self, api_root_url, **kwargs): + super(Gists, self).__init__(api_root_url, **kwargs) + self.comment = Comment(self.api_root_url, **kwargs) + + def list_gists_for_a_user(self, username, **kwargs): + """ + https://developer.github.com/v3/gists/#list-a-users-gists #616 + """ + return self.get('/users/{}/gists'.format(username),**kwargs) + + def list_all_public_gists(self, **kwargs): + """ + https://developer.github.com/v3/gists#list-all-public-gists #617 + """ + return self.get('/gists/public', **kwargs) + + def list_starred_gists(self, **kwargs): + """ + https://developer.github.com/v3/gists#list-starred-gists #618 + """ + return self.get('/gists/starred', **kwargs) + + def get_a_single_gist(self, gist_id, **kwargs): + """ + https://developer.github.com/v3/gists#get-a-single-gist #619 + """ + return self.get('/gists/{}'.format(gist_id), **kwargs) + + def get_a_specific_revision_of_a_gist(self,gist_id, sha, **kwargs): + """ + https://developer.github.com/v3/gists#get-a-specific-revision-of-a-gist #620 + """ + return self.get('/gists/{}/{}'.format(gist_id, sha), **kwargs) + + def create_a_gist(self, **kwargs): + """ + https://developer.github.com/v3/gists#create-a-gist #621 + """ + return self.post('/gists', **kwargs) + + def list_gist_commits(self, gist_id, **kwargs): + """ + https://developer.github.com/v3/gists#list-gist-commits #623 + """ + return self.get('/gists/{}/commits'.format(gist_id), **kwargs) + + def star_a_gist(self, gist_id, **kwargs): + """ + https://developer.github.com/v3/gists#star-a-gist #624 + """ + return self.put('/gists/{}/star'.format(gist_id), **kwargs) + + def unstar_a_gist(self, gist_id, **kwargs): + """ + https://developer.github.com/v3/gists#unstar-a-gist #625 + """ + return self.delete('/gists/{}/star'.format(gist_id), **kwargs) + + def check_if_a_gist_is_starred(self, gist_id, **kwargs): + """ + https://developer.github.com/v3/gists#check-if-a-gist-is-starred #626 + """ + return self.get('/gists/{}/star'.format(gist_id), **kwargs) + + def fork_a_gist(self, gist_id, **kwargs): + """ + https://developer.github.com/v3/gists#fork-a-gist #627 + """ + return self.post('/gists/{}/forks'.format(gist_id), **kwargs) + + def list_gist_forks(self, gist_id, **kwargs): + """ + https://developer.github.com/v3/gists#list-gist-forks #628 + """ + return self.get('/gists/{}/forks'.format(gist_id), **kwargs) + + def delete_a_gist(self, gist_id, **kwargs): + """ + https://developer.github.com/v3/gists#delete-a-gist #629 + """ + return self.delete('/gists/{}'.format(gist_id), **kwargs) \ No newline at end of file diff --git a/api/interactions/interactions.py b/api/interactions/interactions.py index e70474c..e96263a 100644 --- a/api/interactions/interactions.py +++ b/api/interactions/interactions.py @@ -8,7 +8,7 @@ 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) + # 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/orgs/blocking.py b/api/orgs/blocking.py new file mode 100644 index 0000000..ccb174f --- /dev/null +++ b/api/orgs/blocking.py @@ -0,0 +1,23 @@ +from core.rest_client import RestClient + + +class Blocking(RestClient): + + def check_whether_a_user_is_blocked_from_an_organization(self, org, username, **kwargs): + """ + https://developer.github.com/v3/orgs/blocking/#check-whether-a-user-is-blocked-from-an-organization + """ + return self.get('/orgs/{}/blocks/{}'.format(org, username), **kwargs) + + def block_a_user(self,org,username, **kwargs): + """ + https://developer.github.com/v3/orgs/blocking/#block-a-user + """ + return self.put('/orgs/{}/blocks/{}'.format(org,username), **kwargs) + + def unblock_a_user(self,org,username, **kwargs): + """ + https://developer.github.com/v3/orgs/blocking/#unblock-a-user + """ + return self.delete('/orgs/{}/blocks/{}'.format(org,username), **kwargs) + diff --git a/api/orgs/hooks.py b/api/orgs/hooks.py new file mode 100644 index 0000000..b2054f9 --- /dev/null +++ b/api/orgs/hooks.py @@ -0,0 +1,41 @@ +from core.rest_client import RestClient + + +class Hooks(RestClient): + + def ping_a_hook(self,org,hook_id, **kwargs): + """ + https://developer.github.com/v3/orgs/hooks#ping-a-hook + """ + return self.post('/orgs/{}/hooks/{}/pings'.format(org, hook_id), **kwargs) + + def delete_a_hook(self,org,hook_id, **kwargs): + """ + https://developer.github.com/v3/orgs/hooks/#delete-a-hook + """ + return self.delete('/orgs/{}/hooks/{}'.format(org,hook_id), **kwargs) + + def list_hooks(self,org, **kwargs): + """ + https://developer.github.com/v3/orgs/hooks/#list-hooks + """ + return self.get('/orgs/{}/hooks'.format(org), **kwargs) + + def edit_a_hook(self,org,hook_id, **kwargs): + """ + https://developer.github.com/v3/orgs/hooks/#edit-a-hook + """ + return self.patch('/orgs/{}/hooks/{}'.format(org,hook_id),**kwargs) + + def create_a_hook(self,org, **kwargs): + """ + https://developer.github.com/v3/orgs/hooks/#create-a-hook + """ + return self.post('/orgs/{}/hooks'.format(org), **kwargs) + + def get_single_hook(self,org,hook_id, **kwargs): + """ + https://developer.github.com/v3/orgs/hooks/#get-single-hook + """ + return self.get('/orgs/{}/hooks/{}'.format(org,hook_id), **kwargs) + diff --git a/api/orgs/members.py b/api/orgs/members.py new file mode 100644 index 0000000..d32eacc --- /dev/null +++ b/api/orgs/members.py @@ -0,0 +1,94 @@ +from core.rest_client import RestClient + + +class Members(RestClient): + + def check_public_membership(self,org, username, **kwargs): + """ + https://developer.github.com/v3/orgs/members/#check-public-membership + """ + return self.get('orgs/{}/public_members/{}'.format(org, username) ,**kwargs) + + def members_list(self,org, **kwargs): + """ + https://developer.github.com/v3/orgs/members/#members-list + """ + return self.get('/orgs/{}/members'.format(org),**kwargs) + + def check_membership(self,org, members, **kwargs): + """ + https://developer.github.com/v3/orgs/members/#check-membership + """ + return self.get('/orgs/{}/members/{}'.format(org, members) ,**kwargs) + + def remove_a_member(self,org,username, **kwargs): + """ + https://developer.github.com/v3/orgs/members#remove-a-member + """ + return self.delete('/orgs/{}/members/{}'.format(org,username), **kwargs) + + def public_members_list(self,org, **kwargs): + """ + https://developer.github.com/v3/orgs/members/#public-members-list + """ + return self.get('/orgs/{}/public_members'.format(org), **kwargs) + + def edit_your_organization_membership(self,org, **kwargs): + """ + https://developer.github.com/v3/orgs/members/#edit-your-organization-membership + """ + return self.patch('/user/memberships/orgs/{}'.format(org), **kwargs) + + def list_your_organization_memberships(self, **kwargs): + """ + https://developer.github.com/v3/orgs/members/#list-your-organization-memberships + """ + return self.get('/user/memberships/orgs', **kwargs) + + def get_your_organization_membership(self,org, **kwargs): + """ + https://developer.github.com/v3/orgs/members/#get-your-organization-membership + """ + return self.get('/user/memberships/orgs/{}'.format(org),**kwargs) + + def list_organization_invitation_teams(self,org,invitation_id, **kwargs): + """ + https://developer.github.com/v3/orgs/members/#list-organization-invitation-teams + """ + return self.get('/orgs/{}/invitations/{}/teams'.format(org,invitation_id), **kwargs) + + def create_organization_invitation(self,org, **kwargs): + """ + https://developer.github.com/v3/orgs/members/#create-organization-invitation + """ + return self.post('/orgs/{}/invitations'.format(org), **kwargs) + + def list_pending_organization_invitations(self,org, **kwargs): + """ + https://developer.github.com/v3/orgs/members/#list-pending-organization-invitations + """ + return self.get('/orgs/{}/invitations'.format(org), **kwargs) + + def add_or_update_organization_membership(self,org,username, **kwargs): + """ + https://developer.github.com/v3/orgs/members/#add-or-update-organization-membership + """ + return self.put('/orgs/{}/memberships/{}'.format(org,username), **kwargs) + + def remove_organization_membership(self,org,username, **kwargs): + """ + https://developer.github.com/v3/orgs/members/#remove-organization-membership + """ + return self.delete('/orgs/{}/memberships/{}'.format(org,username), **kwargs) + + def get_organization_membership(self,org,username, **kwargs): + """ + https://developer.github.com/v3/orgs/members/#get-organization-membership + """ + return self.delete('/orgs/{}/memberships/{}'.format(org,username), **kwargs) + + def conceal_a_users_membership(self,org,username, **kwargs): + """ + https://developer.github.com/v3/orgs/members/#conceal-a-users-membership + """ + return self.delete('/orgs/{}/public_members/{}'.format(org,username), **kwargs) \ No newline at end of file diff --git a/api/orgs/orgs.py b/api/orgs/orgs.py new file mode 100644 index 0000000..379fe7e --- /dev/null +++ b/api/orgs/orgs.py @@ -0,0 +1,35 @@ +from core.rest_client import RestClient +from api.orgs.blocking import Blocking +from api.orgs.hooks import Hooks +from api.orgs.members import Members +from api.orgs.outside_collaborators import Outside_Collaborators + +class Orgs(RestClient): + + def __init__(self, api_root_url, **kwargs): + super(Orgs, self).__init__(api_root_url, **kwargs) + self.blocking = Blocking(self.api_root_url, **kwargs) + self.hooks = Hooks(self.api_root_url, **kwargs) + self.member = Members(self.api_root_url, **kwargs) + self.outside_collaborators = Outside_Collaborators(self.api_root_url, **kwargs) + + + def remove_a_credential_authorization_for_an_organization(self,org,credential_id, **kwargs): + """ + https://developer.github.com/v3/orgs/#remove-a-credential-authorization-for-an-organization + """ + return self.delete('/orgs/{}/credential-authorizations/{}'.format(org,credential_id),**kwargs) + + def get_an_organization(self, org, **kwargs): + """ + https://developer.github.com/v3/orgs/#get-an-organization + """ + return self.get('/orgs/{}'.format(org), **kwargs) + + def list_your_organizations(self, **kwargs): + """ + https://developer.github.com/v3/orgs/#list-your-organizations + """ + return self.get('/user/orgs' ,**kwargs) + + diff --git a/api/orgs/outside_collaborators.py b/api/orgs/outside_collaborators.py new file mode 100644 index 0000000..280971a --- /dev/null +++ b/api/orgs/outside_collaborators.py @@ -0,0 +1,31 @@ +from core.rest_client import RestClient + + +class Outside_Collaborators(RestClient): + + def convert_member_to_outside_collaborator(self, org, username, **kwargs): + """ + https://developer.github.com/v3/orgs/outside_collaborators/#convert-member-to-outside-collaborator + """ + return self.put('/orgs/{}/outside_collaborators/{}'.format(org, username), **kwargs) + + def publicize_a_users_membership(self,org,username, **kwargs): + """ + https://developer.github.com/v3/orgs/members/#publicize-a-users-membership + """ + return self.put('/orgs/{}/public_members/{}'.format(org,username), **kwargs) + + def remove_outside_collaborator(self,org, username, **kwargs): + """ + https://developer.github.com/v3/orgs/outside_collaborators/#remove-outside-collaborator + """ + return self.delete('/orgs/{}/outside_collaborators/{}'.format(org,username), **kwargs) + + def list_outside_collaborators(self ,org,**kwargs): + """ + https://developer.github.com/v3/orgs/outside_collaborators/#list-outside-collaborators + """ + return self.get('/orgs/{}/outside_collaborators'.format(org), **kwargs) + + + diff --git a/api/repositories/repos.py b/api/repositories/repos.py index 8f599dc..b3961d7 100644 --- a/api/repositories/repos.py +++ b/api/repositories/repos.py @@ -83,3 +83,9 @@ def edit_repo(self, owner, repo, **kwargs): https://developer.github.com/v3/repos/#edit """ return self.patch("/repos/{}/{}".format(owner, repo), **kwargs) + + def delete_a_repo(self, owner,repo, **kwargs): + """ + https://developer.github.com/v3/repos/#delete-a-repository + """ + return self.delete('/repos/{}/{}'.format(owner,repo), **kwargs) \ No newline at end of file diff --git a/github.py b/github.py index d64abc3..5a6f47c 100644 --- a/github.py +++ b/github.py @@ -3,6 +3,9 @@ from api.checks.checks import Checks from api.interactions.interactions import Interactions from api.apps.apps import Apps +from api.orgs.orgs import Orgs +from operations.repo import delete_repo_from_user_by_name + class Github(): def __init__(self, **kwargs): @@ -12,4 +15,13 @@ def __init__(self, **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) + self.orgs = Orgs(self.api_root_url, **kwargs) + + +if __name__ == '__main__': + g = Github(username="namelaowang", password ="ghl6032069") + + r = g.repos.branches.add_required_status_checks_contexts_of_protected_branch('namelaowang', 'TestapiTest', 'master') + print(r) + print(r.content) diff --git a/operations/repo.py b/operations/repo.py index 97789f2..a509290 100644 --- a/operations/repo.py +++ b/operations/repo.py @@ -21,6 +21,8 @@ def create_repo(github, name, org=None, description=None, homepage=None, private "name": name, "description": description, "homepage": homepage, + + "private": private, "has_issues": has_issues, "has_projects": has_projects, @@ -37,3 +39,74 @@ def create_repo(github, name, org=None, description=None, homepage=None, private else: result.error = "create repo got {},should be 201".format(str(response.status_code)) return result + + +def delete_repo_from_user_by_name(github, owner, repo): + """ + + :param github: Github创建出来github对象 + :param owner: 当前登陆的用户 + :param repo: 要删除的repo关键字 + + """ + import re + delete_list = [] + result = CommonItem() + result.success = False + + payload = {'try': 'all'} + # 列出当前用户的所有repos + response = github.repos.list_user_repos(username=owner, json=payload) + if response.status_code == 200: + + r = response.json() + + for i in r: + # 从该账户的所有repos中,匹配出所有带有"repo"关键字的repos + restring = re.match('.*{}.*'.format(repo), i['name']) + + if restring == None: + continue + delete_list.append(restring.group()) + + for delete_repo in delete_list: + response = github.repos.delete_a_repo(owner=owner, repo=delete_repo) + + if response.status_code == 204: + result.success = True + else: + result.error = "delete repo got {},should be 204".format(str(response.status_code)) + + return result + + return ['list the repos fail', 'https://developer.github.com/v3/repos/#list-user-repositories'] + + +def create_repo_and_branch_with_helloword(github, owner, name, branch, description=None, homepage=None, private=False, + has_issues=True, has_projects=True, has_wiki=True): + + payload = { + "name": name, + "description": description, + "homepage": homepage, + "private": private, + "has_issues": has_issues, + "has_projects": has_projects, + "has_wiki": has_wiki + } + # 创建仓库 + response_repos = github.repos.create_user_repo(json =payload) + if response_repos.status_code == 201: + # 创建分支 + response_branch = github.repos.branches.add_required_status_checks_contexts_of_protected_branch( + owner=owner, repo=name, branch=branch) + if response_branch == 200: + # 上传文件 + pass + + return "创建分支失败" + + return "创建仓库失败" + + +