Skip to content

Commit e58ba08

Browse files
authored
Prepare release v0.1.2 (#4)
* fix: `max_items` warning trigger (#2) * feat: add leagues and mms resources * refactor: make modules public and update doc style - Remove underscore prefixes from Python module names - Convert documentation style from Google Docs to ReST format * refactor: improve code structure and enhance doc * refactor: remove StrEnum dependency * refactor: improve type annotations * fix: enforce `max_items` limit in `unix` (#3) * refactor: major code reorganization * chore: housekeeping * chore: pre-commit hooks, publish workflow * docs: polish readme * docs: improve readme * docs: improve readme * docs: improve readme * chore: polish implementation
1 parent bc051c7 commit e58ba08

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+7472
-7134
lines changed

.editorconfig

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
root = true
2+
3+
[*]
4+
charset = utf-8
5+
end_of_line = lf
6+
indent_size = 4
7+
indent_style = space
8+
insert_final_newline = true
9+
trim_trailing_whitespace = true
10+
11+
[*.py]
12+
max_line_length = 88
13+
14+
[*.{yml,yaml}]
15+
indent_size = 2
16+
17+
[Makefile]
18+
indent_style = tab

.github/workflows/publish.yml

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,25 @@
1-
name: Python package
2-
3-
on:
4-
push:
5-
tags:
6-
- "v*.*.*"
7-
8-
jobs:
9-
build:
10-
runs-on: ubuntu-latest
11-
steps:
12-
- uses: actions/checkout@v3
13-
- name: Build and publish to pypi
14-
uses: JRubics/poetry-publish@v2.1
15-
with:
16-
pypi_token: ${{ secrets.PYPI_TOKEN }}
1+
name: Publish to PyPI
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*.*.*"
7+
8+
jobs:
9+
publish:
10+
runs-on: ubuntu-latest
11+
environment:
12+
name: release
13+
permissions:
14+
id-token: write
15+
steps:
16+
- uses: actions/checkout@v4
17+
18+
- name: Install uv
19+
uses: astral-sh/setup-uv@v6
20+
21+
- name: Build package
22+
run: uv build
23+
24+
- name: Publish to PyPI
25+
run: uv publish dist/*

.gitignore

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ cover/
5858
# Sphinx documentation
5959
docs/_build/
6060
docs/api/
61+
# TODO
62+
docs/
63+
output_dir
6164

6265
# PyBuilder
6366
.pybuilder/
@@ -126,5 +129,4 @@ cython_debug/
126129

127130
# Personal
128131
/assets
129-
_.py
130-
_async.py
132+
__*.py

.mypy.ini

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[mypy]
2+
exclude = (?x)(
3+
^docs/
4+
| ^examples/
5+
| ^tests/
6+
)
7+
local_partial_types = true
8+
no_implicit_reexport = true
9+
python_version = 3.8
10+
strict = true
11+
warn_unreachable = true
12+
13+
[mypy-decouple.*]
14+
follow_untyped_imports = True

.pre-commit-config.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
repos:
2+
- repo: https://github.com/astral-sh/ruff-pre-commit
3+
rev: v0.11.11
4+
hooks:
5+
- id: ruff-check
6+
- id: ruff-format
7+
8+
- repo: local
9+
hooks:
10+
- id: mypy
11+
name: mypy
12+
entry: mypy --config-file=.mypy.ini src --pretty
13+
language: system
14+
pass_filenames: false
15+
16+
- id: pytest-check
17+
name: pytest-check
18+
entry: pytest tests
19+
language: system
20+
pass_filenames: false
21+
always_run: true

.ruff.toml

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
line-length = 88
2+
preview = true
3+
target-version = "py38"
4+
5+
[format]
6+
docstring-code-format = true
7+
docstring-code-line-length = 100
8+
line-ending = "auto"
9+
10+
[lint]
11+
select = ["ALL"]
12+
ignore = [
13+
"ANN401",
14+
"B024",
15+
"COM812",
16+
"CPY001",
17+
"D",
18+
"DOC",
19+
"EM101",
20+
"EM102",
21+
"E501",
22+
"ERA001",
23+
"FBT001",
24+
"FBT003",
25+
"FIX002",
26+
"PLR0904",
27+
"PLR0913",
28+
"PLW3201",
29+
"PT001",
30+
"RUF003",
31+
"SLF001",
32+
"S101",
33+
"TD",
34+
"TRY003",
35+
]
36+
37+
[lint.flake8-bugbear]
38+
extend-immutable-calls = [
39+
"faceit.http.client.env",
40+
"faceit.resources.pagination.MaxPages",
41+
"faceit.resources.pagination.pages",
42+
]
43+
44+
[lint.flake8-import-conventions]
45+
banned-from = [
46+
"asyncio",
47+
"httpx",
48+
"json",
49+
"logging",
50+
"math",
51+
"os",
52+
"re",
53+
"reprlib",
54+
"typing",
55+
]
56+
57+
[lint.pep8-naming]
58+
classmethod-decorators = ["field_validator"]
59+
60+
[lint.per-file-ignores]
61+
"__init__.py" = ["F401", "PLC041"]
62+
"faceit.py" = ["S106"]
63+
"types.py" = ["F401", "ICN003", "PLC041", "PYI018"]
64+
"scripts/*" = ["T201"]
65+
"docs/*" = ["ALL"]
66+
"examples/*" = ["ALL"]
67+
"tests/*" = ["ALL"]
68+
69+
[lint.pyupgrade]
70+
keep-runtime-typing = true

CODE_OF_CONDUCT.md

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
# Contributor Covenant Code of Conduct
2+
3+
## Our Pledge
4+
5+
We as members, contributors, and leaders pledge to make participation in our
6+
community a harassment-free experience for everyone, regardless of age, body
7+
size, visible or invisible disability, ethnicity, sex characteristics, gender
8+
identity and expression, level of experience, education, socio-economic status,
9+
nationality, personal appearance, race, caste, color, religion, or sexual
10+
identity and orientation.
11+
12+
We pledge to act and interact in ways that contribute to an open, welcoming,
13+
diverse, inclusive, and healthy community.
14+
15+
## Our Standards
16+
17+
Examples of behavior that contributes to a positive environment for our
18+
community include:
19+
20+
- Demonstrating empathy and kindness toward other people
21+
- Being respectful of differing opinions, viewpoints, and experiences
22+
- Giving and gracefully accepting constructive feedback
23+
- Accepting responsibility and apologizing to those affected by our mistakes,
24+
and learning from the experience
25+
- Focusing on what is best not just for us as individuals, but for the overall
26+
community
27+
28+
Examples of unacceptable behavior include:
29+
30+
- The use of sexualized language or imagery, and sexual attention or advances of
31+
any kind
32+
- Trolling, insulting or derogatory comments, and personal or political attacks
33+
- Public or private harassment
34+
- Publishing others' private information, such as a physical or email address,
35+
without their explicit permission
36+
- Other conduct which could reasonably be considered inappropriate in a
37+
professional setting
38+
39+
## Enforcement Responsibilities
40+
41+
Community leaders are responsible for clarifying and enforcing our standards of
42+
acceptable behavior and will take appropriate and fair corrective action in
43+
response to any behavior that they deem inappropriate, threatening, offensive,
44+
or harmful.
45+
46+
Community leaders have the right and responsibility to remove, edit, or reject
47+
comments, commits, code, wiki edits, issues, and other contributions that are
48+
not aligned to this Code of Conduct, and will communicate reasons for moderation
49+
decisions when appropriate.
50+
51+
## Scope
52+
53+
This Code of Conduct applies within all community spaces, and also applies when
54+
an individual is officially representing the community in public spaces.
55+
Examples of representing our community include using an official email address,
56+
posting via an official social media account, or acting as an appointed
57+
representative at an online or offline event.
58+
59+
## Enforcement
60+
61+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
62+
reported to the community leaders responsible for enforcement at
63+
102151350+zombyacoff@users.noreply.github.com.
64+
All complaints will be reviewed and investigated promptly and fairly.
65+
66+
All community leaders are obligated to respect the privacy and security of the
67+
reporter of any incident.
68+
69+
## Enforcement Guidelines
70+
71+
Community leaders will follow these Community Impact Guidelines in determining
72+
the consequences for any action they deem in violation of this Code of Conduct:
73+
74+
### 1. Correction
75+
76+
**Community Impact**: Use of inappropriate language or other behavior deemed
77+
unprofessional or unwelcome in the community.
78+
79+
**Consequence**: A private, written warning from community leaders, providing
80+
clarity around the nature of the violation and an explanation of why the
81+
behavior was inappropriate. A public apology may be requested.
82+
83+
### 2. Warning
84+
85+
**Community Impact**: A violation through a single incident or series of
86+
actions.
87+
88+
**Consequence**: A warning with consequences for continued behavior. No
89+
interaction with the people involved, including unsolicited interaction with
90+
those enforcing the Code of Conduct, for a specified period of time. This
91+
includes avoiding interactions in community spaces as well as external channels
92+
like social media. Violating these terms may lead to a temporary or permanent
93+
ban.
94+
95+
### 3. Temporary Ban
96+
97+
**Community Impact**: A serious violation of community standards, including
98+
sustained inappropriate behavior.
99+
100+
**Consequence**: A temporary ban from any sort of interaction or public
101+
communication with the community for a specified period of time. No public or
102+
private interaction with the people involved, including unsolicited interaction
103+
with those enforcing the Code of Conduct, is allowed during this period.
104+
Violating these terms may lead to a permanent ban.
105+
106+
### 4. Permanent Ban
107+
108+
**Community Impact**: Demonstrating a pattern of violation of community
109+
standards, including sustained inappropriate behavior, harassment of an
110+
individual, or aggression toward or disparagement of classes of individuals.
111+
112+
**Consequence**: A permanent ban from any sort of public interaction within the
113+
community.
114+
115+
## Attribution
116+
117+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118+
version 2.1, available at
119+
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
120+
121+
Community Impact Guidelines were inspired by
122+
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
123+
124+
For answers to common questions about this code of conduct, see the FAQ at
125+
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
126+
[https://www.contributor-covenant.org/translations][translations].
127+
128+
[homepage]: https://www.contributor-covenant.org
129+
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
130+
[Mozilla CoC]: https://github.com/mozilla/diversity
131+
[FAQ]: https://www.contributor-covenant.org/faq
132+
[translations]: https://www.contributor-covenant.org/translations

CONTRIBUTING.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Contributing to faceit-python
2+
3+
Thank you for your interest in improving **faceit-python**!
4+
We welcome contributions of all kinds – bug fixes, documentation, new features, and more.
5+
6+
## Code Style & Quality
7+
8+
- **Consistency:** Please follow the existing code style and conventions throughout the codebase.
9+
- **Linting:** Use [ruff](https://github.com/astral-sh/ruff) for linting.
10+
- **Type Checking:** Use [mypy](https://mypy-lang.org/) for static type checking.
11+
- **Testing:** Tests are written with [pytest](https://docs.pytest.org/). High test coverage is encouraged; please add or update tests where appropriate.
12+
- **Dependencies:** Managed with [uv](https://github.com/astral-sh/uv). Always work inside the uv environment and use uv for installing/updating dependencies.
13+
- **Pre-commit Hooks:** All commits are checked using [pre-commit](https://pre-commit.com/) hooks.
14+
15+
> [!IMPORTANT]
16+
> Before starting work, always run:
17+
>
18+
> ```
19+
> make setup
20+
> ```
21+
>
22+
> This will create the virtual environment, install all dependencies, and set up pre-commit hooks.
23+
>
24+
> **No Make? (e.g., Windows):**
25+
> Run these commands manually:
26+
>
27+
> ```
28+
> uv venv --python 3.8.0
29+
> uv sync --all-extras
30+
> pre-commit install
31+
> ```
32+
33+
## Commit Messages
34+
35+
- **Clarity:** Write clear and descriptive commit messages that explain the purpose and context of your changes.
36+
- **Conventional Commits:** Follow the [Conventional Commits](https://www.conventionalcommits.org/) standard. Examples:
37+
- `feat: add leagues endpoint`
38+
- `fix: correct typo in player model`
39+
- `docs: update README with usage example`
40+
- **Atomicity:** Each commit should represent a logical, self-contained change.
41+
42+
## Areas Where Help Is Needed
43+
44+
- **Pydantic Models:** Help is especially appreciated in creating and refining Pydantic models for API responses. Reference the [official FACEIT Data API docs](https://docs.faceit.com/docs/data-api/data).
45+
- **Endpoint Coverage:** Contributions to support currently unsupported FACEIT API endpoints are welcome.
46+
47+
## Contribution Workflow
48+
49+
1. **Fork** the repository and create your branch from `main`.
50+
2. **Write** clear, focused code and commit messages.
51+
3. **Test** your changes locally.
52+
4. **Lint and check types** before submitting.
53+
5. **Open a Pull Request** with a clear description of your changes and the motivation behind them.
54+
55+
## Community Standards
56+
57+
- Please be respectful and considerate in all interactions.
58+
- By participating, you agree to abide by our [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
59+
60+
Thank you for helping make **faceit-python** better!
61+
We appreciate your contributions and look forward to collaborating with you.

0 commit comments

Comments
 (0)