mirror of
				https://github.com/RGBCube/GitHubWrapper
				synced 2025-10-31 05:52:45 +00:00 
			
		
		
		
	Added create_gist and related File objects
This commit is contained in:
		
							parent
							
								
									353977c4b2
								
							
						
					
					
						commit
						6450ee6092
					
				
					 3 changed files with 57 additions and 6 deletions
				
			
		|  | @ -1,11 +1,17 @@ | ||||||
| #== http.py ==# | #== http.py ==# | ||||||
| 
 | 
 | ||||||
|  | from __future__ import annotations | ||||||
| 
 | 
 | ||||||
|  | import io | ||||||
| import json | import json | ||||||
| import re | import re | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
| from datetime import datetime | from datetime import datetime | ||||||
| from types import SimpleNamespace | from types import SimpleNamespace | ||||||
|  | from typing import TYPE_CHECKING | ||||||
|  | 
 | ||||||
|  | if TYPE_CHECKING: | ||||||
|  |     from .main import File | ||||||
| 
 | 
 | ||||||
| import aiohttp | import aiohttp | ||||||
| 
 | 
 | ||||||
|  | @ -213,6 +219,29 @@ class http: | ||||||
|             return await result.json() |             return await result.json() | ||||||
|         raise GistNotFound |         raise GistNotFound | ||||||
| 
 | 
 | ||||||
|  |     async def create_gist( | ||||||
|  |         self, | ||||||
|  |         *, | ||||||
|  |         files: list['File'] = [], | ||||||
|  |         description: str = 'Default description', | ||||||
|  |         public: bool = False | ||||||
|  |     ) -> GithubGistData: | ||||||
|  |         data = {} | ||||||
|  |         data['description'] = description | ||||||
|  |         data['public'] = public | ||||||
|  |         data['files'] = {} | ||||||
|  |         for file in files: | ||||||
|  |             data['files'][file.filename] = { | ||||||
|  |                 'content': file.read() | ||||||
|  |             } | ||||||
|  |         data = json.dumps(data) | ||||||
|  |         _headers = self.session.headers | ||||||
|  |         result = self.session.post(CREATE_GIST_URL, data=data, headers=_headers|{'Accept': 'application/vnd.github.v3+json'}) | ||||||
|  |         if 201 == result.status: | ||||||
|  |             return await result.json() | ||||||
|  |         raise InvalidToken | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|     async def create_repo(self, **kwargs: dict[str, str | bool]) -> GithubRepoData: |     async def create_repo(self, **kwargs: dict[str, str | bool]) -> GithubRepoData: | ||||||
|         """Creates a repo for you with given data""" |         """Creates a repo for you with given data""" | ||||||
|         data = { |         data = { | ||||||
|  |  | ||||||
|  | @ -7,6 +7,7 @@ __all__ = ( | ||||||
| 
 | 
 | ||||||
| import asyncio | import asyncio | ||||||
| import functools | import functools | ||||||
|  | import io | ||||||
| 
 | 
 | ||||||
| import aiohttp | import aiohttp | ||||||
| 
 | 
 | ||||||
|  | @ -16,6 +17,20 @@ from .http import http | ||||||
| from .objects import Gist, Issue, Organization, Repository, User | from .objects import Gist, Issue, Organization, Repository, User | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | class File: | ||||||
|  |     def __init__(self, fp: str | io.StringIO, filename: str = 'DefaultFilename.txt'): | ||||||
|  |         self.fp = fp | ||||||
|  |         self.filename = filename | ||||||
|  | 
 | ||||||
|  |     def read(self) -> str: | ||||||
|  |         if isinstance(self.fp, str): | ||||||
|  |             with open(self.fp) as fp: | ||||||
|  |                 data = fp.read() | ||||||
|  |             return data | ||||||
|  |         else: | ||||||
|  |             return self.fp.read() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class GHClient: | class GHClient: | ||||||
|     _auth = None |     _auth = None | ||||||
|     has_started = False |     has_started = False | ||||||
|  | @ -122,15 +137,20 @@ class GHClient: | ||||||
|         return Issue(await self.http.get_repo_issue(owner, repo, issue), self.http.session) |         return Issue(await self.http.get_repo_issue(owner, repo, issue), self.http.session) | ||||||
| 
 | 
 | ||||||
|     async def create_repo(self, name: str, description: str, private: bool, gitignore_template: str) -> Repository: |     async def create_repo(self, name: str, description: str, private: bool, gitignore_template: str) -> Repository: | ||||||
|         """Create a new Github repository.""" |         """Create a new Github repository, requires authorisation.""" | ||||||
|         return Repository(await self.http.create_repo(name, description, private, gitignore_template), self.http.session) |         return Repository(await self.http.create_repo(name, description, private, gitignore_template), self.http.session) | ||||||
| 
 | 
 | ||||||
|     async def get_org(self, org: str) -> Organization: |  | ||||||
|         """Fetch a Github organization from it's name""" |  | ||||||
|         return Organization(await self.http.get_org(org), self.http.session) |  | ||||||
| 
 |  | ||||||
|     async def get_gist(self, gist: int) -> Gist: |     async def get_gist(self, gist: int) -> Gist: | ||||||
|         """Fetch a Github gist from it's id""" |         """Fetch a Github gist from it's id.""" | ||||||
|         return Gist(await self.http.get_gist(gist), self.http.session) |         return Gist(await self.http.get_gist(gist), self.http.session) | ||||||
| 
 | 
 | ||||||
|  |     async def create_gist(self, *,  files: list[File], description: str, public: bool) -> Gist: | ||||||
|  |         """Creates a Gist with the given files, requires authorisation.""" | ||||||
|  |         return Gist(await self.http.create_gist(files=files, description=description, public=public), self.http.session) | ||||||
|  | 
 | ||||||
|  |     async def get_org(self, org: str) -> Organization: | ||||||
|  |         """Fetch a Github organization from it's name.""" | ||||||
|  |         return Organization(await self.http.get_org(org), self.http.session) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -33,5 +33,7 @@ REPO_ISSUE_URL = REPO_URL + '/issues/{2}' # a specific issue | ||||||
| #== gist urls ==# | #== gist urls ==# | ||||||
| GIST_URL = BASE_URL + '/gists/{0}' # specific gist | GIST_URL = BASE_URL + '/gists/{0}' # specific gist | ||||||
| 
 | 
 | ||||||
|  | CREATE_GIST_URL = BASE_URL + '/gists' | ||||||
|  | 
 | ||||||
| #== org urls ==# | #== org urls ==# | ||||||
| ORG_URL = BASE_URL + '/orgs/{0}' | ORG_URL = BASE_URL + '/orgs/{0}' | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 sudosnok
						sudosnok