Module aiogithubapi.legacy.github
AIOGitHubAPI: AIOGitHubAPI
Expand source code
"""AIOGitHubAPI: AIOGitHubAPI"""
from __future__ import annotations
import os
from typing import List, Optional
import aiohttp
from ..common.const import ACCEPT_HEADERS
from ..objects.base import AIOGitHubAPIBase
from ..objects.repository import AIOGitHubAPIRepository
from .client import AIOGitHubAPIClient
class AIOGitHubAPI(AIOGitHubAPIBase):
"""
AIOGitHubAPI
This is the main class this is where it all starts.
DEPRECATED: Use `GitHubAPI` instead.
"""
_close_session = False
def __init__(
self,
token: str = None,
session: aiohttp.ClientSession = None,
headers: Optional[dict] = None,
base_url: Optional[str] = None,
) -> None:
"""
Initialises a GitHub API client.
param | required | description
-- | -- | --
`token` | False | [Your GitHub Personal Access Token](https://github.com/settings/tokens).
`session` | False | `aiohttp.ClientSession` to be used by this package.
`headers` | False | Custom headers to be used by this package.
`base_url` | False | Base URL of the GitHub API.
"""
if session is None:
session = aiohttp.ClientSession()
self._close_session = True
if token is None:
token = os.getenv("GITHUB_TOKEN")
self.client = AIOGitHubAPIClient(session, token, headers, base_url)
async def __aenter__(self) -> "AIOGitHubAPI":
"""Async enter."""
return self
async def __aexit__(self, *exc_info) -> None:
"""Async exit."""
await self._close()
async def get_repo(
self,
repo: str,
etag: Optional[str] = None,
) -> AIOGitHubAPIRepository:
"""Retrun AIOGitHubAPIRepository object."""
_endpoint = f"/repos/{repo}"
_headers = {"Accept": ACCEPT_HEADERS["preview"]}
if etag:
_headers[aiohttp.hdrs.IF_NONE_MATCH] = etag
response = await self.client.get(endpoint=_endpoint, headers=_headers)
return AIOGitHubAPIRepository(self.client, response.data)
async def get_org_repos(
self, org: str, page: int = 1, etag: Optional[str] = None
) -> List[AIOGitHubAPIRepository]:
"""
Retrun a list of AIOGitHubAPIRepository objects.
param | required | Default | description
-- | -- | -- | --
`org` | True | None | The name of the organization, example "octocat"
`page` | False | 1 | The page number you want to fetch.
"""
_enpoint = f"/orgs/{org}/repos?page={str(page)}"
_params = {"per_page": 100}
_headers = {"Accept": ACCEPT_HEADERS["preview"]}
if etag:
_headers[aiohttp.hdrs.IF_NONE_MATCH] = etag
response = await self.client.get(endpoint=_enpoint, params=_params, headers=_headers)
return [AIOGitHubAPIRepository(self.client, x) for x in response.data or []]
async def graphql(self, query: str, variables: dict = {}) -> dict:
response = await self.client.post(
endpoint="/graphql",
returnjson=True,
data={"query": query, "variables": variables},
jsondata=True,
)
return response.data.get("data")
async def get_rate_limit(self) -> dict:
"""Retrun current rate limits."""
_endpoint = "/rate_limit"
await self.client.get(endpoint=_endpoint)
return self.client.ratelimits.__dict__
async def render_markdown(self, content: str, etag: Optional[str] = None) -> str:
"""
Retrun AIOGitHubAPIRepository object.
[API Docs](https://docs.github.com/en/rest/reference/markdown#render-a-markdown-document-in-raw-mode)
param | description
-- | --
`content` | The content (as markdown) you want to render as GHF Markdown
"""
_endpoint = "/markdown/raw"
_headers = {"Content-Type": "text/plain"}
if etag:
_headers[aiohttp.hdrs.IF_NONE_MATCH] = etag
response = await self.client.post(endpoint=_endpoint, headers=_headers, data=content)
return response.data
async def _close(self) -> None:
"""Close open client session."""
if self.client.session and self._close_session:
await self.client.session.close()
Classes
class AIOGitHubAPI (token: str = None, session: aiohttp.ClientSession = None, headers: Optional[dict] = None, base_url: Optional[str] = None)-
AIOGitHubAPI
This is the main class this is where it all starts.
DEPRECATED: Use
GitHubAPIinstead.Initialises a GitHub API client.
param required description tokenFalse Your GitHub Personal Access Token. sessionFalse aiohttp.ClientSessionto be used by this package.headersFalse Custom headers to be used by this package. base_urlFalse Base URL of the GitHub API. Expand source code
class AIOGitHubAPI(AIOGitHubAPIBase): """ AIOGitHubAPI This is the main class this is where it all starts. DEPRECATED: Use `GitHubAPI` instead. """ _close_session = False def __init__( self, token: str = None, session: aiohttp.ClientSession = None, headers: Optional[dict] = None, base_url: Optional[str] = None, ) -> None: """ Initialises a GitHub API client. param | required | description -- | -- | -- `token` | False | [Your GitHub Personal Access Token](https://github.com/settings/tokens). `session` | False | `aiohttp.ClientSession` to be used by this package. `headers` | False | Custom headers to be used by this package. `base_url` | False | Base URL of the GitHub API. """ if session is None: session = aiohttp.ClientSession() self._close_session = True if token is None: token = os.getenv("GITHUB_TOKEN") self.client = AIOGitHubAPIClient(session, token, headers, base_url) async def __aenter__(self) -> "AIOGitHubAPI": """Async enter.""" return self async def __aexit__(self, *exc_info) -> None: """Async exit.""" await self._close() async def get_repo( self, repo: str, etag: Optional[str] = None, ) -> AIOGitHubAPIRepository: """Retrun AIOGitHubAPIRepository object.""" _endpoint = f"/repos/{repo}" _headers = {"Accept": ACCEPT_HEADERS["preview"]} if etag: _headers[aiohttp.hdrs.IF_NONE_MATCH] = etag response = await self.client.get(endpoint=_endpoint, headers=_headers) return AIOGitHubAPIRepository(self.client, response.data) async def get_org_repos( self, org: str, page: int = 1, etag: Optional[str] = None ) -> List[AIOGitHubAPIRepository]: """ Retrun a list of AIOGitHubAPIRepository objects. param | required | Default | description -- | -- | -- | -- `org` | True | None | The name of the organization, example "octocat" `page` | False | 1 | The page number you want to fetch. """ _enpoint = f"/orgs/{org}/repos?page={str(page)}" _params = {"per_page": 100} _headers = {"Accept": ACCEPT_HEADERS["preview"]} if etag: _headers[aiohttp.hdrs.IF_NONE_MATCH] = etag response = await self.client.get(endpoint=_enpoint, params=_params, headers=_headers) return [AIOGitHubAPIRepository(self.client, x) for x in response.data or []] async def graphql(self, query: str, variables: dict = {}) -> dict: response = await self.client.post( endpoint="/graphql", returnjson=True, data={"query": query, "variables": variables}, jsondata=True, ) return response.data.get("data") async def get_rate_limit(self) -> dict: """Retrun current rate limits.""" _endpoint = "/rate_limit" await self.client.get(endpoint=_endpoint) return self.client.ratelimits.__dict__ async def render_markdown(self, content: str, etag: Optional[str] = None) -> str: """ Retrun AIOGitHubAPIRepository object. [API Docs](https://docs.github.com/en/rest/reference/markdown#render-a-markdown-document-in-raw-mode) param | description -- | -- `content` | The content (as markdown) you want to render as GHF Markdown """ _endpoint = "/markdown/raw" _headers = {"Content-Type": "text/plain"} if etag: _headers[aiohttp.hdrs.IF_NONE_MATCH] = etag response = await self.client.post(endpoint=_endpoint, headers=_headers, data=content) return response.data async def _close(self) -> None: """Close open client session.""" if self.client.session and self._close_session: await self.client.session.close()Ancestors
Subclasses
Methods
async def get_org_repos(self, org: str, page: int = 1, etag: Optional[str] = None) ‑> List[AIOGitHubAPIRepository]-
Retrun a list of AIOGitHubAPIRepository objects.
param required Default description orgTrue None The name of the organization, example "octocat" pageFalse 1 The page number you want to fetch. Expand source code
async def get_org_repos( self, org: str, page: int = 1, etag: Optional[str] = None ) -> List[AIOGitHubAPIRepository]: """ Retrun a list of AIOGitHubAPIRepository objects. param | required | Default | description -- | -- | -- | -- `org` | True | None | The name of the organization, example "octocat" `page` | False | 1 | The page number you want to fetch. """ _enpoint = f"/orgs/{org}/repos?page={str(page)}" _params = {"per_page": 100} _headers = {"Accept": ACCEPT_HEADERS["preview"]} if etag: _headers[aiohttp.hdrs.IF_NONE_MATCH] = etag response = await self.client.get(endpoint=_enpoint, params=_params, headers=_headers) return [AIOGitHubAPIRepository(self.client, x) for x in response.data or []] async def get_rate_limit(self) ‑> dict-
Retrun current rate limits.
Expand source code
async def get_rate_limit(self) -> dict: """Retrun current rate limits.""" _endpoint = "/rate_limit" await self.client.get(endpoint=_endpoint) return self.client.ratelimits.__dict__ async def get_repo(self, repo: str, etag: Optional[str] = None) ‑> AIOGitHubAPIRepository-
Retrun AIOGitHubAPIRepository object.
Expand source code
async def get_repo( self, repo: str, etag: Optional[str] = None, ) -> AIOGitHubAPIRepository: """Retrun AIOGitHubAPIRepository object.""" _endpoint = f"/repos/{repo}" _headers = {"Accept": ACCEPT_HEADERS["preview"]} if etag: _headers[aiohttp.hdrs.IF_NONE_MATCH] = etag response = await self.client.get(endpoint=_endpoint, headers=_headers) return AIOGitHubAPIRepository(self.client, response.data) async def graphql(self, query: str, variables: dict = {}) ‑> dict-
Expand source code
async def graphql(self, query: str, variables: dict = {}) -> dict: response = await self.client.post( endpoint="/graphql", returnjson=True, data={"query": query, "variables": variables}, jsondata=True, ) return response.data.get("data") async def render_markdown(self, content: str, etag: Optional[str] = None) ‑> str-
Retrun AIOGitHubAPIRepository object.
param description contentThe content (as markdown) you want to render as GHF Markdown Expand source code
async def render_markdown(self, content: str, etag: Optional[str] = None) -> str: """ Retrun AIOGitHubAPIRepository object. [API Docs](https://docs.github.com/en/rest/reference/markdown#render-a-markdown-document-in-raw-mode) param | description -- | -- `content` | The content (as markdown) you want to render as GHF Markdown """ _endpoint = "/markdown/raw" _headers = {"Content-Type": "text/plain"} if etag: _headers[aiohttp.hdrs.IF_NONE_MATCH] = etag response = await self.client.post(endpoint=_endpoint, headers=_headers, data=content) return response.data