Create Python tools in favour of shell scripts

Python is likely to be installed when working on Python code,
which should make it more portable and consistent.
This commit is contained in:
Lonami Exo 2023-09-03 11:00:48 +02:00
parent 9c888b83da
commit e4d88e061d
6 changed files with 74 additions and 7 deletions

1
.gitignore vendored
View File

@ -5,6 +5,7 @@ __pycache__/
.pytest_cache/
.mypy_cache/
dist/
dist-doc/
build/
**/tl/__init__.py
**/tl/layer.py

View File

@ -2,12 +2,19 @@ Code generation:
```sh
pip install -e generator/
python -m telethon_generator.codegen api.tl client/src/telethon/_impl/tl
python -m telethon_generator.codegen mtproto.tl client/src/telethon/_impl/tl/mtproto
python tools/codegen.py
```
Formatting, type-checking and testing:
```sh
pip install isort black mypy pytest pytest-asyncio
python tools/check.py
```
./check.sh
Documentation:
```sh
pip install sphinx_rtd_theme
python tools/docgen.py
```

View File

@ -1,4 +0,0 @@
isort . --profile black --gitignore
black . --extend-exclude "tl/(abcs|functions|types)/\w+.py"
mypy --strict .
pytest . -m "not net"

22
tools/check.py Normal file
View File

@ -0,0 +1,22 @@
"""
Sort imports, format code, type-check and run offline tests.
"""
import subprocess
import sys
def run(*args: str) -> int:
return subprocess.run((sys.executable, "-m", *args)).returncode
def main() -> None:
exit(
run("isort", ".", "--profile", "black", "--gitignore")
or run("black", ".", "--extend-exclude", r"tl/(abcs|functions|types)/\w+.py")
or run("mypy", "--strict", ".")
or run("pytest", ".", "-m", "not net")
)
if __name__ == "__main__":
main()

24
tools/codegen.py Normal file
View File

@ -0,0 +1,24 @@
"""
Run `telethon_generator.codegen` on both `api.tl` and `mtproto.tl` to output
corresponding Python code in the default directories under the `client/`.
"""
import subprocess
import sys
GENERATOR = "telethon_generator.codegen"
ROOT = "client/src/telethon/_impl"
def run(*args: str) -> int:
return subprocess.run((sys.executable, "-m", *args)).returncode
def main() -> None:
exit(
run(GENERATOR, "api.tl", f"{ROOT}/tl")
or run(GENERATOR, "mtproto.tl", f"{ROOT}/tl/mtproto")
)
if __name__ == "__main__":
main()

17
tools/docgen.py Normal file
View File

@ -0,0 +1,17 @@
"""
Run `sphinx-build` to create HTML documentation and detect errors.
"""
import subprocess
import sys
def run(*args: str) -> int:
return subprocess.run((sys.executable, "-m", *args)).returncode
def main() -> None:
exit(run("sphinx", "-nW", "client/doc", "dist-doc"))
if __name__ == "__main__":
main()