[project] name = "telegram-archiver" version = "1.0.0" description = "Archive Telegram channels to Markdown bundles with media" readme = "README.md" requires-python = ">=3.11" license = {text = "MIT"} authors = [ {name = "Evgeny Storozhenko"} ] keywords = ["telegram", "archive", "markdown", "hugo", "telethon"] classifiers = [ "Development Status :: 3 - Alpha", "Environment :: Console", "Environment :: Web Environment", "Framework :: FastAPI", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Communications :: Chat", "Topic :: Internet :: WWW/HTTP", "Topic :: Multimedia", ] dependencies = [ "fastapi>=0.109.0", "uvicorn[standard]>=0.27.0", "click>=8.1.7", "telethon>=1.34.0", "pydantic>=2.5.3", "pydantic-settings>=2.1.0", "python-dotenv>=1.0.0", "pyyaml>=6.0.1", "opentelemetry-api>=1.22.0", "opentelemetry-sdk>=1.22.0", "opentelemetry-instrumentation-fastapi>=0.43b0", "httpx>=0.26.0", "aiofiles>=23.2.1", ] [project.optional-dependencies] dev = [ "pytest>=8.0.0", "pytest-asyncio>=0.23.0", "pytest-cov>=4.1.0", "ruff>=0.1.0", "mypy>=1.8.0", "pre-commit>=3.6.0", ] [project.scripts] telegram-archiver = "app.main:cli_main" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["app"] [tool.ruff] target-version = "py311" line-length = 88 select = [ "E", # pycodestyle errors "W", # pycodestyle warnings "F", # pyflakes "I", # isort "B", # flake8-bugbear "C4", # flake8-comprehensions "UP", # pyupgrade ] ignore = [ "E501", # line too long (handled by formatter) "B008", # do not perform function calls in argument defaults ] [tool.mypy] python_version = "3.11" warn_return_any = true warn_unused_configs = true disallow_untyped_defs = false disallow_incomplete_defs = false check_untyped_defs = true no_implicit_optional = true warn_redundant_casts = true warn_unused_ignores = true [[tool.mypy.overrides]] module = "telethon.*" ignore_missing_imports = true [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] addopts = "-v --tb=short"