From 0c836bf572dda02e74398b004f21d9f95febe31f Mon Sep 17 00:00:00 2001 From: Corbin Crutchley Date: Sat, 11 Apr 2026 01:48:18 -0700 Subject: [PATCH] chore: add UV workspaces --- TODO.md | 6 ++++ apps/backend/README.md | 0 apps/backend/main.py | 13 +++++++++ apps/backend/pyproject.toml | 24 ++++++++++++++++ pyproject.toml | 19 ++----------- uv.lock | 55 ++++++++++++++++++++++--------------- 6 files changed, 79 insertions(+), 38 deletions(-) create mode 100644 TODO.md create mode 100644 apps/backend/README.md create mode 100644 apps/backend/main.py create mode 100644 apps/backend/pyproject.toml diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..b8eece8 --- /dev/null +++ b/TODO.md @@ -0,0 +1,6 @@ +- [ ] Add Bazel monorepo support +- [ ] Add Sentry +- [ ] Add Vulture dead code analysis +- [ ] Add MyPyC usage +- [ ] Test and validate Python GIL-less +- [ ] Add Autofix CI \ No newline at end of file diff --git a/apps/backend/README.md b/apps/backend/README.md new file mode 100644 index 0000000..e69de29 diff --git a/apps/backend/main.py b/apps/backend/main.py new file mode 100644 index 0000000..c905f8f --- /dev/null +++ b/apps/backend/main.py @@ -0,0 +1,13 @@ +from fastapi import FastAPI + +app = FastAPI() + + +@app.get("/") +def read_root(): + return {"Hello": "World"} + + +@app.get("/items/{item_id}") +def read_item(item_id: int, q: str | None = None): + return {"item_id": item_id, "q": q} \ No newline at end of file diff --git a/apps/backend/pyproject.toml b/apps/backend/pyproject.toml new file mode 100644 index 0000000..6b365ca --- /dev/null +++ b/apps/backend/pyproject.toml @@ -0,0 +1,24 @@ +[project] +name = "backend" +version = "0.0.1" +description = "A backend service for the modern Python enterprise template." +readme = "README.md" +requires-python = ">=3.14" +dependencies = [ + "fastapi[standard]>=0.135.3", +] + +[dependency-groups] +dev = [ + "mypy[mypyc]>=1.19.1", + "pytest>=9.0.3", + "ruff>=0.15.10", + "poethepoet>=0.44.0" +] + +[tool.poe.tasks] +dev = "uv run fastapi dev" +lint = "uv run ruff check ." +typecheck = "uv run mypy ." +test = "uv run pytest tests" +format = "uv run ruff format ." diff --git a/pyproject.toml b/pyproject.toml index a547746..3b8df6c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,21 +4,8 @@ version = "0.0.1" description = "A modern Python template for enterprise applications." readme = "README.md" requires-python = ">=3.14" -dependencies = [ - "fastapi[standard]>=0.135.3", -] -[dependency-groups] -dev = [ - "mypy[mypyc]>=1.19.1", - "poethepoet>=0.44.0", - "pytest>=9.0.3", - "ruff>=0.15.10", +[tool.uv.workspace] +members = [ + "apps/*", ] - -[tool.poe.tasks] -dev = "fastapi dev" -lint = "ruff check ." -typecheck = "mypy ." -test = "pytest tests" -format = "ruff format ." diff --git a/uv.lock b/uv.lock index f2ca832..61fc053 100644 --- a/uv.lock +++ b/uv.lock @@ -2,6 +2,12 @@ version = 1 revision = 3 requires-python = ">=3.14" +[manifest] +members = [ + "backend", + "modern-python-enterprise-template", +] + [[package]] name = "annotated-doc" version = "0.0.4" @@ -32,6 +38,33 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/da/42/e921fccf5015463e32a3cf6ee7f980a6ed0f395ceeaa45060b61d86486c2/anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708", size = 114353, upload-time = "2026-03-24T12:59:08.246Z" }, ] +[[package]] +name = "backend" +version = "0.0.1" +source = { virtual = "apps/backend" } +dependencies = [ + { name = "fastapi", extra = ["standard"] }, +] + +[package.dev-dependencies] +dev = [ + { name = "mypy", extra = ["mypyc"] }, + { name = "poethepoet" }, + { name = "pytest" }, + { name = "ruff" }, +] + +[package.metadata] +requires-dist = [{ name = "fastapi", extras = ["standard"], specifier = ">=0.135.3" }] + +[package.metadata.requires-dev] +dev = [ + { name = "mypy", extras = ["mypyc"], specifier = ">=1.19.1" }, + { name = "poethepoet", specifier = ">=0.44.0" }, + { name = "pytest", specifier = ">=9.0.3" }, + { name = "ruff", specifier = ">=0.15.10" }, +] + [[package]] name = "certifi" version = "2026.2.25" @@ -362,28 +395,6 @@ wheels = [ name = "modern-python-enterprise-template" version = "0.0.1" source = { virtual = "." } -dependencies = [ - { name = "fastapi", extra = ["standard"] }, -] - -[package.dev-dependencies] -dev = [ - { name = "mypy", extra = ["mypyc"] }, - { name = "poethepoet" }, - { name = "pytest" }, - { name = "ruff" }, -] - -[package.metadata] -requires-dist = [{ name = "fastapi", extras = ["standard"], specifier = ">=0.135.3" }] - -[package.metadata.requires-dev] -dev = [ - { name = "mypy", extras = ["mypyc"], specifier = ">=1.19.1" }, - { name = "poethepoet", specifier = ">=0.44.0" }, - { name = "pytest", specifier = ">=9.0.3" }, - { name = "ruff", specifier = ">=0.15.10" }, -] [[package]] name = "mypy" -- 2.51.2