mirror of
https://github.com/RGBCube/GitHubWrapper
synced 2025-05-22 08:55:08 +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