Skip to content
Empty file added api/__init__.py
Empty file.
Empty file added api/repositories/__init__.py
Empty file.
56 changes: 56 additions & 0 deletions api/repositories/repos.py
Original file line number Diff line number Diff line change
@@ -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)
Empty file added core/__init__.py
Empty file.
58 changes: 58 additions & 0 deletions core/rest_client.py
Original file line number Diff line number Diff line change
@@ -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)
54 changes: 54 additions & 0 deletions github.py
Original file line number Diff line number Diff line change
@@ -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