1
Fork 0
mirror of https://github.com/RGBCube/GitHubWrapper synced 2025-05-18 06:55:09 +00:00
This commit is contained in:
VarMonke 2022-03-27 22:33:18 +05:30
parent ed9c8ceee8
commit c39e4c1ed6
5 changed files with 42 additions and 9 deletions

View file

@ -15,6 +15,7 @@ __all__ = (
'make_session', 'make_session',
'Paginator', 'Paginator',
'get_user', 'get_user',
'get_repo_from_name',
) )
@ -117,4 +118,14 @@ async def get_user(session: aiohttp.ClientSession, username: str) -> GitHubUserD
result = await session.get(USERS_URL.format(username)) result = await session.get(USERS_URL.format(username))
if result.status == 200: if result.status == 200:
return await result.json() return await result.json()
raise UserNotFound raise UserNotFound
# repo-related functions / utils
async def get_repo_from_name(session: aiohttp.ClientSession, owner: str, repo_name: str):
"""Returns a Repo object from the given owner and repo name."""
result = await session.get(REPO_URL.format(owner, repo_name))
if result.status == 200:
return await result.json()
raise RepositoryNotFound

View file

@ -79,9 +79,9 @@ class GHClient:
"""Fetch a Github user from their username.""" """Fetch a Github user from their username."""
return User(await http.get_user(self.session, username), self.session) return User(await http.get_user(self.session, username), self.session)
async def get_repo(self, repo_name: str) -> Repository: async def get_repo(self, owner: str, repo_name: str) -> Repository:
"""Fetch a Github repository from it's name.""" """Fetch a Github repository from it's name."""
pass return Repository(await http.get_repo_from_name(self.session, owner, repo_name), self.session)
async def get_org(self, org_name: str) -> 'Org': async def get_org(self, org_name: str) -> 'Org':
"""Fetch a Github organization from it's name""" """Fetch a Github organization from it's name"""

View file

@ -3,7 +3,7 @@
import aiohttp import aiohttp
from .objects import APIOBJECT, dt_formatter from .objects import APIOBJECT, dt_formatter
from . import PartialUser from . import PartialUser, User
from .. import http from .. import http
__all__ = ( __all__ = (
@ -33,17 +33,31 @@ class Repository(APIOBJECT):
def __init__(self, response: dict, session: aiohttp.ClientSession) -> None: def __init__(self, response: dict, session: aiohttp.ClientSession) -> None:
super().__init__(response, session) super().__init__(response, session)
tmp = self.__slots__ + APIOBJECT.__slots__ tmp = self.__slots__ + APIOBJECT.__slots__
keys = {key: value for key,value in self.response.items() if key in tmp} keys = {key: value for key,value in self._response.items() if key in tmp}
for key, value in key.items(): for key, value in keys.items():
if key == 'owner': if key == 'owner':
self.owner = PartialUser(value, self.session) setattr(self, key, PartialUser(value, session))
return
if key == 'name':
setattr(self, key, value)
return return
if '_at' in key and value is not None: if '_at' in key and value is not None:
setattr(self, key, dt_formatter(value)) setattr(self, key, dt_formatter(value))
return return
else:
setattr(self, key, value)
continue
setattr(self, key, value) setattr(self, key, value)
def __repr__(self) -> str: def __repr__(self) -> str:
return f'<Repository; id: {self.id}, name: {self.name}, owner: {self.owner}, created_at: {self.created_at}, default_branch: {self.default_branch}, license: {self.license}, >' return f'<Repository; id: {self.id}, name: {self.name}, owner: {self.owner}, created_at: {self.created_at}, default_branch: {self.default_branch}, license: {self.license}, >'
@classmethod
async def repo_from_name(cls, session: aiohttp.ClientSession,owner: str, repo_name: str) -> 'Repository':
"""Fetch a repository from its name."""
response = await http.get_repo_from_name(session, owner, repo_name)
return Repository(response, session)

View file

@ -38,7 +38,7 @@ class User(_BaseUser):
def __init__(self, response: dict, session: aiohttp.ClientSession) -> None: def __init__(self, response: dict, session: aiohttp.ClientSession) -> None:
super().__init__(response, session) super().__init__(response, session)
tmp = self.__slots__ + _BaseUser.__slots__ tmp = self.__slots__ + _BaseUser.__slots__
keys = {key: value for key,value in self._response.items() if key in tmp} keys = {key: value for key,value in self.items() if key in tmp}
for key, value in keys.items(): for key, value in keys.items():
if '_at' in key and value is not None: if '_at' in key and value is not None:
setattr(self, key, dt_formatter(value)) setattr(self, key, dt_formatter(value))

View file

@ -18,4 +18,12 @@ USER_GISTS_URL = USERS_URL + '/gists'
USER_FOLLOWERS_URL = USERS_URL + '/followers' USER_FOLLOWERS_URL = USERS_URL + '/followers'
USER_FOLLOWING_URL = USERS_URL + '/following' USER_FOLLOWING_URL = USERS_URL + '/following'
#== repo urls ==#
REPOS_URL = BASE_URL + '/repos/{0}' # repos of a user
#REPO_URL = REPOS_URL + '/{1}' # a specific repo
REPO_URL = BASE_URL + '/repos/{0}/{1}' # a specific repo