From e85df0ef14a4b916ff1947df9397afaf56516d7b Mon Sep 17 00:00:00 2001 From: Anuraag Agrawal Date: Tue, 17 Mar 2026 15:12:04 +0900 Subject: [PATCH 1/3] Publish API docs to GitHub pages Signed-off-by: Anuraag Agrawal --- .github/workflows/docs.yaml | 49 +++++ docs/api.md | 9 + docs/img/favicon.png | Bin 0 -> 30792 bytes docs/img/logo.svg | 1 + docs/index.md | 6 + pyproject.toml | 2 + src/connectrpc/_response_metadata.py | 3 +- uv.lock | 270 ++++++++++++++++++++++++++- zensical.toml | 44 +++++ 9 files changed, 380 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/docs.yaml create mode 100644 docs/api.md create mode 100644 docs/img/favicon.png create mode 100644 docs/img/logo.svg create mode 100644 docs/index.md create mode 100644 zensical.toml diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml new file mode 100644 index 0000000..4b32aed --- /dev/null +++ b/.github/workflows/docs.yaml @@ -0,0 +1,49 @@ +name: Documentation +on: + push: + branches: + - main + paths: + - "docs/**" + - "src/**" + - zensical.toml + - ".github/workflows/docs.yaml" + pull_request: + paths: + - "docs/**" + - "src/**" + - zensical.toml + - ".github/workflows/docs.yaml" + +permissions: + contents: read + pages: write + id-token: write + +jobs: + build: + environment: + name: ${{ github.event_name != 'pull_request' && 'github-pages' || null }} + url: ${{ steps.deployment.outputs.page_url }} + + runs-on: ubuntu-24.04 + + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + + - uses: astral-sh/setup-uv@5a095e7a2014a4212f075830d4f7277575a9d098 # v7.3.1 + + - run: uv run --group docs --no-dev zensical build --clean + + - uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0 + if: github.event_name != 'pull_request' + with: + path: site + + - uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5 + if: github.event_name != 'pull_request' + id: deployment diff --git a/docs/api.md b/docs/api.md new file mode 100644 index 0000000..7a63bf4 --- /dev/null +++ b/docs/api.md @@ -0,0 +1,9 @@ +# API Reference + +::: connectrpc.client +::: connectrpc.server +::: connectrpc.code +::: connectrpc.errors +::: connectrpc.interceptor +::: connectrpc.method +::: connectrpc.request diff --git a/docs/img/favicon.png b/docs/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..50f11edd38cb75753c4c700b2c22192715d36773 GIT binary patch literal 30792 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 Ks}w6)g!~`2<6#>B literal 0 HcmV?d00001 diff --git a/docs/img/logo.svg b/docs/img/logo.svg new file mode 100644 index 0000000..4dd0964 --- /dev/null +++ b/docs/img/logo.svg @@ -0,0 +1 @@ + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..ea7809a --- /dev/null +++ b/docs/index.md @@ -0,0 +1,6 @@ +# ConnectRPC + +Welcome to ConnectRPC! + +View our [main documentation](https://connectrpc.com/docs/python/getting-started) +or the generated [API reference](./api.md). diff --git a/pyproject.toml b/pyproject.toml index 33ff670..29fed77 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -63,6 +63,8 @@ dev = [ "pytest-timeout", ] +docs = ["zensical==0.0.27", "mkdocstrings-python==2.0.3"] + [build-system] requires = ["uv_build>=0.10.0,<0.11.0"] build-backend = "uv_build" diff --git a/src/connectrpc/_response_metadata.py b/src/connectrpc/_response_metadata.py index 41dff59..056afdd 100644 --- a/src/connectrpc/_response_metadata.py +++ b/src/connectrpc/_response_metadata.py @@ -64,12 +64,13 @@ class ResponseMetadata: for the invocation made within the context. Example: - + ```python with ResponseMetadata() as resp_data: resp = client.MakeHat(Size(inches=10)) do_something_with_response_payload(resp) check_response_headers(resp_data.headers()) check_response_trailers(resp_data.trailers()) + ``` """ _headers: Headers | None = None diff --git a/uv.lock b/uv.lock index 41222c9..5ed6c3f 100644 --- a/uv.lock +++ b/uv.lock @@ -375,6 +375,10 @@ dev = [ { name = "uvicorn" }, { name = "zstandard" }, ] +docs = [ + { name = "mkdocstrings-python" }, + { name = "zensical" }, +] [package.metadata] requires-dist = [ @@ -405,6 +409,10 @@ dev = [ { name = "uvicorn", specifier = "==0.41.0" }, { name = "zstandard", specifier = "==0.25.0" }, ] +docs = [ + { name = "mkdocstrings-python", specifier = "==2.0.3" }, + { name = "zensical", specifier = "==0.0.27" }, +] [[package]] name = "connect-python-example" @@ -648,6 +656,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/01/34/6171ab34715ed210bcd6c2b38839cc792993cff4fe2493f50bc92b0086a0/daphne-4.2.1-py3-none-any.whl", hash = "sha256:881e96b387b95b35ad85acd855f229d7f5b79073d6649089c8a33f661885e055", size = 29015, upload-time = "2025-07-02T12:57:03.793Z" }, ] +[[package]] +name = "deepmerge" +version = "2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a8/3a/b0ba594708f1ad0bc735884b3ad854d3ca3bdc1d741e56e40bbda6263499/deepmerge-2.0.tar.gz", hash = "sha256:5c3d86081fbebd04dd5de03626a0607b809a98fb6ccba5770b62466fe940ff20", size = 19890, upload-time = "2024-08-30T05:31:50.308Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/82/e5d2c1c67d19841e9edc74954c827444ae826978499bde3dfc1d007c8c11/deepmerge-2.0-py3-none-any.whl", hash = "sha256:6de9ce507115cff0bed95ff0ce9ecc31088ef50cbdf09bc90a09349a318b3d00", size = 13475, upload-time = "2024-08-30T05:31:48.659Z" }, +] + [[package]] name = "envoy-server" version = "1.37.0" @@ -664,7 +681,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ @@ -697,6 +714,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl", hash = "sha256:f4bcbefc124291925f1a26446da31a5178f9483862233b23c0c96a20701f670c", size = 103424, upload-time = "2026-02-19T05:00:56.027Z" }, ] +[[package]] +name = "ghp-import" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" }, +] + [[package]] name = "granian" version = "2.7.2" @@ -786,6 +815,14 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ab/a8/d9ba7a0d05303f57279ca8b17364945d5090ed90b32b92df219129039f50/granian-2.7.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:001bab0862857d3f029eb2819e88754e746547f4cd8cc28ae229090fc929fbaf", size = 4158219, upload-time = "2026-02-24T23:04:21.072Z" }, ] +[[package]] +name = "griffelib" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/51/c936033e16d12b627ea334aaaaf42229c37620d0f15593456ab69ab48161/griffelib-2.0.0-py3-none-any.whl", hash = "sha256:01284878c966508b6d6f1dbff9b6fa607bc062d8261c5c7253cb285b06422a7f", size = 142004, upload-time = "2026-02-09T19:09:40.561Z" }, +] + [[package]] name = "grpcio" version = "1.78.0" @@ -1068,6 +1105,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8c/02/b629164f99b5224c1f82b8d9f7301dfdf11444bcb51a63a079807813554d/just_bin-1.46.0-py3-none-manylinux2014_x86_64.musllinux_1_1_x86_64.whl", hash = "sha256:a28581e6fdde54d3385a3b294a83b3b40c719d98bf4937dbe4922e6707b4bb51", size = 1936156, upload-time = "2026-01-06T00:53:43.934Z" }, ] +[[package]] +name = "markdown" +version = "3.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" }, +] + [[package]] name = "markupsafe" version = "3.0.3" @@ -1153,6 +1199,99 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, ] +[[package]] +name = "mergedeep" +version = "1.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" }, +] + +[[package]] +name = "mkdocs" +version = "1.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "ghp-import" }, + { name = "jinja2" }, + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mergedeep" }, + { name = "mkdocs-get-deps" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "pyyaml" }, + { name = "pyyaml-env-tag" }, + { name = "watchdog" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" }, +] + +[[package]] +name = "mkdocs-autorefs" +version = "1.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mkdocs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/c0/f641843de3f612a6b48253f39244165acff36657a91cc903633d456ae1ac/mkdocs_autorefs-1.4.4.tar.gz", hash = "sha256:d54a284f27a7346b9c38f1f852177940c222da508e66edc816a0fa55fc6da197", size = 56588, upload-time = "2026-02-10T15:23:55.105Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl", hash = "sha256:834ef5408d827071ad1bc69e0f39704fa34c7fc05bc8e1c72b227dfdc5c76089", size = 25530, upload-time = "2026-02-10T15:23:53.817Z" }, +] + +[[package]] +name = "mkdocs-get-deps" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mergedeep" }, + { name = "platformdirs" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ce/25/b3cccb187655b9393572bde9b09261d267c3bf2f2cdabe347673be5976a6/mkdocs_get_deps-0.2.2.tar.gz", hash = "sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1", size = 11047, upload-time = "2026-03-10T02:46:33.632Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650", size = 9555, upload-time = "2026-03-10T02:46:32.256Z" }, +] + +[[package]] +name = "mkdocstrings" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jinja2" }, + { name = "markdown" }, + { name = "markupsafe" }, + { name = "mkdocs" }, + { name = "mkdocs-autorefs" }, + { name = "pymdown-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/62/0dfc5719514115bf1781f44b1d7f2a0923fcc01e9c5d7990e48a05c9ae5d/mkdocstrings-1.0.3.tar.gz", hash = "sha256:ab670f55040722b49bb45865b2e93b824450fb4aef638b00d7acb493a9020434", size = 100946, upload-time = "2026-02-07T14:31:40.973Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/41/1cf02e3df279d2dd846a1bf235a928254eba9006dd22b4a14caa71aed0f7/mkdocstrings-1.0.3-py3-none-any.whl", hash = "sha256:0d66d18430c2201dc7fe85134277382baaa15e6b30979f3f3bdbabd6dbdb6046", size = 35523, upload-time = "2026-02-07T14:31:39.27Z" }, +] + +[[package]] +name = "mkdocstrings-python" +version = "2.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "griffelib" }, + { name = "mkdocs-autorefs" }, + { name = "mkdocstrings" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/29/33/c225eaf898634bdda489a6766fc35d1683c640bffe0e0acd10646b13536d/mkdocstrings_python-2.0.3.tar.gz", hash = "sha256:c518632751cc869439b31c9d3177678ad2bfa5c21b79b863956ad68fc92c13b8", size = 199083, upload-time = "2026-02-20T10:38:36.368Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/28/79f0f8de97cce916d5ae88a7bee1ad724855e83e6019c0b4d5b3fabc80f3/mkdocstrings_python-2.0.3-py3-none-any.whl", hash = "sha256:0b83513478bdfd803ff05aa43e9b1fca9dd22bcd9471f09ca6257f009bc5ee12", size = 104779, upload-time = "2026-02-20T10:38:34.517Z" }, +] + [[package]] name = "msgpack" version = "1.1.2" @@ -1343,6 +1482,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" }, ] +[[package]] +name = "pathspec" +version = "1.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/36/e27608899f9b8d4dff0617b2d9ab17ca5608956ca44461ac14ac48b44015/pathspec-1.0.4.tar.gz", hash = "sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645", size = 131200, upload-time = "2026-01-27T03:59:46.938Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", size = 55206, upload-time = "2026-01-27T03:59:45.137Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.9.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/56/8d4c30c8a1d07013911a8fdbd8f89440ef9f08d07a1b50ab8ca8be5a20f9/platformdirs-4.9.4.tar.gz", hash = "sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934", size = 28737, upload-time = "2026-03-05T18:34:13.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl", hash = "sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868", size = 21216, upload-time = "2026-03-05T18:34:12.172Z" }, +] + [[package]] name = "pluggy" version = "1.6.0" @@ -1421,6 +1578,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, ] +[[package]] +name = "pymdown-extensions" +version = "10.21" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ba/63/06673d1eb6d8f83c0ea1f677d770e12565fb516928b4109c9e2055656a9e/pymdown_extensions-10.21.tar.gz", hash = "sha256:39f4a020f40773f6b2ff31d2cd2546c2c04d0a6498c31d9c688d2be07e1767d5", size = 853363, upload-time = "2026-02-15T20:44:06.748Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/2c/5b079febdc65e1c3fb2729bf958d18b45be7113828528e8a0b5850dd819a/pymdown_extensions-10.21-py3-none-any.whl", hash = "sha256:91b879f9f864d49794c2d9534372b10150e6141096c3908a455e45ca72ad9d3f", size = 268877, upload-time = "2026-02-15T20:44:05.464Z" }, +] + [[package]] name = "pyopenssl" version = "26.0.0" @@ -1563,6 +1733,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fa/b6/3127540ecdf1464a00e5a01ee60a1b09175f6913f0644ac748494d9c4b21/pytest_timeout-2.4.0-py3-none-any.whl", hash = "sha256:c42667e5cdadb151aeb5b26d114aff6bdf5a907f176a007a30b940d3d865b5c2", size = 14382, upload-time = "2025-05-05T19:44:33.502Z" }, ] +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + [[package]] name = "pyvoy" version = "0.3.0" @@ -1665,6 +1847,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, ] +[[package]] +name = "pyyaml-env-tag" +version = "1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" }, +] + [[package]] name = "ruff" version = "0.15.6" @@ -1714,6 +1908,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223, upload-time = "2026-03-09T12:47:15.026Z" }, ] +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + [[package]] name = "starlette" version = "0.52.1" @@ -1732,8 +1935,8 @@ name = "taskgroup" version = "0.2.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "exceptiongroup" }, - { name = "typing-extensions" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f0/8d/e218e0160cc1b692e6e0e5ba34e8865dbb171efeb5fc9a704544b3020605/taskgroup-0.2.2.tar.gz", hash = "sha256:078483ac3e78f2e3f973e2edbf6941374fbea81b9c5d0a96f51d297717f4752d", size = 11504, upload-time = "2025-01-03T09:24:13.761Z" } wheels = [ @@ -2008,6 +2211,38 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e4/16/c1fd27e9549f3c4baf1dc9c20c456cd2f822dbf8de9f463824b0c0357e06/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6cde23eeda1a25c75b2e07d39970f3374105d5eafbaab2a4482be82f272d5a5e", size = 4296730, upload-time = "2025-10-16T22:17:00.744Z" }, ] +[[package]] +name = "watchdog" +version = "6.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/56/90994d789c61df619bfc5ce2ecdabd5eeff564e1eb47512bd01b5e019569/watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26", size = 96390, upload-time = "2024-11-01T14:06:24.793Z" }, + { url = "https://files.pythonhosted.org/packages/55/46/9a67ee697342ddf3c6daa97e3a587a56d6c4052f881ed926a849fcf7371c/watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112", size = 88389, upload-time = "2024-11-01T14:06:27.112Z" }, + { url = "https://files.pythonhosted.org/packages/44/65/91b0985747c52064d8701e1075eb96f8c40a79df889e59a399453adfb882/watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3", size = 89020, upload-time = "2024-11-01T14:06:29.876Z" }, + { url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393, upload-time = "2024-11-01T14:06:31.756Z" }, + { url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392, upload-time = "2024-11-01T14:06:32.99Z" }, + { url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019, upload-time = "2024-11-01T14:06:34.963Z" }, + { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload-time = "2024-11-01T14:06:37.745Z" }, + { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload-time = "2024-11-01T14:06:39.748Z" }, + { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload-time = "2024-11-01T14:06:41.009Z" }, + { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload-time = "2024-11-01T14:06:42.952Z" }, + { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload-time = "2024-11-01T14:06:45.084Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload-time = "2024-11-01T14:06:47.324Z" }, + { url = "https://files.pythonhosted.org/packages/30/ad/d17b5d42e28a8b91f8ed01cb949da092827afb9995d4559fd448d0472763/watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881", size = 87902, upload-time = "2024-11-01T14:06:53.119Z" }, + { url = "https://files.pythonhosted.org/packages/5c/ca/c3649991d140ff6ab67bfc85ab42b165ead119c9e12211e08089d763ece5/watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11", size = 88380, upload-time = "2024-11-01T14:06:55.19Z" }, + { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" }, + { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" }, + { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" }, + { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" }, + { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" }, + { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" }, + { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" }, + { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" }, +] + [[package]] name = "werkzeug" version = "3.1.6" @@ -2127,6 +2362,35 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a4/f5/10b68b7b1544245097b2a1b8238f66f2fc6dcaeb24ba5d917f52bd2eed4f/wsproto-1.3.2-py3-none-any.whl", hash = "sha256:61eea322cdf56e8cc904bd3ad7573359a242ba65688716b0710a5eb12beab584", size = 24405, upload-time = "2025-11-20T18:18:00.454Z" }, ] +[[package]] +name = "zensical" +version = "0.0.27" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "deepmerge" }, + { name = "markdown" }, + { name = "pygments" }, + { name = "pymdown-extensions" }, + { name = "pyyaml" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8f/83/969152d927b522a0fed1f20b1730575d86b920ce51530b669d9fad4537de/zensical-0.0.27.tar.gz", hash = "sha256:6d8d74aba4a9f9505e6ba1c43d4c828ba4ff7bb1ff9b005e5174c5b92cf23419", size = 3841776, upload-time = "2026-03-13T17:56:14.494Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/fe/0335f1a521eb6c0ab96028bf67148390eb1d5c742c23e6a4b0f8381508bd/zensical-0.0.27-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:d51ebf4b038f3eea99fd337119b99d92ad92bbe674372d5262e6dbbabbe4e9b5", size = 12262017, upload-time = "2026-03-13T17:55:36.403Z" }, + { url = "https://files.pythonhosted.org/packages/02/cb/ac24334fc7959b49496c97cb9d2bed82a8db8b84eafaf68189048e7fe69a/zensical-0.0.27-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:a627cd4599cf2c5a5a5205f0510667227d1fe4579b6f7445adba2d84bab9fbc8", size = 12147361, upload-time = "2026-03-13T17:55:39.736Z" }, + { url = "https://files.pythonhosted.org/packages/a2/0f/31c981f61006fdaf0460d15bde1248a045178d67307bad61a4588414855d/zensical-0.0.27-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99cbc493022f8749504ef10c71772d360b705b4e2fd1511421393157d07bdccf", size = 12505771, upload-time = "2026-03-13T17:55:42.993Z" }, + { url = "https://files.pythonhosted.org/packages/30/1e/f6842c94ec89e5e9184f407dbbab2a497b444b28d4fb5b8df631894be896/zensical-0.0.27-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ecc20a85e8a23ad9ab809b2f268111321be7b2e214021b3b00f138936a87a434", size = 12455689, upload-time = "2026-03-13T17:55:46.055Z" }, + { url = "https://files.pythonhosted.org/packages/4c/ad/866c3336381cca7528e792469958fbe2e65b9206a2657bef3dd8ed4ac88b/zensical-0.0.27-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da11e0f0861dbd7d3b5e6fe1e3a53b361b2181c53f3abe9fb4cdf2ed0cea47bf", size = 12791263, upload-time = "2026-03-13T17:55:49.193Z" }, + { url = "https://files.pythonhosted.org/packages/e5/df/fca5ed6bebdb61aa656dfa65cce4b4d03324a79c75857728230872fbdf7c/zensical-0.0.27-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e11d220181477040a4b22bf2b8678d5b0c878e7aae194fad4133561cb976d69", size = 12549796, upload-time = "2026-03-13T17:55:52.55Z" }, + { url = "https://files.pythonhosted.org/packages/4a/e2/43398b5ec64ed78204a5a5929a3990769fc0f6a3094a30395882bda1399a/zensical-0.0.27-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:06b9e308aec8c5db1cd623e2e98e1b25c3f5cab6b25fcc9bac1e16c0c2b93837", size = 12683568, upload-time = "2026-03-13T17:55:56.151Z" }, + { url = "https://files.pythonhosted.org/packages/b3/3c/5c98f9964c7e30735aacd22a389dacec12bcc5bc8162c58e76b76d20db6e/zensical-0.0.27-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:682085155126965b091cb9f915cd2e4297383ac500122fd4b632cf4511733eb2", size = 12725214, upload-time = "2026-03-13T17:55:59.286Z" }, + { url = "https://files.pythonhosted.org/packages/50/0f/ebaa159cac6d64b53bf7134420c2b43399acc7096cb79795be4fb10768fc/zensical-0.0.27-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:b367c285157c8e1099ae9e2b36564e07d3124bf891e96194a093bc836f3058d2", size = 12860416, upload-time = "2026-03-13T17:56:02.456Z" }, + { url = "https://files.pythonhosted.org/packages/88/06/d82bfccbf5a1f43256dbc4d1984e398035a65f84f7c1e48b69ba15ea7281/zensical-0.0.27-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:847c881209e65e1db1291c59a9db77966ac50f7c66bf9a733c3c7832144dbfca", size = 12819533, upload-time = "2026-03-13T17:56:05.487Z" }, + { url = "https://files.pythonhosted.org/packages/4d/1f/d25e421d91f063a9404c59dd032f65a67c7c700e9f5f40436ab98e533482/zensical-0.0.27-cp310-abi3-win32.whl", hash = "sha256:f31ec13c700794be3f9c0b7d90f09a7d23575a3a27c464994b9bb441a22d880b", size = 11862822, upload-time = "2026-03-13T17:56:08.933Z" }, + { url = "https://files.pythonhosted.org/packages/5a/b5/5b86d126fcc42b96c5dbecde5074d6ea766a1a884e3b25b3524843c5e6a5/zensical-0.0.27-cp310-abi3-win_amd64.whl", hash = "sha256:9d3b1fca7ea99a7b2a8db272dd7f7839587c4ebf4f56b84ff01c97b3893ec9f8", size = 12059658, upload-time = "2026-03-13T17:56:11.859Z" }, +] + [[package]] name = "zipp" version = "3.23.0" diff --git a/zensical.toml b/zensical.toml new file mode 100644 index 0000000..51a60ee --- /dev/null +++ b/zensical.toml @@ -0,0 +1,44 @@ +[project] +site_name = "connectrpc" +site_url = "https://connectrpc.github.io/connect-python/" +site_description = "The Python implementation of Connect: Protobuf RPC that works" +site_author = "Connect Authors" +copyright = "© The Connect Authors" +repo_url = "https://github.com/connectrpc/connect-python" +nav = ["api.md"] + +[project.theme] +favicon = "img/favicon.png" + +[project.theme.icon] +repo = "fontawesome/brands/github" + +[project.markdown_extensions.attr_list] +[project.markdown_extensions.md_in_html] +[project.markdown_extensions.pymdownx.blocks.caption] +[project.markdown_extensions.pymdownx.highlight] +anchor_linenums = true +line_spans = "__span" +pygments_lang_class = true +[project.markdown_extensions.pymdownx.inlinehilite] +[project.markdown_extensions.pymdownx.snippets] +[project.markdown_extensions.pymdownx.superfences] +[project.markdown_extensions.pymdownx.tabbed] +alternate_style = true + +[project.plugins.mkdocstrings.handlers.python] +inventories = ["https://docs.python.org/3/objects.inv"] +paths = ["."] + +[project.plugins.mkdocstrings.handlers.python.options] +docstring_options = { ignore_init_summary = true } +docstring_style = "google" +inherited_members = false +members_order = "source" +merge_init_into_class = true +relative_crossrefs = true +scoped_crossrefs = true +signature_crossrefs = true +show_root_heading = true +show_signature = false +show_source = false From c3bd59d3231e560982813ee9244bd1f5ab940618 Mon Sep 17 00:00:00 2001 From: Anuraag Agrawal Date: Tue, 17 Mar 2026 15:16:27 +0900 Subject: [PATCH 2/3] Include compression Signed-off-by: Anuraag Agrawal --- docs/api.md | 10 +++++++++- src/connectrpc/compression/__init__.py | 4 ++-- src/connectrpc/compression/gzip.py | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/api.md b/docs/api.md index 7a63bf4..eeb2327 100644 --- a/docs/api.md +++ b/docs/api.md @@ -2,8 +2,16 @@ ::: connectrpc.client ::: connectrpc.server + ::: connectrpc.code ::: connectrpc.errors -::: connectrpc.interceptor + ::: connectrpc.method ::: connectrpc.request + +::: connectrpc.interceptor + +::: connectrpc.compression +::: connectrpc.compression.brotli +::: connectrpc.compression.gzip +::: connectrpc.compression.zstd diff --git a/src/connectrpc/compression/__init__.py b/src/connectrpc/compression/__init__.py index 4d72eb9..5a2e6cf 100644 --- a/src/connectrpc/compression/__init__.py +++ b/src/connectrpc/compression/__init__.py @@ -13,8 +13,8 @@ class Compression(Protocol): used by specifying implementations of this protocol. We provide standard implementations for - - br (connectrpc.compression.brotli.BrotliCompression) - requires the brotli dependency - - zstd (connectrpc.compression.zstd.ZstdCompression) - requires the zstandard dependency + - br (connectrpc.compression.brotli.BrotliCompression) - requires the `brotli` dependency + - zstd (connectrpc.compression.zstd.ZstdCompression) - requires the `zstandard` dependency """ def name(self) -> str: diff --git a/src/connectrpc/compression/gzip.py b/src/connectrpc/compression/gzip.py index af060f7..ddd031e 100644 --- a/src/connectrpc/compression/gzip.py +++ b/src/connectrpc/compression/gzip.py @@ -10,6 +10,7 @@ class GzipCompression(Compression): def __init__(self, level: int = 6) -> None: """Creates a new GzipCompression. + Args: level: Compression level to use. """ From 86ce5c03f044bc63aebb8308c4b66c9283c6088d Mon Sep 17 00:00:00 2001 From: Anuraag Agrawal Date: Tue, 17 Mar 2026 21:41:00 +0900 Subject: [PATCH 3/3] Finish Signed-off-by: Anuraag Agrawal --- docs/img/logo.svg | 1 - justfile | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) delete mode 100644 docs/img/logo.svg diff --git a/docs/img/logo.svg b/docs/img/logo.svg deleted file mode 100644 index 4dd0964..0000000 --- a/docs/img/logo.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/justfile b/justfile index cc501a1..2b7a566 100644 --- a/justfile +++ b/justfile @@ -65,3 +65,6 @@ checkgenerate: generate bump semver: uv version --bump={{ semver }} uv version --bump={{ semver }} --directory protoc-gen-connect-python + +serve-docs: + uv run --group docs zensical serve