mirror of
https://github.com/RGBCube/GitHubWrapper
synced 2025-05-30 20:48:12 +00:00
commit
a7e6910fcc
30 changed files with 398 additions and 147 deletions
69
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
69
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
|
@ -0,0 +1,69 @@
|
|||
# Credits to most of this template go to Rapptz (https://github.com/Rapptz)
|
||||
# as this was taken from the discord.py repository (https://github.com/Rapptz/discord.py/blob/868476c99963e72aa529ed6203f86ef529a2c1f1/.github/ISSUE_TEMPLATE/bug_report.yml)
|
||||
name: Bug Report
|
||||
|
||||
description: Report broken or incorrect behaviour
|
||||
|
||||
labels:
|
||||
- bug
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill out a bug.
|
||||
If you want real-time support, consider joining our [Discord server](https://discord.gg/pTJfS4TkWe) instead.
|
||||
|
||||
Please note that this form is for bugs only!
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Summary
|
||||
description: A simple summary of your bug report.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Reproduction Steps
|
||||
description: What you do to make it happen?
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Minimal Reproducible Code
|
||||
description: A short snippet of code that showcases the bug.
|
||||
render: Python
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Expected Results
|
||||
description: What did you expect to happen?
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Actual Results
|
||||
description: What actually happened?
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Checklist
|
||||
description: |
|
||||
Let's make sure you've properly done due diligence when reporting this issue!
|
||||
options:
|
||||
- label: I have searched the open issues for duplicates.
|
||||
required: true
|
||||
- label: I have shown the entire traceback, if possible.
|
||||
required: true
|
||||
- label: I have removed my token from display, if visible.
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional Context
|
||||
description: If there is anything else to say, please do so here.
|
4
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
4
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
contact_links:
|
||||
- name: Discord Server
|
||||
about: Use our official Discord server to ask for help and questions.
|
||||
url: https://discord.gg/pTJfS4TkWe
|
56
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
56
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
|
@ -0,0 +1,56 @@
|
|||
# Credits to most of this template go to Rapptz (https://github.com/Rapptz)
|
||||
# as this was taken from the discord.py repository (https://github.com/Rapptz/discord.py/blob/868476c99963e72aa529ed6203f86ef529a2c1f1/.github/ISSUE_TEMPLATE/feature_request.yml)
|
||||
name: Feature Request
|
||||
|
||||
description: Suggest a feature for this library
|
||||
|
||||
labels:
|
||||
- enhancement
|
||||
|
||||
body:
|
||||
- type: input
|
||||
attributes:
|
||||
label: Summary
|
||||
description: A short summary of what your feature request is.
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
attributes:
|
||||
multiple: false
|
||||
label: What is the feature request for?
|
||||
options:
|
||||
- The library
|
||||
- The documentation
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: The Problem
|
||||
description: |
|
||||
What problem is your feature trying to solve?
|
||||
What becomes easier or possible when this feature is implemented?
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: The Ideal Solution
|
||||
description: |
|
||||
What is your ideal solution to the problem?
|
||||
What would you like this feature to do?
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: The Current Solution
|
||||
description: What is the current solution to the problem, if any?
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional Context
|
||||
description: If there is anything else to say, please do so here.
|
14
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
14
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
|
@ -0,0 +1,14 @@
|
|||
## Summary
|
||||
|
||||
<!-- Summary of your pull request -->
|
||||
|
||||
## Checklist
|
||||
|
||||
<!-- Put an x inside [ ] to check it, like so: [x] -->
|
||||
|
||||
- [ ] If code changes were made then they have been tested.
|
||||
- [ ] I have updated the documentation to reflect the changes.
|
||||
- [ ] This PR fixes an issue.
|
||||
- [ ] This PR adds something new (e.g. new method or parameters).
|
||||
- [ ] This PR is a breaking change (e.g. methods or parameters removed/renamed)
|
||||
- [ ] This PR is **not** a code change (e.g. documentation, README, ...)
|
30
.github/workflows/autoblack.yml
vendored
30
.github/workflows/autoblack.yml
vendored
|
@ -1,30 +0,0 @@
|
|||
# GitHub Action that uses Black to reformat the Python code in an incoming pull request.
|
||||
# If all Python code in the pull request is compliant with Black then this Action does nothing.
|
||||
# Othewrwise, Black is run and its changes are committed back to the incoming pull request.
|
||||
# https://github.com/cclauss/autoblack
|
||||
|
||||
name: autoblack
|
||||
on: [pull_request]
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up Python 3.7
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: 3.7
|
||||
- name: Install Black
|
||||
run: pip install black
|
||||
- name: Run black --check .
|
||||
run: black --check .
|
||||
- name: If needed, commit black changes to the pull request
|
||||
if: failure()
|
||||
run: |
|
||||
black .
|
||||
git config --global user.name 'autoblack'
|
||||
git config --global user.email 'cclauss@users.noreply.github.com'
|
||||
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY
|
||||
git checkout $GITHUB_HEAD_REF
|
||||
git commit -am "fixup: Format Python code with Black"
|
||||
git push
|
26
.github/workflows/bandit.yml
vendored
Normal file
26
.github/workflows/bandit.yml
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
name: Bandit
|
||||
|
||||
on: [ pull_request, push ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: github.event.pull_request.user.type != 'Bot'
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [ '3.8', '3.9', '3.10' ]
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
|
||||
- name: Install Bandit
|
||||
run: pip install -U pip bandit
|
||||
|
||||
- name: Run Bandit
|
||||
run: bandit --recursive ./
|
47
.github/workflows/lint.yml
vendored
Normal file
47
.github/workflows/lint.yml
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
name: Lint
|
||||
|
||||
on: [ pull_request, push ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: github.event.pull_request.user.type != 'Bot'
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [ '3.8', '3.9', '3.10' ]
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
|
||||
- name: Install Unimport, Isort, Black, and Flynt
|
||||
run: pip install -U pip unimport isort black flynt
|
||||
|
||||
- name: Run Unimport
|
||||
continue-on-error: true
|
||||
run: unimport ./ --ignore-init --gitignore -r
|
||||
|
||||
- name: Run Isort
|
||||
run: isort ./
|
||||
|
||||
- name: Run Black
|
||||
run: black ./
|
||||
|
||||
- name: Run Flynt
|
||||
run: flynt ./ -tc
|
||||
|
||||
- name: Setup Git
|
||||
run: git config user.name "Automated Linter"
|
||||
|
||||
- name: Push To GitHub
|
||||
continue-on-error: true
|
||||
run: |
|
||||
git pull
|
||||
git add ./
|
||||
git commit --reuse-message=HEAD
|
||||
git push
|
33
.github/workflows/pylint.yml
vendored
33
.github/workflows/pylint.yml
vendored
|
@ -1,23 +1,26 @@
|
|||
name: Pylint
|
||||
name: PyLint
|
||||
|
||||
on: [push]
|
||||
on: [ pull_request, push ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: github.event.pull_request.user.type != 'Bot'
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ["3.8", "3.9", "3.10"]
|
||||
python-version: [ '3.8', '3.9', '3.10' ]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v3
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install pylint
|
||||
- name: Analysing the code with pylint
|
||||
run: |
|
||||
pylint $(git ls-files '*.py')
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
|
||||
- name: Install PyLint
|
||||
run: pip install -U pip pylint
|
||||
|
||||
- name: Run PyLint
|
||||
run: pylint $(git ls-files '*.py')
|
||||
|
|
28
.github/workflows/pyright.yml
vendored
Normal file
28
.github/workflows/pyright.yml
vendored
Normal file
|
@ -0,0 +1,28 @@
|
|||
name: PyRight
|
||||
|
||||
on: [ pull_request, push ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: github.event.pull_request.user.type != 'Bot'
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: [ '3.8', '3.9', '3.10' ]
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
|
||||
- name: Install PyRight & Dependencies
|
||||
run: |
|
||||
pip install -U pip pyright
|
||||
pip install -Ur requirements.txt
|
||||
|
||||
- name: Run PyRight
|
||||
run: pyright ./
|
|
@ -1,4 +1,4 @@
|
|||
version: 1
|
||||
version: 2
|
||||
|
||||
sphinx:
|
||||
configuration: docs/conf.py
|
||||
|
@ -6,7 +6,7 @@ sphinx:
|
|||
builder: html
|
||||
|
||||
python:
|
||||
version: 3.8
|
||||
version: '3.8'
|
||||
install:
|
||||
- method: pip
|
||||
path: .
|
||||
|
|
2
LICENSE
2
LICENSE
|
@ -1,6 +1,6 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2022 - Present VarMonke and sudosnok
|
||||
Copyright (c) 2022-present VarMonke and sudosnok
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
23
README.rst
23
README.rst
|
@ -16,16 +16,16 @@ Key Features
|
|||
Installing
|
||||
----------
|
||||
|
||||
**Python 3.8 or higher**
|
||||
**Python 3.8 or higher is required to run the library**
|
||||
|
||||
To install the library, run the following command
|
||||
To install the library, run the following command:
|
||||
|
||||
.. code:: sh
|
||||
|
||||
#Linux/macOS
|
||||
# On Linux or MacOS
|
||||
python3 -m pip install -U git+https://github.com/VarMonke/Github-Api-Wrapper
|
||||
|
||||
#Windows
|
||||
# On Windows
|
||||
py -m pip install -U git+https://github.com/VarMonke/Github-Api-Wrapper
|
||||
|
||||
Quick Example
|
||||
|
@ -38,18 +38,21 @@ Quick Example
|
|||
|
||||
async def main():
|
||||
client = await github.GHClient()
|
||||
return await client.get_user(user='GithubPythonBot')
|
||||
|
||||
user = asyncio.run(main())
|
||||
print(user)
|
||||
print(user.html_url)
|
||||
user = await client.get_user(user='GithubPythonBot')
|
||||
|
||||
print(user)
|
||||
print(user.html_url)
|
||||
|
||||
asyncio.run(main())
|
||||
|
||||
.. code:: sh
|
||||
#Output
|
||||
# Output
|
||||
<User login: 'GithubPythonBot', id: 104489846, created_at: 2022-04-27 07:31:26>
|
||||
https://github.com/GithubPythonBot
|
||||
|
||||
|
||||
Links
|
||||
-----
|
||||
`Discord Server <https://discord.gg/DWhwsQ5TsT>`_
|
||||
- `Discord Server <https://discord.gg/DWhwsQ5TsT>`_
|
||||
- `GitHub API Documentation <https://docs.github.com/en/rest>`_
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2022 - Present Jess, VarMonke and sudosnok
|
||||
Copyright (c) 2022-present Jess, VarMonke and sudosnok
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2015-present Rapptz
|
||||
Copyright (c) 2022 - Present Rapptz, VarMonke and sudosnok
|
||||
Copyright (c) 2015-2022 Rapptz
|
||||
Copyright (c) 2022-present VarMonke and sudosnok
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import logging
|
||||
import sys
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
|
@ -85,7 +85,7 @@ with open('../github/__init__.py') as f:
|
|||
release = version
|
||||
|
||||
# This assumes a tag is available for final releases
|
||||
branch = 'master' if version.endswith('a') else 'v' + version
|
||||
branch = 'master' if version.endswith('a') else f"v{version}"
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import importlib
|
||||
import inspect
|
||||
import re
|
||||
from typing import Dict, List, NamedTuple, Optional, Tuple, Sequence, TYPE_CHECKING
|
||||
from typing import TYPE_CHECKING, Dict, List, NamedTuple, Optional, Sequence, Tuple
|
||||
|
||||
from docutils import nodes
|
||||
from sphinx import addnodes
|
||||
|
|
|
@ -42,7 +42,7 @@ class DPYStandaloneHTMLBuilder(StandaloneHTMLBuilder):
|
|||
self.handle_page('genindex-all', genindexcontext, 'genindex.html')
|
||||
for (key, entries), count in zip(genindex, indexcounts):
|
||||
ctx = {'key': key, 'entries': entries, 'count': count, 'genindexentries': genindex}
|
||||
self.handle_page('genindex-' + key, ctx, 'genindex-single.html')
|
||||
self.handle_page(f"genindex-{key}", ctx, 'genindex-single.html')
|
||||
else:
|
||||
self.handle_page('genindex', genindexcontext, 'genindex.html')
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from docutils.parsers.rst import Directive
|
||||
from docutils.parsers.rst import states, directives # type: ignore
|
||||
from docutils.parsers.rst.roles import set_classes
|
||||
from docutils import nodes
|
||||
from docutils.parsers.rst import directives # type: ignore
|
||||
from docutils.parsers.rst import Directive
|
||||
from docutils.parsers.rst.roles import set_classes
|
||||
|
||||
|
||||
class details(nodes.General, nodes.Element):
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
from docutils.parsers.rst import Directive
|
||||
from docutils.parsers.rst import states, directives # type: ignore
|
||||
from docutils.parsers.rst.roles import set_classes
|
||||
from docutils import nodes
|
||||
from sphinx.locale import _
|
||||
from docutils.parsers.rst import Directive
|
||||
|
||||
|
||||
class exception_hierarchy(nodes.General, nodes.Element):
|
||||
|
|
|
@ -4,11 +4,10 @@
|
|||
|
||||
from typing import Any, Dict, List, Tuple
|
||||
|
||||
import sphinx
|
||||
from docutils import nodes, utils
|
||||
from docutils.nodes import Node, system_message
|
||||
from docutils.parsers.rst.states import Inliner
|
||||
|
||||
import sphinx
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.nodes import split_explicit_title
|
||||
from sphinx.util.typing import RoleFunction
|
||||
|
|
|
@ -4,10 +4,10 @@ __title__ = 'Github-Api-Wrapper'
|
|||
__authors__ = 'VarMonke', 'sudosnok'
|
||||
__version__ = '1.2.1'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright (c) 2020 VarMonke & sudosnok'
|
||||
__copyright__ = 'Copyright (c) 2022-present VarMonke & sudosnok'
|
||||
|
||||
from .client import *
|
||||
from .objects import *
|
||||
from .http import *
|
||||
from .urls import *
|
||||
from .exceptions import *
|
||||
from .http import *
|
||||
from .objects import *
|
||||
from .urls import *
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from collections import deque
|
||||
from typing import Any, Deque, Tuple, TypeVar, Dict
|
||||
from typing import Any, Deque, Dict, Tuple, TypeVar
|
||||
|
||||
__all__: Tuple[str, ...] = ('ObjectCache',)
|
||||
|
||||
|
|
|
@ -2,29 +2,29 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import functools
|
||||
import aiohttp
|
||||
|
||||
from typing import (
|
||||
Any,
|
||||
Awaitable,
|
||||
Callable,
|
||||
Literal,
|
||||
Any,
|
||||
Coroutine,
|
||||
Dict,
|
||||
Generator,
|
||||
List,
|
||||
Literal,
|
||||
Optional,
|
||||
Tuple,
|
||||
Union,
|
||||
List,
|
||||
overload,
|
||||
TypeVar,
|
||||
Union,
|
||||
overload,
|
||||
)
|
||||
from typing_extensions import Self, ParamSpec, Concatenate
|
||||
|
||||
import aiohttp
|
||||
from typing_extensions import Concatenate, ParamSpec, Self
|
||||
|
||||
from . import exceptions
|
||||
from .cache import ObjectCache
|
||||
from .http import http
|
||||
from .objects import Gist, Issue, Organization, Repository, User, File
|
||||
from .objects import File, Gist, Issue, Organization, Repository, User
|
||||
|
||||
__all__: Tuple[str, ...] = ('GHClient', 'Client')
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ class Ratelimited(APIError):
|
|||
|
||||
def __init__(self, reset_time: datetime.datetime):
|
||||
formatted = reset_time.strftime(r"%H:%M:%S %A, %d %b")
|
||||
msg = "We're being ratelimited, wait until {}.\nAuthentication raises the ratelimit.".format(formatted)
|
||||
msg = f"We're being ratelimited, wait until {formatted}.\nAuthentication raises the ratelimit."
|
||||
super().__init__(msg)
|
||||
|
||||
|
||||
|
|
|
@ -1,27 +1,21 @@
|
|||
# == http.py ==#
|
||||
|
||||
from __future__ import annotations
|
||||
from asyncio.base_subprocess import ReadSubprocessPipeProto
|
||||
from base64 import b64encode
|
||||
|
||||
import json
|
||||
import platform
|
||||
import re
|
||||
from datetime import datetime
|
||||
from types import SimpleNamespace
|
||||
from typing import Any, Dict, Literal, NamedTuple, Optional, Type, Tuple, Union, List
|
||||
from typing_extensions import TypeAlias, reveal_type
|
||||
import platform
|
||||
from typing import Any, Dict, List, NamedTuple, Optional, Tuple, Type, Union
|
||||
|
||||
import aiohttp
|
||||
from typing_extensions import TypeAlias
|
||||
|
||||
from .exceptions import *
|
||||
from .exceptions import GistNotFound, RepositoryAlreadyExists, MissingPermissions
|
||||
from .exceptions import FileAlreadyExists
|
||||
from .exceptions import ResourceAlreadyExists
|
||||
from .exceptions import Ratelimited
|
||||
from .objects import User, Gist, Repository, File, bytes_to_b64
|
||||
from .urls import *
|
||||
from . import __version__
|
||||
from .exceptions import *
|
||||
from .objects import File, Gist, Repository, User, bytes_to_b64
|
||||
from .urls import *
|
||||
|
||||
__all__: Tuple[str, ...] = (
|
||||
'Paginator',
|
||||
|
@ -73,9 +67,10 @@ APIType: TypeAlias = Union[User, Gist, Repository]
|
|||
async def make_session(*, headers: Dict[str, str], authorization: Union[aiohttp.BasicAuth, None]) -> aiohttp.ClientSession:
|
||||
"""This makes the ClientSession, attaching the trace config and ensuring a UA header is present."""
|
||||
if not headers.get('User-Agent'):
|
||||
headers[
|
||||
'User-Agent'
|
||||
] = f'Github-API-Wrapper (https://github.com/VarMonke/Github-Api-Wrapper) @ {__version__} Python {platform.python_version()} aiohttp {aiohttp.__version__}'
|
||||
headers['User-Agent'] = (
|
||||
f'Github-API-Wrapper (https://github.com/VarMonke/Github-Api-Wrapper) @ {__version__} Python'
|
||||
f' {platform.python_version()} aiohttp {aiohttp.__version__}'
|
||||
)
|
||||
|
||||
session = aiohttp.ClientSession(auth=authorization, headers=headers, trace_configs=[trace_config])
|
||||
session._rates = Rates('', '', '', '', '')
|
||||
|
@ -140,9 +135,10 @@ class Paginator:
|
|||
class http:
|
||||
def __init__(self, headers: Dict[str, Union[str, int]], auth: Union[aiohttp.BasicAuth, None]) -> None:
|
||||
if not headers.get('User-Agent'):
|
||||
headers[
|
||||
'User-Agent'
|
||||
] = f'Github-API-Wrapper (https://github.com/VarMonke/Github-Api-Wrapper) @ {__version__} Python/{platform.python_version()} aiohttp/{aiohttp.__version__}'
|
||||
headers['User-Agent'] = (
|
||||
'Github-API-Wrapper (https://github.com/VarMonke/Github-Api-Wrapper) @'
|
||||
f' {__version__} Python/{platform.python_version()} aiohttp/{aiohttp.__version__}'
|
||||
)
|
||||
|
||||
self._rates = Rates('', '', '', '', '')
|
||||
self.headers = headers
|
||||
|
|
|
@ -1,18 +1,15 @@
|
|||
# == objects.py ==#
|
||||
from __future__ import annotations
|
||||
|
||||
from base64 import b64encode
|
||||
import json
|
||||
|
||||
from typing import TYPE_CHECKING, Any, Literal, Optional, Tuple, Union, Dict, List
|
||||
|
||||
import aiohttp
|
||||
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .http import http
|
||||
|
||||
from datetime import datetime
|
||||
import io
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
__all__: Tuple[str, ...] = (
|
||||
'APIObject',
|
||||
|
@ -201,7 +198,7 @@ class Repository(APIObject):
|
|||
'id',
|
||||
'name',
|
||||
'owner',
|
||||
'size' 'created_at',
|
||||
'sizecreated_at',
|
||||
'url',
|
||||
'html_url',
|
||||
'archived',
|
||||
|
@ -346,7 +343,10 @@ class Issue(APIObject):
|
|||
continue
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f'<{self.__class__.__name__} id: {self.id}, title: {self.title}, user: {self.user}, created_at: {self.created_at}, state: {self.state}>'
|
||||
return (
|
||||
f'<{self.__class__.__name__} id: {self.id}, title: {self.title}, user: {self.user}, created_at:'
|
||||
f' {self.created_at}, state: {self.state}>'
|
||||
)
|
||||
|
||||
@property
|
||||
def updated_at(self) -> Optional[datetime]:
|
||||
|
@ -518,7 +518,10 @@ class Organization(APIObject):
|
|||
continue
|
||||
|
||||
def __repr__(self):
|
||||
return f'<{self.__class__.__name__} login: {self.login!r}, id: {self.id}, is_verified: {self.is_verified}, public_repos: {self.public_repos}, public_gists: {self.public_gists}, created_at: {self.created_at}>'
|
||||
return (
|
||||
f'<{self.__class__.__name__} login: {self.login!r}, id: {self.id}, is_verified: {self.is_verified},'
|
||||
f' public_repos: {self.public_repos}, public_gists: {self.public_gists}, created_at: {self.created_at}>'
|
||||
)
|
||||
|
||||
@property
|
||||
def description(self):
|
||||
|
|
|
@ -4,40 +4,40 @@ BASE_URL = 'https://api.github.com'
|
|||
|
||||
|
||||
# == user urls ==#
|
||||
USERS_URL = BASE_URL + '/users/{0}'
|
||||
USERS_URL = f"{BASE_URL}/users/{{0}}"
|
||||
|
||||
USER_HTML_URL = 'https://github.com/users/{0}'
|
||||
|
||||
SELF_URL = BASE_URL + '/user'
|
||||
SELF_URL = f"{BASE_URL}/user"
|
||||
|
||||
USER_REPOS_URL = USERS_URL + '/repos'
|
||||
USER_REPOS_URL = f"{USERS_URL}/repos"
|
||||
|
||||
USER_ORGS_URL = USERS_URL + '/orgs'
|
||||
USER_ORGS_URL = f"{USERS_URL}/orgs"
|
||||
|
||||
USER_GISTS_URL = USERS_URL + '/gists'
|
||||
USER_GISTS_URL = f"{USERS_URL}/gists"
|
||||
|
||||
USER_FOLLOWERS_URL = USERS_URL + '/followers'
|
||||
USER_FOLLOWERS_URL = f"{USERS_URL}/followers"
|
||||
|
||||
USER_FOLLOWING_URL = USERS_URL + '/following'
|
||||
USER_FOLLOWING_URL = f"{USERS_URL}/following"
|
||||
|
||||
|
||||
# == repo urls ==#
|
||||
CREATE_REPO_URL = BASE_URL + '/user/repos' # _auth repo create
|
||||
CREATE_REPO_URL = f"{BASE_URL}/user/repos" # _auth repo create
|
||||
|
||||
REPOS_URL = BASE_URL + '/repos/{0}' # repos of a user
|
||||
REPOS_URL = f"{BASE_URL}/repos/{{0}}" # repos of a user
|
||||
|
||||
REPO_URL = BASE_URL + '/repos/{0}/{1}' # a specific repo
|
||||
REPO_URL = f"{BASE_URL}/repos/{{0}}/{{1}}" # a specific repo
|
||||
|
||||
ADD_FILE_URL = BASE_URL + '/repos/{}/{}/contents/{}'
|
||||
ADD_FILE_URL = f"{BASE_URL}/repos/{{}}/{{}}/contents/{{}}"
|
||||
|
||||
ADD_FILE_BRANCH = BASE_URL + ''
|
||||
ADD_FILE_BRANCH = f"{BASE_URL}"
|
||||
|
||||
REPO_ISSUE_URL = REPO_URL + '/issues/{2}' # a specific issue
|
||||
REPO_ISSUE_URL = f"{REPO_URL}/issues/{{2}}" # a specific issue
|
||||
|
||||
# == gist urls ==#
|
||||
GIST_URL = BASE_URL + '/gists/{0}' # specific gist
|
||||
GIST_URL = f"{BASE_URL}/gists/{{0}}" # specific gist
|
||||
|
||||
CREATE_GIST_URL = BASE_URL + '/gists' # create a gist
|
||||
CREATE_GIST_URL = f"{BASE_URL}/gists" # create a gist
|
||||
|
||||
# == org urls ==#
|
||||
ORG_URL = BASE_URL + '/orgs/{0}'
|
||||
ORG_URL = f"{BASE_URL}/orgs/{{0}}"
|
||||
|
|
|
@ -1,3 +1,47 @@
|
|||
[tool.black]
|
||||
line-length = 125
|
||||
skip-string-normalization = true
|
||||
skip-string-normalization = true
|
||||
preview = true # better formatting basically
|
||||
|
||||
[tool.isort]
|
||||
line_length = 125
|
||||
combine_as_imports = true
|
||||
combine_star = true
|
||||
|
||||
[tool.pyright]
|
||||
typeCheckingMode = "basic"
|
||||
strictListInference = true
|
||||
strictDictionaryInference = true
|
||||
strictSetInference = true
|
||||
|
||||
# explicity enabling is better than making it strict and disabling stuff
|
||||
reportMissingModuleSource = "error"
|
||||
reportAssertAlwaysTrue = "error"
|
||||
reportInvalidStringEscapeSequence = "error"
|
||||
reportInvalidTypeVarUse = "error"
|
||||
reportSelfClsParameterName = "error"
|
||||
reportUnsupportedDunderAll = "error"
|
||||
reportUnusedExpression = "error"
|
||||
reportWildcardImportFromLibrary = "error"
|
||||
reportConstantRedefinition = "error"
|
||||
reportDuplicateImport = "error"
|
||||
reportImportCycles = "error"
|
||||
reportIncompatibleVariableOverride = "error"
|
||||
reportIncompleteStub = "error"
|
||||
reportInconsistentConstructor = "error"
|
||||
reportInvalidStubStatement = "error"
|
||||
reportMatchNotExhaustive = "error"
|
||||
reportMissingParameterType = "error"
|
||||
reportTypeCommentUsage = "error"
|
||||
reportUnnecessaryCast = "error"
|
||||
reportUnnecessaryComparison = "error"
|
||||
reportUnnecessaryIsInstance = "error"
|
||||
reportUnusedClass = "error"
|
||||
reportUnusedVariable = "error"
|
||||
reportUntypedBaseClass = "error"
|
||||
reportUntypedClassDecorator = "error"
|
||||
reportUntypedFunctionDecorator = "error"
|
||||
reportUntypedNamedTuple = "error"
|
||||
reportCallInDefaultInitializer = "error"
|
||||
reportPropertyTypeMismatch = "error"
|
||||
reportUnnecessaryTypeIgnoreComment = "error"
|
||||
|
|
|
@ -17,4 +17,4 @@ project_urls =
|
|||
packages = find:
|
||||
python_requires = >=3.8
|
||||
install_requires =
|
||||
aiohttp == 3.8.1
|
||||
aiohttp == 3.8.1
|
||||
|
|
17
setup.py
17
setup.py
|
@ -1,21 +1,12 @@
|
|||
import re
|
||||
from pathlib import Path
|
||||
|
||||
from setuptools import setup
|
||||
|
||||
with open('requirements.txt') as f:
|
||||
requirements = f.read().splitlines()
|
||||
|
||||
path = Path(__file__).parent / "github" / "__init__.py"
|
||||
version = re.search(r'\d[.]\d[.]\d', path.read_text()).group(0) # type: ignore
|
||||
|
||||
packages = [
|
||||
'github',
|
||||
]
|
||||
|
||||
readme = ''
|
||||
with open('README.rst') as f:
|
||||
readme = f.read()
|
||||
|
||||
extras_require = {
|
||||
'docs': [
|
||||
'sphinx==4.4.0',
|
||||
|
@ -29,11 +20,11 @@ setup(
|
|||
name='github',
|
||||
author='VarMonke & sudosnok',
|
||||
url='https://github.com/VarMonke/Github-Api-Wrapper',
|
||||
version=version,
|
||||
version=re.search(r'\d[.]\d[.]\d', (Path('github') / '__init__.py').read_text())[0],
|
||||
packages=packages,
|
||||
license='MIT',
|
||||
description='An asynchronous python wrapper around the GitHub API',
|
||||
long_description=readme,
|
||||
install_requires=requirements,
|
||||
long_description=Path('README.rst').read_text(),
|
||||
install_requires=Path('requirements.txt').read_text().splitlines(),
|
||||
python_requires='>=3.8.0',
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue