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..68c1dc0 --- /dev/null +++ b/api/repositories/repos.py @@ -0,0 +1,56 @@ +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, **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/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 new file mode 100644 index 0000000..bf07fbc --- /dev/null +++ b/core/rest_client.py @@ -0,0 +1,58 @@ +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) + + +if __name__ == '__main__': + r = RestClient("http://httpbin.org") + x = r.post("/post", json={"a": "b"}) + print(x.text) diff --git a/github.py b/github.py new file mode 100644 index 0000000..3a3da8e --- /dev/null +++ b/github.py @@ -0,0 +1,54 @@ +from api.repositories.repos import Repos + + +class Github(): + def __init__(self, **kwargs): + self.api_root_url = "https://api.github.com" + self.repos = Repos(self.api_root_url, **kwargs) + + +if __name__ == '__main__': + r = Github(token="xxxxx") + 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) + + # 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 + } + + x = r.repos.edit_repo(username, "Hello-World", json=data) + print(x.status_code) + print(x.text) + assert x.status_code == 200