# euler-site: the content site and the auth service (docs/package-guide.md § 1).# Imports the solver's domain modules (problems, the progress parser, paths, auth policy),# never its shell; nothing here imports the web shell.[build-system]requires=["setuptools>=68"]build-backend="setuptools.build_meta"[project]name="euler-site"dynamic=["version"]description="Project Euler Solver: the content site (public and per-user) and the auth service"authors=[{name="Vikas Munshi",email="vikas.munshi@gmail.com"}]license="MIT"requires-python=">=3.14"# Lockstep (Q5): the pin is rewritten by scripts/version/release.sh with every version.py.dependencies=["euler-solver==4.34.2",# aiohttp is the one framework across the app services; Jinja2 (via aiohttp-jinja2,# autoescape on) renders every page."aiohttp","aiohttp-jinja2","jinja2",# The guides' and blogs' Markdown."markdown-it-py",# The code viewer's highlighting (/code/, euler_site.site.code). Already in every venv# through rich (euler-solver); named here because this package imports it."pygments",# The `.html` save gate: sanitize-and-store-clean (abi3 wheel, no Rust toolchain)."nh3",# Reading the ink of a cached problem diagram (content._image_ink); its absence# degrades to "no plate"."pillow",# Argon2id for the SRP private key x (auth/srp.py). The browser derives x for a sign-in,# so the service needs it only to mint or check a verifier locally (verify_password, tests)."argon2-cffi",][tool.setuptools.dynamic]version={attr="euler_site.version.__version__"}[tool.setuptools.packages.find]where=["."]include=["euler_site*"][tool.setuptools.package-data]euler_site=["templates/*.html",# the auth pages# The start page's summary — tracked, generated by `update-docs` from the README's HOME# slice. It ships because euler-auth renders the start page with no clone to read."content/home-summary.md",# The static tree the edge serves: shipped so the services can hash it into the# templates' asset URLs (euler_site/assets.py) from the very bytes this build installs."content/assets/*","content/vendor/**/*",]"euler_site.site"=["templates/*.html"]