ctftime-api 0.1.2__tar.gz → 0.1.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ctftime_api-0.1.4/.github/dependabot.yml +27 -0
- ctftime_api-0.1.4/.github/workflows/cleanup.yml +29 -0
- ctftime_api-0.1.4/.github/workflows/codeql.yml +37 -0
- ctftime_api-0.1.4/.github/workflows/docs.yml +71 -0
- ctftime_api-0.1.4/.github/workflows/publish.yml +81 -0
- ctftime_api-0.1.4/.github/workflows/test.yml +67 -0
- ctftime_api-0.1.4/.gitignore +143 -0
- {ctftime_api-0.1.2 → ctftime_api-0.1.4}/PKG-INFO +23 -13
- {ctftime_api-0.1.2 → ctftime_api-0.1.4}/README.md +4 -0
- {ctftime_api-0.1.2 → ctftime_api-0.1.4}/ctftime_api/client.py +8 -5
- {ctftime_api-0.1.2 → ctftime_api-0.1.4}/ctftime_api/models/__init__.py +2 -2
- {ctftime_api-0.1.2 → ctftime_api-0.1.4}/ctftime_api/models/duration.py +0 -1
- {ctftime_api-0.1.2 → ctftime_api-0.1.4}/ctftime_api/models/event.py +1 -1
- {ctftime_api-0.1.2 → ctftime_api-0.1.4}/ctftime_api/models/team.py +0 -1
- {ctftime_api-0.1.2 → ctftime_api-0.1.4}/ctftime_api/models/vote.py +0 -1
- ctftime_api-0.1.4/docs/api/client.md +8 -0
- ctftime_api-0.1.4/docs/api/models/duration.md +8 -0
- ctftime_api-0.1.4/docs/api/models/event.md +8 -0
- ctftime_api-0.1.4/docs/api/models/rating.md +8 -0
- ctftime_api-0.1.4/docs/api/models/team.md +24 -0
- ctftime_api-0.1.4/docs/api/models/vote.md +8 -0
- ctftime_api-0.1.4/docs/assets/fonts/inter/italic.woff2 +0 -0
- ctftime_api-0.1.4/docs/assets/fonts/inter/italic_ext.woff2 +0 -0
- ctftime_api-0.1.4/docs/assets/fonts/inter/normal.woff2 +0 -0
- ctftime_api-0.1.4/docs/assets/fonts/inter/normal_ext.woff2 +0 -0
- ctftime_api-0.1.4/docs/assets/fonts/jetbrains_mono/normal.woff2 +0 -0
- ctftime_api-0.1.4/docs/assets/fonts/jetbrains_mono/normal_ext.woff2 +0 -0
- ctftime_api-0.1.4/docs/index.md +17 -0
- ctftime_api-0.1.4/docs/stylesheets/fonts.css +66 -0
- ctftime_api-0.1.4/examples/test_methods/main.py +52 -0
- ctftime_api-0.1.4/justfile +11 -0
- ctftime_api-0.1.4/mkdocs.yml +146 -0
- {ctftime_api-0.1.2 → ctftime_api-0.1.4}/pyproject.toml +78 -64
- ctftime_api-0.1.4/tests/__init__.py +0 -0
- ctftime_api-0.1.4/tests/test_client.py +254 -0
- ctftime_api-0.1.4/uv.lock +1452 -0
- {ctftime_api-0.1.2 → ctftime_api-0.1.4}/LICENSE +0 -0
- {ctftime_api-0.1.2 → ctftime_api-0.1.4}/ctftime_api/__init__.py +0 -0
- {ctftime_api-0.1.2 → ctftime_api-0.1.4}/ctftime_api/models/rating.py +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: "pip" # See documentation for possible values
|
|
4
|
+
directory: "/" # Location of package manifests
|
|
5
|
+
reviewers:
|
|
6
|
+
- "jotonedev"
|
|
7
|
+
groups:
|
|
8
|
+
dependencies:
|
|
9
|
+
patterns:
|
|
10
|
+
- "*" # Group all updates together
|
|
11
|
+
schedule:
|
|
12
|
+
interval: "weekly" # How often to check for updates
|
|
13
|
+
commit-message:
|
|
14
|
+
prefix: "[poetry] "
|
|
15
|
+
|
|
16
|
+
- package-ecosystem: "github-actions"
|
|
17
|
+
directory: "/"
|
|
18
|
+
reviewers:
|
|
19
|
+
- "jotonedev"
|
|
20
|
+
groups:
|
|
21
|
+
dependencies:
|
|
22
|
+
patterns:
|
|
23
|
+
- "*"
|
|
24
|
+
schedule:
|
|
25
|
+
interval: "weekly"
|
|
26
|
+
commit-message:
|
|
27
|
+
prefix: "[action] "
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: Cleanup caches
|
|
2
|
+
on:
|
|
3
|
+
pull_request:
|
|
4
|
+
types:
|
|
5
|
+
- closed
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
cleanup:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- name: Cleanup
|
|
12
|
+
run: |
|
|
13
|
+
gh extension install actions/gh-actions-cache
|
|
14
|
+
|
|
15
|
+
echo "Fetching list of cache key"
|
|
16
|
+
cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH -L 100 | cut -f 1 )
|
|
17
|
+
|
|
18
|
+
## Setting this to not fail the workflow while deleting cache keys.
|
|
19
|
+
set +e
|
|
20
|
+
echo "Deleting caches..."
|
|
21
|
+
for cacheKey in $cacheKeysForPR
|
|
22
|
+
do
|
|
23
|
+
gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm
|
|
24
|
+
done
|
|
25
|
+
echo "Done"
|
|
26
|
+
env:
|
|
27
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
28
|
+
REPO: ${{ github.repository }}
|
|
29
|
+
BRANCH: refs/pull/${{ github.event.pull_request.number }}/merge
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
name: "CodeQL"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
analyze:
|
|
8
|
+
name: Analyze (${{ matrix.language }})
|
|
9
|
+
runs-on: 'ubuntu-latest'
|
|
10
|
+
permissions:
|
|
11
|
+
# required for all workflows
|
|
12
|
+
security-events: write
|
|
13
|
+
# required to fetch internal or private CodeQL packs
|
|
14
|
+
packages: read
|
|
15
|
+
|
|
16
|
+
strategy:
|
|
17
|
+
fail-fast: false
|
|
18
|
+
matrix:
|
|
19
|
+
include:
|
|
20
|
+
- language: python
|
|
21
|
+
build-mode: none
|
|
22
|
+
steps:
|
|
23
|
+
- name: Checkout repository
|
|
24
|
+
uses: actions/checkout@v4
|
|
25
|
+
|
|
26
|
+
# Initializes the CodeQL tools for scanning.
|
|
27
|
+
- name: Initialize CodeQL
|
|
28
|
+
uses: github/codeql-action/init@v3
|
|
29
|
+
with:
|
|
30
|
+
languages: ${{ matrix.language }}
|
|
31
|
+
build-mode: ${{ matrix.build-mode }}
|
|
32
|
+
queries: security-extended,security-and-quality
|
|
33
|
+
|
|
34
|
+
- name: Perform CodeQL Analysis
|
|
35
|
+
uses: github/codeql-action/analyze@v3
|
|
36
|
+
with:
|
|
37
|
+
category: "/language:${{matrix.language}}"
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
name: Update docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [opened, synchronize, reopened]
|
|
6
|
+
push:
|
|
7
|
+
tags:
|
|
8
|
+
- 'v*.*.*'
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
inputs:
|
|
11
|
+
upload:
|
|
12
|
+
description: 'Update documentation'
|
|
13
|
+
required: false
|
|
14
|
+
type: boolean
|
|
15
|
+
default: false
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
build:
|
|
19
|
+
name: Build the docs
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
|
|
22
|
+
steps:
|
|
23
|
+
- name: Checkout code
|
|
24
|
+
uses: actions/checkout@v4
|
|
25
|
+
|
|
26
|
+
- name: Install uv
|
|
27
|
+
uses: astral-sh/setup-uv@v6
|
|
28
|
+
with:
|
|
29
|
+
enable-cache: true
|
|
30
|
+
cache-dependency-glob: "uv.lock"
|
|
31
|
+
version: "latest"
|
|
32
|
+
python-version: ${{ matrix.python-version }}
|
|
33
|
+
|
|
34
|
+
- name: Install the project
|
|
35
|
+
run: uv sync --group docs
|
|
36
|
+
|
|
37
|
+
- name: Set git credentials
|
|
38
|
+
run: |
|
|
39
|
+
git config --global user.name "${{ github.actor }}"
|
|
40
|
+
git config --global user.email "${{ github.actor }}@users.noreply.github.com"
|
|
41
|
+
|
|
42
|
+
- name: Build the docs
|
|
43
|
+
id: build
|
|
44
|
+
run: uv run mkdocs build
|
|
45
|
+
|
|
46
|
+
- name: Upload docs
|
|
47
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
48
|
+
id: deployment
|
|
49
|
+
uses: actions/upload-pages-artifact@v3
|
|
50
|
+
with:
|
|
51
|
+
path: site/
|
|
52
|
+
|
|
53
|
+
deploy:
|
|
54
|
+
name: Deploy the docs
|
|
55
|
+
runs-on: ubuntu-latest
|
|
56
|
+
needs: build
|
|
57
|
+
if: ${{ (github.event.inputs.upload || github.ref_type == 'tag') }}
|
|
58
|
+
|
|
59
|
+
permissions:
|
|
60
|
+
contents: read
|
|
61
|
+
id-token: write
|
|
62
|
+
pages: write
|
|
63
|
+
|
|
64
|
+
environment:
|
|
65
|
+
name: github-pages
|
|
66
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
67
|
+
|
|
68
|
+
steps:
|
|
69
|
+
- name: Deploy to GitHub Pages
|
|
70
|
+
id: deployment
|
|
71
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
name: Publish release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*.*.*'
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
inputs:
|
|
9
|
+
upload:
|
|
10
|
+
description: 'Upload release to PyPI'
|
|
11
|
+
required: false
|
|
12
|
+
type: boolean
|
|
13
|
+
default: false
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
release-build:
|
|
20
|
+
name: Build the release
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
|
|
23
|
+
permissions:
|
|
24
|
+
contents: read
|
|
25
|
+
id-token: write
|
|
26
|
+
attestations: write
|
|
27
|
+
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout code
|
|
30
|
+
uses: actions/checkout@v4
|
|
31
|
+
|
|
32
|
+
- name: Install uv
|
|
33
|
+
uses: astral-sh/setup-uv@v6
|
|
34
|
+
with:
|
|
35
|
+
enable-cache: true
|
|
36
|
+
cache-dependency-glob: "uv.lock"
|
|
37
|
+
version: "latest"
|
|
38
|
+
|
|
39
|
+
- name: Install the project
|
|
40
|
+
run: uv sync --no-group docs --no-group dev
|
|
41
|
+
|
|
42
|
+
- name: Package project
|
|
43
|
+
run: uv build -o dist/
|
|
44
|
+
|
|
45
|
+
- name: Sign build artifacts
|
|
46
|
+
uses: actions/attest-build-provenance@v2
|
|
47
|
+
with:
|
|
48
|
+
subject-path: "dist/*"
|
|
49
|
+
|
|
50
|
+
- name: Upload build artifacts
|
|
51
|
+
uses: actions/upload-artifact@v4
|
|
52
|
+
with:
|
|
53
|
+
name: release-dists
|
|
54
|
+
retention-days: 1
|
|
55
|
+
path: "dist/"
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
pypi-publish:
|
|
59
|
+
name: Publish to PyPI
|
|
60
|
+
runs-on: ubuntu-latest
|
|
61
|
+
needs: release-build
|
|
62
|
+
if: ${{ (github.event.inputs.upload || github.ref_type == 'tag') }}
|
|
63
|
+
|
|
64
|
+
permissions:
|
|
65
|
+
contents: read
|
|
66
|
+
id-token: write
|
|
67
|
+
|
|
68
|
+
environment:
|
|
69
|
+
name: pypi
|
|
70
|
+
|
|
71
|
+
steps:
|
|
72
|
+
- name: Retrieve release distributions
|
|
73
|
+
uses: actions/download-artifact@v4
|
|
74
|
+
with:
|
|
75
|
+
name: release-dists
|
|
76
|
+
path: dist/
|
|
77
|
+
|
|
78
|
+
- name: Publish package distributions to PyPI
|
|
79
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
80
|
+
with:
|
|
81
|
+
attestations: true
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
|
|
2
|
+
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
|
|
3
|
+
|
|
4
|
+
name: Test code
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
push:
|
|
9
|
+
pull_request:
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
test:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
continue-on-error: false
|
|
15
|
+
strategy:
|
|
16
|
+
fail-fast: false
|
|
17
|
+
matrix:
|
|
18
|
+
python-version: [ "3.11", "3.12", "3.13"]
|
|
19
|
+
|
|
20
|
+
permissions:
|
|
21
|
+
pull-requests: write
|
|
22
|
+
contents: read
|
|
23
|
+
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
|
|
27
|
+
- name: Install uv
|
|
28
|
+
uses: astral-sh/setup-uv@v6
|
|
29
|
+
with:
|
|
30
|
+
enable-cache: true
|
|
31
|
+
cache-dependency-glob: "uv.lock"
|
|
32
|
+
version: "latest"
|
|
33
|
+
python-version: ${{ matrix.python-version }}
|
|
34
|
+
|
|
35
|
+
- name: Install the project
|
|
36
|
+
run: uv sync --all-extras --group dev --no-group docs
|
|
37
|
+
|
|
38
|
+
- name: Lint with ruff
|
|
39
|
+
id: lint
|
|
40
|
+
if: matrix.python-version == '3.13'
|
|
41
|
+
run: uv run ruff check -v
|
|
42
|
+
|
|
43
|
+
- name: Check formatting with ruff
|
|
44
|
+
id: check
|
|
45
|
+
if: matrix.python-version == '3.13'
|
|
46
|
+
run: uv run ruff format --check
|
|
47
|
+
|
|
48
|
+
- name: Test code
|
|
49
|
+
id: test
|
|
50
|
+
run: uv run pytest
|
|
51
|
+
|
|
52
|
+
- name: Test code with coverage
|
|
53
|
+
id: coverage
|
|
54
|
+
if: matrix.python-version == '3.13'
|
|
55
|
+
run: uv run coverage run -m pytest && uv run coverage report -m && uv run coverage xml
|
|
56
|
+
continue-on-error: true
|
|
57
|
+
|
|
58
|
+
- name: Upload coverage for pull requests
|
|
59
|
+
if: matrix.python-version == '3.13' && github.event_name == 'pull_request'
|
|
60
|
+
uses: orgoro/coverage@v3.2
|
|
61
|
+
with:
|
|
62
|
+
coverageFile: ./coverage.xml
|
|
63
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
64
|
+
|
|
65
|
+
- name: Check types
|
|
66
|
+
id: typing
|
|
67
|
+
run: uv run mypy -p ctftime_api
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py,cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
cover/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
.pybuilder/
|
|
76
|
+
target/
|
|
77
|
+
|
|
78
|
+
# Jupyter Notebook
|
|
79
|
+
.ipynb_checkpoints
|
|
80
|
+
|
|
81
|
+
# IPython
|
|
82
|
+
profile_default/
|
|
83
|
+
ipython_config.py
|
|
84
|
+
|
|
85
|
+
# pyenv
|
|
86
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
+
# .python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
#Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
|
98
|
+
__pypackages__/
|
|
99
|
+
|
|
100
|
+
# Celery stuff
|
|
101
|
+
celerybeat-schedule
|
|
102
|
+
celerybeat.pid
|
|
103
|
+
|
|
104
|
+
# SageMath parsed files
|
|
105
|
+
*.sage.py
|
|
106
|
+
|
|
107
|
+
# Environments
|
|
108
|
+
.env
|
|
109
|
+
.venv
|
|
110
|
+
env/
|
|
111
|
+
venv/
|
|
112
|
+
ENV/
|
|
113
|
+
env.bak/
|
|
114
|
+
venv.bak/
|
|
115
|
+
|
|
116
|
+
# Spyder project settings
|
|
117
|
+
.spyderproject
|
|
118
|
+
.spyproject
|
|
119
|
+
|
|
120
|
+
# Rope project settings
|
|
121
|
+
.ropeproject
|
|
122
|
+
|
|
123
|
+
# mkdocs documentation
|
|
124
|
+
/site
|
|
125
|
+
|
|
126
|
+
# mypy
|
|
127
|
+
.mypy_cache/
|
|
128
|
+
.dmypy.json
|
|
129
|
+
dmypy.json
|
|
130
|
+
|
|
131
|
+
# Pyre type checker
|
|
132
|
+
.pyre/
|
|
133
|
+
|
|
134
|
+
# pytype static type analyzer
|
|
135
|
+
.pytype/
|
|
136
|
+
|
|
137
|
+
# Cython debug symbols
|
|
138
|
+
cython_debug/
|
|
139
|
+
|
|
140
|
+
# End of https://mrkandreev.name/snippets/gitignore-generator/#Python
|
|
141
|
+
|
|
142
|
+
.idea/
|
|
143
|
+
.vscode/
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: ctftime_api
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.4
|
|
4
4
|
Summary: CTFTime API wrapper
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Author-email: john.toniutti@gmail.com
|
|
8
|
-
|
|
5
|
+
Project-URL: repository, https://github.com/jotonedev/ctftime_api
|
|
6
|
+
Project-URL: documentation, https://jotonedev.github.io/ctftime_api/
|
|
7
|
+
Author-email: John Toniutti <john.toniutti@gmail.com>
|
|
8
|
+
License-Expression: GPL-3.0-or-later
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Keywords: api,ctftime,wrapper
|
|
9
11
|
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Framework :: Pydantic
|
|
10
13
|
Classifier: Intended Audience :: Developers
|
|
11
14
|
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
12
|
-
Classifier: Framework :: Pydantic
|
|
13
15
|
Classifier: Operating System :: OS Independent
|
|
14
16
|
Classifier: Programming Language :: Python :: 3
|
|
15
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -18,12 +20,17 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
18
20
|
Classifier: Topic :: Internet :: WWW/HTTP
|
|
19
21
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
20
22
|
Classifier: Typing :: Typed
|
|
21
|
-
Requires-
|
|
22
|
-
Requires-Dist:
|
|
23
|
-
Requires-Dist:
|
|
24
|
-
Requires-Dist: pydantic-extra-types
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
Requires-Python: >=3.11
|
|
24
|
+
Requires-Dist: httpx<0.29.0,>=0.28.1
|
|
25
|
+
Requires-Dist: pycountry<25.0.0,>=24.6.1
|
|
26
|
+
Requires-Dist: pydantic-extra-types<3.0.0,>=2.10.2
|
|
27
|
+
Requires-Dist: pydantic<3.0.0,>=2.10.6
|
|
28
|
+
Provides-Extra: speed
|
|
29
|
+
Requires-Dist: brotli<2.0.0,>=1.1.0; (platform_python_implementation == 'CPython') and extra == 'speed'
|
|
30
|
+
Requires-Dist: brotlicffi<2.0.0.0,>=1.1.0.0; (platform_python_implementation != 'CPython') and extra == 'speed'
|
|
31
|
+
Requires-Dist: h2<5.0.0,>=4.2.0; extra == 'speed'
|
|
32
|
+
Requires-Dist: uvloop<1.0.0,>=0.21.0; (sys_platform != 'win32') and extra == 'speed'
|
|
33
|
+
Requires-Dist: zstandard<0.24.0,>=0.23.0; extra == 'speed'
|
|
27
34
|
Description-Content-Type: text/markdown
|
|
28
35
|
|
|
29
36
|
# ctftime_api
|
|
@@ -90,3 +97,6 @@ This project is licensed under the GNU General Public License v3 or later (GPLv3
|
|
|
90
97
|
- [Project Documentation Website](https://jotonedev.github.io/ctftime_api)
|
|
91
98
|
- [GitHub Repository](https://github.com/jotonedev/ctftime_api)
|
|
92
99
|
|
|
100
|
+
## License
|
|
101
|
+
|
|
102
|
+
This project is released under the [GPL 3.0 or later](LICENSE) license.
|
|
@@ -61,3 +61,7 @@ This project is licensed under the GNU General Public License v3 or later (GPLv3
|
|
|
61
61
|
|
|
62
62
|
- [Project Documentation Website](https://jotonedev.github.io/ctftime_api)
|
|
63
63
|
- [GitHub Repository](https://github.com/jotonedev/ctftime_api)
|
|
64
|
+
|
|
65
|
+
## License
|
|
66
|
+
|
|
67
|
+
This project is released under the [GPL 3.0 or later](LICENSE) license.
|
|
@@ -1,30 +1,33 @@
|
|
|
1
|
+
import importlib.util
|
|
1
2
|
from datetime import datetime
|
|
2
3
|
from typing import Any
|
|
3
4
|
|
|
4
5
|
import httpx
|
|
5
6
|
from httpx import URL, Timeout
|
|
6
|
-
|
|
7
7
|
from pydantic_extra_types.country import CountryAlpha2
|
|
8
8
|
|
|
9
|
-
from ctftime_api.models.vote import Vote
|
|
10
9
|
from ctftime_api.models.event import Event, EventResult
|
|
11
10
|
from ctftime_api.models.team import TeamRank, Team, TeamComplete
|
|
11
|
+
from ctftime_api.models.vote import Vote
|
|
12
12
|
|
|
13
13
|
__all__ = ["CTFTimeClient"]
|
|
14
14
|
|
|
15
|
+
h2 = importlib.util.find_spec("httpcore.h2")
|
|
16
|
+
|
|
15
17
|
|
|
16
18
|
class CTFTimeClient:
|
|
17
|
-
def __init__(self, client: httpx.AsyncClient | None = None,
|
|
19
|
+
def __init__(self, client: httpx.AsyncClient | None = None, **kwargs):
|
|
18
20
|
"""
|
|
19
21
|
Initialize the CTFTime API client.
|
|
20
22
|
:param client: The httpx.AsyncClient to use. If None, a new client will be created.
|
|
21
|
-
:param args: Args that will be passed to the httpx.AsyncClient constructor.
|
|
22
23
|
:param kwargs: Kwargs that will be passed to the httpx.AsyncClient constructor.
|
|
23
24
|
"""
|
|
24
25
|
if client is not None:
|
|
25
26
|
self._client = client
|
|
26
27
|
else:
|
|
27
|
-
|
|
28
|
+
if h2 is not None:
|
|
29
|
+
kwargs.setdefault("http2", True)
|
|
30
|
+
self._client = httpx.AsyncClient(**kwargs)
|
|
28
31
|
self._base_url = URL("https://ctftime.org/api/v1/")
|
|
29
32
|
|
|
30
33
|
async def _get(self, url: str | URL, **kwargs) -> Any:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
+
from .duration import Duration
|
|
1
2
|
from .event import Event, EventResult
|
|
2
|
-
from .team import Team, TeamComplete, BaseTeam, TeamRank, TeamResult
|
|
3
3
|
from .rating import Rating
|
|
4
|
-
from .
|
|
4
|
+
from .team import Team, TeamComplete, BaseTeam, TeamRank, TeamResult
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Team
|
|
3
|
+
summary: Provides dataclasses for representing a CTF team and its related information.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Provides dataclasses for representing a CTF team and its related information.
|
|
7
|
+
|
|
8
|
+
::: ctftime_api.models.team.BaseTeam
|
|
9
|
+
|
|
10
|
+
::: ctftime_api.models.team.Team
|
|
11
|
+
options:
|
|
12
|
+
show_inheritance_diagram: true
|
|
13
|
+
|
|
14
|
+
::: ctftime_api.models.team.TeamRank
|
|
15
|
+
options:
|
|
16
|
+
show_inheritance_diagram: true
|
|
17
|
+
|
|
18
|
+
::: ctftime_api.models.team.TeamComplete
|
|
19
|
+
options:
|
|
20
|
+
show_inheritance_diagram: true
|
|
21
|
+
|
|
22
|
+
::: ctftime_api.models.team.TeamResult
|
|
23
|
+
options:
|
|
24
|
+
show_inheritance_diagram: true
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|