From b92d698bf1ef85df2abb917a10eb15d0b91887f2 Mon Sep 17 00:00:00 2001 From: zhangting <89507288@qq.com> Date: Sat, 23 Mar 2019 10:23:23 +0800 Subject: [PATCH 01/10] init commit --- core/rest_client.py | 57 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 core/rest_client.py diff --git a/core/rest_client.py b/core/rest_client.py new file mode 100644 index 0000000..5edee22 --- /dev/null +++ b/core/rest_client.py @@ -0,0 +1,57 @@ +import requests,json + + +class RestClient(): + def __init__(self,api_root_url): + self.api_root_url=api_root_url + self.session = requests.session() + + 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(self, url, **kwargs) + if method_name == "put": + return self.session.put(self, url, data, **kwargs) + if method_name == "patch": + return self.session.patch(self, url, data, **kwargs) + if method_name == "delete": + return self.session.delete(self, url, **kwargs) + + + +if __name__ == '__main__': + r=RestClient("http://httpbin.org") + x= r.post("/post",json= {"a":"b"}) + print(x.text) + + + + + From 3161756cee1271f38c8c5caee377d13505878447 Mon Sep 17 00:00:00 2001 From: zhangting <89507288@qq.com> Date: Sun, 24 Mar 2019 10:45:22 +0800 Subject: [PATCH 02/10] add the login of github by username:password or by token --- api/__init__.py | 0 api/repositories/__init__.py | 0 api/repositories/repos.py | 7 +++++++ core/__init__.py | 0 core/rest_client.py | 6 +++++- github.py | 16 ++++++++++++++++ 6 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 api/__init__.py create mode 100644 api/repositories/__init__.py create mode 100644 api/repositories/repos.py create mode 100644 core/__init__.py create mode 100644 github.py diff --git a/api/__init__.py b/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/repositories/__init__.py b/api/repositories/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/repositories/repos.py b/api/repositories/repos.py new file mode 100644 index 0000000..bd0c5a7 --- /dev/null +++ b/api/repositories/repos.py @@ -0,0 +1,7 @@ +from core.rest_client import RestClient +class Repos(RestClient): + def __init__(self,api_root_url,**kwargs): + super(Repos, self).__init__(api_root_url,**kwargs) + + def list_your_repos(self): + return self.get("/user/repos") diff --git a/core/__init__.py b/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/rest_client.py b/core/rest_client.py index 5edee22..690315c 100644 --- a/core/rest_client.py +++ b/core/rest_client.py @@ -2,9 +2,13 @@ class RestClient(): - def __init__(self,api_root_url): + 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) + if token: + self.session.headers["Authorization"] = "token {}".format(token) def get(self,url, **kwargs): return self.request(url,"get",**kwargs) diff --git a/github.py b/github.py new file mode 100644 index 0000000..e43d026 --- /dev/null +++ b/github.py @@ -0,0 +1,16 @@ +from api.repositories.repos import Repos + +class Github(): + def __init__(self, **kwargs): + self.api_root_url="http://api.github.com" + self.repos = Repos(self.api_root_url,**kwargs) + + +if __name__ == '__main__': + r=Github(token="xxxxxxxxxxxxxx") + x= r.repos.list_your_repos() + print(x.text) + + r=Github(username="xxxxxx",password="xxxxx") + x= r.repos.list_your_repos() + print(x.text) \ No newline at end of file From 343c3b3d608a365de74401d1c1689ec3c8f5733e Mon Sep 17 00:00:00 2001 From: zhangting <89507288@qq.com> Date: Sun, 24 Mar 2019 17:28:03 +0800 Subject: [PATCH 03/10] make the 1st api packed --- api/repositories/repos.py | 5 +++-- core/rest_client.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/api/repositories/repos.py b/api/repositories/repos.py index bd0c5a7..6cf5558 100644 --- a/api/repositories/repos.py +++ b/api/repositories/repos.py @@ -3,5 +3,6 @@ class Repos(RestClient): def __init__(self,api_root_url,**kwargs): super(Repos, self).__init__(api_root_url,**kwargs) - def list_your_repos(self): - return self.get("/user/repos") + def list_your_repos(self,visibility=None,affiliation=None,type=None,sort=None,direction=None): + params={"visibility":visibility,"affiliation":affiliation,"type":type,"direction":direction} + return self.get("/user/repos",params=params) diff --git a/core/rest_client.py b/core/rest_client.py index 690315c..2eaf284 100644 --- a/core/rest_client.py +++ b/core/rest_client.py @@ -7,7 +7,7 @@ def __init__(self,api_root_url,username=None,password=None,token=None): self.session = requests.session() if username and password: self.session.auth=(username, password) - if token: + elif token: self.session.headers["Authorization"] = "token {}".format(token) def get(self,url, **kwargs): From 2c977a393ebffc2efcc48c018f048748b9c96603 Mon Sep 17 00:00:00 2001 From: zhangting <89507288@qq.com> Date: Sun, 24 Mar 2019 17:32:15 +0800 Subject: [PATCH 04/10] format the code --- api/repositories/repos.py | 12 +++++++----- core/rest_client.py | 34 ++++++++++++++-------------------- github.py | 23 ++++++++++++++++------- 3 files changed, 37 insertions(+), 32 deletions(-) diff --git a/api/repositories/repos.py b/api/repositories/repos.py index 6cf5558..411d822 100644 --- a/api/repositories/repos.py +++ b/api/repositories/repos.py @@ -1,8 +1,10 @@ from core.rest_client import RestClient + + class Repos(RestClient): - def __init__(self,api_root_url,**kwargs): - super(Repos, self).__init__(api_root_url,**kwargs) + def __init__(self, api_root_url, **kwargs): + super(Repos, self).__init__(api_root_url, **kwargs) - def list_your_repos(self,visibility=None,affiliation=None,type=None,sort=None,direction=None): - params={"visibility":visibility,"affiliation":affiliation,"type":type,"direction":direction} - return self.get("/user/repos",params=params) + def list_your_repos(self, visibility=None, affiliation=None, type=None, sort=None, direction=None): + params = {"visibility": visibility, "affiliation": affiliation, "type": type, "direction": direction} + return self.get("/user/repos", params=params) diff --git a/core/rest_client.py b/core/rest_client.py index 2eaf284..183e1c9 100644 --- a/core/rest_client.py +++ b/core/rest_client.py @@ -1,20 +1,20 @@ -import requests,json +import requests, json class RestClient(): - def __init__(self,api_root_url,username=None,password=None,token=None): - self.api_root_url=api_root_url + 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) + 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 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 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) @@ -23,16 +23,16 @@ 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) + return self.request(url, "put", data, **kwargs) def patch(self, url, data=None, **kwargs): - return self.request(url, "patch", data,**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 + 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": @@ -49,13 +49,7 @@ def request(self,url,method_name,data=None,json=None,**kwargs): return self.session.delete(self, url, **kwargs) - if __name__ == '__main__': - r=RestClient("http://httpbin.org") - x= r.post("/post",json= {"a":"b"}) + r = RestClient("http://httpbin.org") + x = r.post("/post", json={"a": "b"}) print(x.text) - - - - - diff --git a/github.py b/github.py index e43d026..4837536 100644 --- a/github.py +++ b/github.py @@ -1,16 +1,25 @@ from api.repositories.repos import Repos + class Github(): def __init__(self, **kwargs): - self.api_root_url="http://api.github.com" - self.repos = Repos(self.api_root_url,**kwargs) + self.api_root_url = "http://api.github.com" + self.repos = Repos(self.api_root_url, **kwargs) if __name__ == '__main__': - r=Github(token="xxxxxxxxxxxxxx") - x= r.repos.list_your_repos() + r = Github(token="xxxxxxxxxxx") + x = r.repos.list_your_repos() + print(x.text) + + r = Github(token="xxxxxxxxxxx") + x = r.repos.list_your_repos(visibility="private") print(x.text) - r=Github(username="xxxxxx",password="xxxxx") - x= r.repos.list_your_repos() - print(x.text) \ No newline at end of file + r = Github(token="xxxxxxxxxxx") + x = r.repos.list_your_repos(visibility="all") + print(x.text) + + r = Github(token="xxxxxxxxxxx") + x = r.repos.list_your_repos(direction="desc") + print(x.text) From e8cfc1e49ca9969c96343ba4a0aa613d98d22e1d Mon Sep 17 00:00:00 2001 From: zhangting <89507288@qq.com> Date: Sun, 31 Mar 2019 13:47:44 +0800 Subject: [PATCH 05/10] add more methods --- api/repositories/repos.py | 28 +++++++++++++++++++++++++--- github.py | 18 +++++++++++------- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/api/repositories/repos.py b/api/repositories/repos.py index 411d822..254221b 100644 --- a/api/repositories/repos.py +++ b/api/repositories/repos.py @@ -5,6 +5,28 @@ class Repos(RestClient): def __init__(self, api_root_url, **kwargs): super(Repos, self).__init__(api_root_url, **kwargs) - def list_your_repos(self, visibility=None, affiliation=None, type=None, sort=None, direction=None): - params = {"visibility": visibility, "affiliation": affiliation, "type": type, "direction": direction} - return self.get("/user/repos", params=params) + 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) diff --git a/github.py b/github.py index 4837536..c13375f 100644 --- a/github.py +++ b/github.py @@ -8,18 +8,22 @@ def __init__(self, **kwargs): if __name__ == '__main__': - r = Github(token="xxxxxxxxxxx") + r = Github(token="07607a522b689499d405e29ee90218bb604c7b11") + # r = Github(token="xxxxxxxxxxx") x = r.repos.list_your_repos() print(x.text) - r = Github(token="xxxxxxxxxxx") - x = r.repos.list_your_repos(visibility="private") + + data={"direction": "desc"} + x = r.repos.list_user_repos("zhangting85",params=data) print(x.text) - r = Github(token="xxxxxxxxxxx") - x = r.repos.list_your_repos(visibility="all") + x=r.repos.list_organization_repos("TestUpCommunity") print(x.text) - r = Github(token="xxxxxxxxxxx") - x = r.repos.list_your_repos(direction="desc") + x=r.repos.list_all_public_repos() print(x.text) + + data = {"since": "364"} + x=r.repos.list_all_public_repos(params=data) + print(x.text) \ No newline at end of file From bfe826c8254da8262b5cf8434e385fce5d39edb9 Mon Sep 17 00:00:00 2001 From: zhangting <89507288@qq.com> Date: Sun, 31 Mar 2019 13:49:52 +0800 Subject: [PATCH 06/10] remove the token --- github.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/github.py b/github.py index c13375f..e80e4c4 100644 --- a/github.py +++ b/github.py @@ -8,8 +8,7 @@ def __init__(self, **kwargs): if __name__ == '__main__': - r = Github(token="07607a522b689499d405e29ee90218bb604c7b11") - # r = Github(token="xxxxxxxxxxx") + r = Github(token="xxxxxxxxxxx") x = r.repos.list_your_repos() print(x.text) From 4ebbe7027ff33640b6aed5cfb706dc9cbd3a2ab6 Mon Sep 17 00:00:00 2001 From: zhangting <89507288@qq.com> Date: Sun, 31 Mar 2019 13:51:35 +0800 Subject: [PATCH 07/10] fix the format --- api/repositories/repos.py | 8 ++++---- github.py | 13 ++++++------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/api/repositories/repos.py b/api/repositories/repos.py index 254221b..9596a31 100644 --- a/api/repositories/repos.py +++ b/api/repositories/repos.py @@ -18,15 +18,15 @@ def list_user_repos(self, username, **kwargs): """ return self.get("/users/{}/repos".format(username), **kwargs) - def list_organization_repos(self,org,**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) + return self.get("/orgs/{}/repos".format(org), **kwargs) - def list_all_public_repos(self,**kwargs): + def list_all_public_repos(self, **kwargs): """ https://developer.github.com/v3/repos/#list-all-public-repositories """ - return self.get("/repositories",**kwargs) + return self.get("/repositories", **kwargs) diff --git a/github.py b/github.py index e80e4c4..87c7c4d 100644 --- a/github.py +++ b/github.py @@ -12,17 +12,16 @@ def __init__(self, **kwargs): x = r.repos.list_your_repos() print(x.text) - - data={"direction": "desc"} - x = r.repos.list_user_repos("zhangting85",params=data) + data = {"direction": "desc"} + x = r.repos.list_user_repos("zhangting85", params=data) print(x.text) - x=r.repos.list_organization_repos("TestUpCommunity") + x = r.repos.list_organization_repos("TestUpCommunity") print(x.text) - x=r.repos.list_all_public_repos() + x = r.repos.list_all_public_repos() print(x.text) data = {"since": "364"} - x=r.repos.list_all_public_repos(params=data) - print(x.text) \ No newline at end of file + x = r.repos.list_all_public_repos(params=data) + print(x.text) From 72611e729cc68c0a9ad987fc104fa20aae73b0d0 Mon Sep 17 00:00:00 2001 From: zhangting <89507288@qq.com> Date: Sun, 14 Apr 2019 18:26:21 +0800 Subject: [PATCH 08/10] teach branch 005 --- api/repositories/repos.py | 24 ++++++++++++++++ core/rest_client.py | 13 +++++---- github.py | 58 +++++++++++++++++++++++++++++---------- 3 files changed, 75 insertions(+), 20 deletions(-) diff --git a/api/repositories/repos.py b/api/repositories/repos.py index 9596a31..68c1dc0 100644 --- a/api/repositories/repos.py +++ b/api/repositories/repos.py @@ -30,3 +30,27 @@ 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/core/rest_client.py b/core/rest_client.py index 183e1c9..bf07fbc 100644 --- a/core/rest_client.py +++ b/core/rest_client.py @@ -1,4 +1,5 @@ -import requests, json +import requests +import json as json_parser class RestClient(): @@ -40,13 +41,15 @@ def request(self, url, method_name, data=None, json=None, **kwargs): if method_name == "options": return self.session.options(url, **kwargs) if method_name == "head": - return self.session.head(self, url, **kwargs) + return self.session.head(url, **kwargs) if method_name == "put": - return self.session.put(self, url, data, **kwargs) + return self.session.put(url, data, **kwargs) if method_name == "patch": - return self.session.patch(self, url, data, **kwargs) + if json: + data = json_parser.dumps(json) + return self.session.patch(url, data, **kwargs) if method_name == "delete": - return self.session.delete(self, url, **kwargs) + return self.session.delete(url, **kwargs) if __name__ == '__main__': diff --git a/github.py b/github.py index 87c7c4d..0b9b484 100644 --- a/github.py +++ b/github.py @@ -3,25 +3,53 @@ class Github(): def __init__(self, **kwargs): - self.api_root_url = "http://api.github.com" + self.api_root_url = "https://api.github.com" self.repos = Repos(self.api_root_url, **kwargs) if __name__ == '__main__': - r = Github(token="xxxxxxxxxxx") - x = r.repos.list_your_repos() + r = Github(token="b5d180d29ae65f289b8f8b6ac7680675c921179e") + username = "zhangting85" + orgnname = "xxxx" + + # case 1 + data = { + "name": "Hello-WorldXXX", + "description": "This is your first repository", + "homepage": "https://github.com", + "private": False, + "has_issues": True, + "has_projects": True, + "has_wiki": True + } + x = r.repos.create_user_repo(json=data) + print(x.status_code) + assert x.status_code == 201 + + # case 2 + x = r.repos.create_organization_repo(org=orgnname, json=data) + print(x.status_code) + assert x.status_code == 201 + + # case 3 + x = r.repos.get_repo(username, "Hello-World") + print(x.status_code) + assert x.status_code == 200 print(x.text) - data = {"direction": "desc"} - x = r.repos.list_user_repos("zhangting85", params=data) - print(x.text) - - x = r.repos.list_organization_repos("TestUpCommunity") - print(x.text) - - x = r.repos.list_all_public_repos() - print(x.text) - - data = {"since": "364"} - x = r.repos.list_all_public_repos(params=data) + # case 4 + data = { + "name": "Hello-World", + "description": "YYYY:This is your first repository ", + "homepage": "https://github.com", + "private": False, + "has_issues": True, + "has_projects": True, + "has_wiki": True + } + import json + + x = r.repos.edit_repo(username, "Hello-World", json=data) + print(x.status_code) print(x.text) + assert x.status_code == 200 From 0aefb82be55cbe9c591f08888e168cb928a3a11e Mon Sep 17 00:00:00 2001 From: zhangting <89507288@qq.com> Date: Sun, 14 Apr 2019 18:37:14 +0800 Subject: [PATCH 09/10] remove token --- github.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github.py b/github.py index 0b9b484..7864b99 100644 --- a/github.py +++ b/github.py @@ -8,7 +8,7 @@ def __init__(self, **kwargs): if __name__ == '__main__': - r = Github(token="b5d180d29ae65f289b8f8b6ac7680675c921179e") + r = Github(token="xxxxx") username = "zhangting85" orgnname = "xxxx" From bbff2022bcf130802e352595df74130ae268cc53 Mon Sep 17 00:00:00 2001 From: zhangting <89507288@qq.com> Date: Sun, 14 Apr 2019 18:41:18 +0800 Subject: [PATCH 10/10] remove import json --- github.py | 1 - 1 file changed, 1 deletion(-) diff --git a/github.py b/github.py index 7864b99..3a3da8e 100644 --- a/github.py +++ b/github.py @@ -47,7 +47,6 @@ def __init__(self, **kwargs): "has_projects": True, "has_wiki": True } - import json x = r.repos.edit_repo(username, "Hello-World", json=data) print(x.status_code)