diff --git a/Dockerfile b/Dockerfile index 065e3ba..59a1fe4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,10 +13,7 @@ RUN pip install --no-cache-dir uv COPY . . # Install Python dependencies using uv sync -RUN uv sync --frozen --no-dev - -# Ensure OAuth proxy disk backend dependencies are present in the image. -RUN uv pip install --python .venv/bin/python "py-key-value-aio[disk]>=0.3.0" +RUN uv sync --frozen --no-dev --extra disk # Create non-root user for security RUN useradd --create-home --shell /bin/bash app \ diff --git a/README.md b/README.md index cdf325b..32a12a8 100644 --- a/README.md +++ b/README.md @@ -1307,7 +1307,7 @@ export WORKSPACE_MCP_OAUTH_PROXY_VALKEY_HOST=redis.example.com export WORKSPACE_MCP_OAUTH_PROXY_VALKEY_PORT=6379 ``` -> Disk support requires `py-key-value-aio[disk]` when installing from source. +> Disk support requires `workspace-mcp[disk]` (or `py-key-value-aio[disk]`) when installing from source. > The official Docker image includes the `disk` extra by default. > Valkey support is optional. Install `workspace-mcp[valkey]` (or `py-key-value-aio[valkey]`) only if you enable the Valkey backend. > Windows: building `valkey-glide` from source requires MSVC C++ build tools with C11 support. If you see `aws-lc-sys` C11 errors, set `CFLAGS=/std:c11`. diff --git a/pyproject.toml b/pyproject.toml index 11865b2..eb240d2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,6 +58,9 @@ Changelog = "https://github.com/taylorwilsdon/google_workspace_mcp/releases" workspace-mcp = "main:main" [project.optional-dependencies] +disk = [ + "py-key-value-aio[disk]>=0.3.0", +] valkey = [ "py-key-value-aio[valkey]>=0.3.0", ] @@ -80,6 +83,9 @@ dev = [ ] [dependency-groups] +disk = [ + "py-key-value-aio[disk]>=0.3.0", +] valkey = [ "py-key-value-aio[valkey]>=0.3.0", ] diff --git a/uv.lock b/uv.lock index dc24b38..4b69dec 100644 --- a/uv.lock +++ b/uv.lock @@ -404,6 +404,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1c/7c/996760c30f1302704af57c66ff2d723f7d656d0d0b93563b5528a51484bb/cyclopts-4.5.1-py3-none-any.whl", hash = "sha256:0642c93601e554ca6b7b9abd81093847ea4448b2616280f2a0952416574e8c7a", size = 199807, upload-time = "2026-01-25T15:23:55.219Z" }, ] +[[package]] +name = "diskcache" +version = "5.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/21/1c1ffc1a039ddcc459db43cc108658f32c57d271d7289a2794e401d0fdb6/diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc", size = 67916 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/27/4570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9/diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19", size = 45550 }, +] + [[package]] name = "defusedxml" version = "0.7.1" @@ -950,6 +959,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7d/eb/b6260b31b1a96386c0a880edebe26f89669098acea8e0318bff6adb378fd/pathable-0.4.4-py3-none-any.whl", hash = "sha256:5ae9e94793b6ef5a4cbe0a7ce9dbbefc1eec38df253763fd0aeeacf2762dbbc2", size = 9592, upload-time = "2025-01-10T18:43:11.88Z" }, ] +[[package]] +name = "pathvalidate" +version = "3.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/2a/52a8da6fe965dea6192eb716b357558e103aea0a1e9a8352ad575a8406ca/pathvalidate-3.3.1.tar.gz", hash = "sha256:b18c07212bfead624345bb8e1d6141cdcf15a39736994ea0b94035ad2b1ba177", size = 63262 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/70/875f4a23bfc4731703a5835487d0d2fb999031bd415e7d17c0ae615c18b7/pathvalidate-3.3.1-py3-none-any.whl", hash = "sha256:5263baab691f8e1af96092fa5137ee17df5bdfbd6cff1fcac4d6ef4bc2e1735f", size = 24305 }, +] + [[package]] name = "platformdirs" version = "4.5.1" @@ -1009,6 +1027,10 @@ wheels = [ ] [package.optional-dependencies] +disk = [ + { name = "diskcache" }, + { name = "pathvalidate" }, +] filetree = [ { name = "aiofile" }, { name = "anyio" }, @@ -2078,6 +2100,9 @@ dev = [ { name = "tomlkit" }, { name = "twine" }, ] +disk = [ + { name = "py-key-value-aio", extra = ["disk"] }, +] release = [ { name = "tomlkit" }, { name = "twine" }, @@ -2100,6 +2125,9 @@ dev = [ { name = "tomlkit" }, { name = "twine" }, ] +disk = [ + { name = "py-key-value-aio", extra = ["disk"] }, +] release = [ { name = "tomlkit" }, { name = "twine" }, @@ -2124,6 +2152,7 @@ requires-dist = [ { name = "google-auth-oauthlib", specifier = ">=1.2.2" }, { name = "httpx", specifier = ">=0.28.1" }, { name = "py-key-value-aio", specifier = ">=0.3.0" }, + { name = "py-key-value-aio", extras = ["disk"], marker = "extra == 'disk'", specifier = ">=0.3.0" }, { name = "py-key-value-aio", extras = ["valkey"], marker = "extra == 'valkey'", specifier = ">=0.3.0" }, { name = "pyjwt", specifier = ">=2.10.1" }, { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.3.0" }, @@ -2140,7 +2169,7 @@ requires-dist = [ { name = "twine", marker = "extra == 'dev'", specifier = ">=5.0.0" }, { name = "twine", marker = "extra == 'release'", specifier = ">=5.0.0" }, ] -provides-extras = ["valkey", "test", "release", "dev"] +provides-extras = ["disk", "valkey", "test", "release", "dev"] [package.metadata.requires-dev] dev = [ @@ -2151,6 +2180,7 @@ dev = [ { name = "tomlkit", specifier = ">=0.13.3" }, { name = "twine", specifier = ">=5.0.0" }, ] +disk = [{ name = "py-key-value-aio", extras = ["disk"], specifier = ">=0.3.0" }] release = [ { name = "tomlkit", specifier = ">=0.13.3" }, { name = "twine", specifier = ">=5.0.0" },