mirror of
				https://github.com/RGBCube/GitHubWrapper
				synced 2025-10-31 05:52:45 +00:00 
			
		
		
		
	Getting issues added
This commit is contained in:
		
							parent
							
								
									6ed2deb92d
								
							
						
					
					
						commit
						5e44401601
					
				
					 5 changed files with 55 additions and 1 deletions
				
			
		|  | @ -54,6 +54,11 @@ class ObjectNotFound(APIError): | |||
|         msg = 'The requested object was not found, ensure spelling is correct before proceeding.' | ||||
|         super().__init__(msg) | ||||
| 
 | ||||
| class IssueNotFound(APIError): | ||||
|     def __init__(self): | ||||
|         msg = 'The requested issue was not found, ensure spelling is correct before proceeding.' | ||||
|         super().__init__(msg) | ||||
| 
 | ||||
| class NoAuthProvided(APIError): | ||||
|     """Raised when no proper authorization or invalid authorization is given to the client""" | ||||
|     def __init__(self): | ||||
|  |  | |||
|  | @ -8,6 +8,7 @@ from types import SimpleNamespace | |||
| import re | ||||
| 
 | ||||
| from .exceptions import * | ||||
| from .exceptions import IssueNotFound | ||||
| from .objects import * | ||||
| from .urls import * | ||||
| 
 | ||||
|  | @ -130,6 +131,13 @@ async def get_repo_from_name(session: aiohttp.ClientSession, owner: str, repo_na | |||
|         return await result.json() | ||||
|     raise RepositoryNotFound | ||||
| 
 | ||||
| async def get_repo_issue(session: aiohttp.ClientSession, owner: str, repo_name: str, issue_number: int) -> dict[str, str]: | ||||
|     """Returns a single issue from the given owner and repo name.""" | ||||
|     result = await session.get(REPO_ISSUE_URL.format(owner, repo_name, issue_number)) | ||||
|     if result.status == 200: | ||||
|         return await result.json() | ||||
|     raise IssueNotFound | ||||
| 
 | ||||
| # org-related functions / utils | ||||
| 
 | ||||
| async def get_org(session: aiohttp.ClientSession, org_name: str): | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ import asyncio | |||
| 
 | ||||
| from . import http | ||||
| from . import exceptions | ||||
| from .objects import User, Repository, Organization | ||||
| from .objects import * | ||||
| 
 | ||||
| class GHClient: | ||||
|     _auth = None | ||||
|  | @ -83,6 +83,10 @@ class GHClient: | |||
|         """Fetch a Github repository from it's name.""" | ||||
|         return Repository(await http.get_repo_from_name(self.session, owner, repo_name), self.session) | ||||
| 
 | ||||
|     async def get_repo_issue(self, owner: str, repo_name: str, issue_number: int) -> Repository: | ||||
|         """Fetch a Github repository from it's name.""" | ||||
|         return repo.Issue(await http.get_repo_issue(self.session, owner, repo_name, issue_number), self.session) | ||||
| 
 | ||||
|     async def get_org(self, org_name: str) -> Organization: | ||||
|         """Fetch a Github organization from it's name""" | ||||
|         return Organization(await http.get_org(self.session, org_name), self.session) | ||||
|  |  | |||
|  | @ -67,3 +67,38 @@ class Repository(APIOBJECT): | |||
|         """Fetch a repository from its name.""" | ||||
|         response = await http.get_repo_from_name(session, owner, repo_name) | ||||
|         return Repository(response, session) | ||||
| 
 | ||||
| 
 | ||||
| class Issue(APIOBJECT): | ||||
|     __slots__ = ( | ||||
|         'id', | ||||
|         'title', | ||||
|         'user', | ||||
|         'labels', | ||||
|         'state', | ||||
|         'created_at', | ||||
|         'closed_by', | ||||
|     ) | ||||
| 
 | ||||
|     def __init__(self, response: dict, session: aiohttp.ClientSession) -> None: | ||||
|         tmp = self.__slots__ + APIOBJECT.__slots__ | ||||
|         keys = {key: value for key,value in response.items() if key in tmp} | ||||
|         for key, value in keys.items(): | ||||
|             if key == 'user': | ||||
|                 setattr(self, key, PartialUser(value, session)) | ||||
|                 continue | ||||
| 
 | ||||
|             if key == 'labels': | ||||
|                 setattr(self, key, [label['name'] for label in value]) | ||||
|                 continue | ||||
| 
 | ||||
|             if key == 'closed_by': | ||||
|                 setattr(self, key, User(value, session)) | ||||
|                 continue | ||||
| 
 | ||||
|             else: | ||||
|                 setattr(self, key, value) | ||||
|                 continue | ||||
| 
 | ||||
|     def __repr__(self) -> str: | ||||
|         return f'<Issue; id: {self.id}, title: {self.title}, user: {self.user}, created_at: {self.created_at}, state: {self.state}>' | ||||
|  | @ -26,6 +26,8 @@ REPOS_URL = BASE_URL + '/repos/{0}' # repos of a user | |||
| 
 | ||||
| REPO_URL = BASE_URL + '/repos/{0}/{1}' # a specific repo | ||||
| 
 | ||||
| REPO_ISSUE_URL = REPO_URL + '/issues/{2}' # a specific issue | ||||
| 
 | ||||
| 
 | ||||
| #== org urls ==# | ||||
| ORG_URL = BASE_URL + '/orgs/{0}' | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 VarMonke
						VarMonke