[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "emmett" version = "2.8.2" description = "The web framework for inventors" readme = "README.md" license = "BSD-3-Clause" requires-python = ">=3.10" authors = [ { name = "Giovanni Barillari", email = "g@baro.dev" } ] keywords = ["web", "asyncio"] classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: AsyncIO", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Python Modules" ] dependencies = [ "click>=6.0", "emmett-core[granian]~=1.4.1", "emmett-pydal==17.3.3", "pendulum~=3.0", "pyyaml~=6.0", "renoir~=1.6", "severus~=1.1", ] [project.optional-dependencies] orjson = ['orjson~=3.10'] rapidjson = ['python-rapidjson~=1.20'] rloop = ['rloop~=0.1; sys_platform != "win32"'] uvloop = ['uvloop>=0.18.0; sys_platform != "win32" and platform_python_implementation == "CPython"'] [project.urls] Homepage = 'https://emmett.sh' Documentation = 'https://emmett.sh/docs' Funding = 'https://github.com/sponsors/gi0baro' Source = 'https://github.com/emmett-framework/emmett' Issues = 'https://github.com/emmett-framework/emmett/issues' [project.scripts] emmett = "emmett.cli:main" [tool.hatch.build.targets.sdist] include = [ '/README.md', '/CHANGES.md', '/LICENSE', '/docs', '/emmett', '/tests', ] [tool.ruff] line-length = 120 [tool.ruff.format] quote-style = 'double' [tool.ruff.lint] extend-select = [ # E and F are enabled by default 'B', # flake8-bugbear 'C4', # flake8-comprehensions 'C90', # mccabe 'I', # isort 'N', # pep8-naming 'Q', # flake8-quotes 'RUF100', # ruff (unused noqa) 'S', # flake8-bandit 'W', # pycodestyle ] extend-ignore = [ 'B006', # mutable function args are fine 'B008', # function calls in args defaults are fine 'B009', # getattr with constants is fine 'B034', # re.split won't confuse us 'B904', # rising without from is fine 'E731', # assigning lambdas is fine 'F403', # import * is fine 'N801', # leave to us class naming 'N802', # leave to us method naming 'N806', # leave to us var naming 'N811', # leave to us var naming 'N814', # leave to us var naming 'N818', # leave to us exceptions naming 'S101', # assert is fine 'S104', # leave to us security 'S105', # leave to us security 'S106', # leave to us security 'S107', # leave to us security 'S110', # pass on exceptions is fine 'S301', # leave to us security 'S324', # leave to us security ] mccabe = { max-complexity = 44 } [tool.ruff.lint.isort] combine-as-imports = true lines-after-imports = 2 known-first-party = ['emmett', 'tests'] [tool.ruff.lint.per-file-ignores] 'emmett/__init__.py' = ['F401'] 'emmett/http.py' = ['F401'] 'emmett/orm/__init__.py' = ['F401'] 'emmett/orm/engines/__init__.py' = ['F401'] 'emmett/orm/migrations/__init__.py' = ['F401'] 'emmett/orm/migrations/revisions.py' = ['B018'] 'emmett/tools/__init__.py' = ['F401'] 'emmett/tools/auth/__init__.py' = ['F401'] 'emmett/validators/__init__.py' = ['F401'] 'tests/**' = ['B017', 'B018', 'E711', 'E712', 'E741', 'F841', 'S110', 'S501'] [tool.pytest.ini_options] asyncio_mode = 'auto' [tool.uv] dev-dependencies = [ "ipaddress>=1.0", "pytest~=9.0", "pytest-asyncio~=1.3", "psycopg[binary]~=3.3", "ruff~=0.11", ]