[project] name = "random-access" version = "0.0.1" description = "A FastAPI app with secure authentication, Redis caching, and Airtable integration" readme = "README.md" license = { file = "LICENSE" } authors = [{ name = "Micha R. Albert", email = "info@micha.zone" }] maintainers = [{ name = "Micha R. Albert", email = "info@micha.zone" }] keywords = ["fastapi", "api", "authentication", "redis", "airtable", "async"] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Framework :: FastAPI", "Topic :: Internet :: WWW/HTTP :: HTTP Servers", "Topic :: Software Development :: Libraries :: Application Frameworks", ] dependencies = [ "fastapi~=0.115.12", "uvicorn[standard]~=0.34.2", "click~=8.2.1", "argon2-cffi~=23.1.0", "tortoise-orm[accel]~=0.25.0", "slack-bolt~=1.23.0", "python-dotenv==1.1.0", "aiohttp~=3.12.11", "pyairtable~=3.1.1", "python-jose[cryptography]~=3.5.0", "valkey[libvalkey]~=6.1.0", "slowapi~=0.1.9", "aiocache[redis]~=0.12.3", "pydantic-settings~=2.10.1" ] requires-python = ">=3.12" [project.urls] Homepage = "https://github.com/hackclub/random-access" Repository = "https://github.com/hackclub/random-access" Documentation = "https://github.com/hackclub/random-access#readme" Issues = "https://github.com/hackclub/random-access/issues" [project.optional-dependencies] dev = [ "pytest>=7.0", "pytest-asyncio>=0.21.0", "httpx>=0.24.0", "ruff>=0.1.0", "mypy>=1.5.0", "black>=23.0.0", "isort>=5.12.0", ] test = [ "pytest>=7.0", "pytest-asyncio>=0.21.0", "httpx>=0.24.0", "coverage[toml]>=7.0", ] docs = [ "mkdocs>=1.5.0", "mkdocs-material>=9.0.0", ] [project.scripts] random-access-server = "random_access.cli:cli" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.metadata] allow-direct-references = true [tool.hatch.build.targets.sdist] include = [ "src/random_access", "README.md", "LICENSE", ] exclude = [ "*.db*", "test_*.py", "__pycache__", "*.pyc", ] [tool.hatch.build.targets.wheel] packages = ["src/random_access"] # Development tool configurations [tool.ruff] target-version = "py312" 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 black "B008", # do not perform function calls in argument defaults ] [tool.ruff.per-file-ignores] "__init__.py" = ["F401"] [tool.black] target-version = ['py312'] line-length = 88 [tool.isort] profile = "black" multi_line_output = 3 [tool.mypy] python_version = "3.12" check_untyped_defs = true disallow_untyped_defs = true disallow_incomplete_defs = true warn_redundant_casts = true warn_unused_ignores = true strict_optional = true [tool.pytest.ini_options] testpaths = ["tests"] python_files = ["test_*.py", "*_test.py"] python_classes = ["Test*"] python_functions = ["test_*"] addopts = "-v --tb=short" asyncio_mode = "auto" [tool.coverage.run] source = ["src"] omit = ["*/tests/*", "*/test_*.py"] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "raise AssertionError", "raise NotImplementedError", ]