Repository navigation
Bump fsspec from 2026.1.0 to 2026.6.0 - #111
Closed
dependabot[bot] wants to merge 1 commit into
Closed
dependabot[bot] wants to merge 1 commit into
dependabot[bot] wants to merge 1 commit into
Conversation
Bumps [fsspec](https://github.com/fsspec/filesystem_spec) from 2026.1.0 to 2026.6.0. - [Commits](fsspec/filesystem_spec@2026.1.0...2026.6.0) --- updated-dependencies: - dependency-name: fsspec dependency-version: 2026.6.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
dependabot
Bot
force-pushed
the
dependabot/uv/fsspec-2026.6.0
branch
from
October 22, 2026 15:46
b28c12b to
4582cfb
Compare
jhamon
added a commit
that referenced
this pull request
Oct 22, 2026
…ns (#114) ## Intent Put together fixes for all of the open dependency PRs on https://github.com/pinecone-io/pinecone-datasets/pulls. Open Dependabot PRs at intake (2026-10-22): #112 multidict 6.7.1->6.9.1; #111 fsspec 2026.1.0->2026.6.0; #110 aiohttp 3.14.3->3.14.4; #109 minor-and-patch group of 10 (fsspec 2026.9.0, gcsfs 2026.10.1, s3fs 2026.9.0, pydantic 2.14.1, tenacity 9.2.1, ipykernel 7.3.0, ruff 0.17.0, pytest-cov 7.1.0, tuna 0.5.15, tqdm 4.70.1); #108 urllib3 2.7.0->2.8.0; #107 tornado 6.5.7->6.5.9; #106 oauthlib 3.3.1->4.0.0 (major); #104 mypy 1.19.1->2.3.0 (major); GitHub Actions majors #102 setup-python 5->7, #101 upload-artifact 4->7, #100 deploy-pages 1->5, #99 upload-pages-artifact 1->5, #98 checkout 4->7. Several of these PRs have failing test runs (e.g. #106 and #104: "Run tests" fail on 3.11-3.13; #106 also fails "Dependency audit"). ## What Changed - Updated `uv.lock` to the versions from the open Dependabot PRs: aiohttp 3.14.4, multidict 6.9.1, fsspec/s3fs 2026.9.0, gcsfs 2026.10.1, urllib3 2.8.0, tornado 6.5.9, oauthlib 4.0.0, mypy 2.3.0, pydantic 2.14.1, tenacity 9.2.1, ipykernel 7.3.0, ruff 0.17.0, pytest-cov 7.1.0, tuna 0.5.15, tqdm 4.70.1, plus the transitive updates they pull in (e.g. `nest-asyncio` is replaced by `nest-asyncio2`, and `ast-serialize` is added). `pyproject.toml` is unchanged. - Bumped GitHub Actions in `ci.yml`, `cd.yml`, and `docs.yml`: `actions/checkout` v4→v7, `actions/setup-python` v5→v7, `actions/upload-artifact` v4→v7, `actions/upload-pages-artifact` v1→v5, `actions/deploy-pages` v1→v5. - Set `FETCH_RAW_TOKEN_EXPIRY=false` in the two GCS raw-token tests in `tests/unit/test_fs_errors.py`, because the new gcsfs checks raw tokens against Google's tokeninfo endpoint. Applied ruff 0.17 formatting to the Python snippets in `README.md` and `MAINTAINERS.md`. ## Why the Dependabot PRs failed CI - **"Run tests" (3.11–3.13) fails only on the Dependabot branches, not on main.** The failing step is `Run pytest (integration tests)`: GCS answers 401 "Anonymous caller does not have storage.objects.create access" because Dependabot-triggered runs receive no Actions secrets, so `GCS_SERVICE_ACCOUNT_CREDS_BASE64` is empty. Unit tests passed on those runs, and main plus non-Dependabot PRs (e.g. #113) pass the integration tests. It is a missing-secret problem, not a code incompatibility. - **"Dependency audit"** failed on those branches because their lock still carried vulnerable urllib3 2.7.0 and tornado 6.5.7; this PR bumps both and pip-audit is clean. - Two real incompatibilities only appear with the full set applied, and are fixed here: ruff 0.17 formats Python blocks in Markdown (the format check also failed on #109 alone), and gcsfs 2026.10.1 validates raw string tokens against Google's tokeninfo endpoint at construction, which broke two unit tests that pass fake tokens. ## Superseded Dependabot PRs (close after merge) - #98 - #99 - #100 - #101 - #102 - #104 - #106 - #107 - #108 - #109 - #110 - #111 - #112 ## Risk Assessment ✅ Low: The change only bumps the dev lockfile and GitHub Actions versions, and it covers every Dependabot PR listed in the intent (all 13 version targets are in uv.lock or the workflows). pyproject constraints and runtime code are unchanged. The only code edits are ruff-0.17 markdown reformatting and test env isolation for gcsfs's new raw-token validation. ## Testing Each Python version got an isolated locked environment, and the CI gates the failing PRs tripped all passed: unit tests on 3.11, 3.12 and 3.13, mypy 2.3.0 and pip-audit. Running the base commit's test file against gcsfs 2026.10.1 fails the two raw-token tests with "Provided token is either not valid, or expired"; the updated tests pass. The real library completed a local catalog save/load round trip and downloaded a live public dataset (6952 docs, dim 1536). A pdoc docs build succeeded. For the bumped GitHub Actions, the new major tags exist and still accept the inputs the workflows use; the workflows themselves can only run in GitHub CI, and no workflow was run here. One mistake to report: the first public-dataset run wrote about 64MB of parquet cache to ~/.pinecone-datasets, outside the worktree. That directory did not exist before the run and was deleted; the re-run used an isolated cache dir. All other temp venvs and caches were also removed, and the worktree is clean. Nothing is UI-facing, so no screenshots were needed. - Live validation: ✅ go - 8 of 9 scenarios driven live against the product | Scenario | Result | Live | Evidence | | --- | --- | --- | --- | | Developer syncs the updated lock on Python 3.11/3.12/3.13 and gets every Dependabot target version | ✅ pass | live | unit-py3.11.txt / unit-py3.12.txt / unit-py3.13.txt (version line) | | CI 'Run tests' unit suite passes on 3.11, 3.12 and 3.13 with the new deps (previously failing on #104/#106) | ✅ pass | live | unit-py3.*.txt: 160 passed, 3 skipped on each version | | Adversarial: unmodified raw-token tests break under gcsfs 2026.10.1, and the updated tests pass | ✅ pass | live | fs-token-regression.txt: base file 2 failed (ValueError: Provided token is either not valid, or expired), target file 2 passed | | Lint gate: mypy 2.3.0 (major bump #104) type-checks the repo cleanly | ✅ pass | live | mypy.txt | | Dependency audit gate (failing on #106) reports no known vulnerabilities in the locked deps | ✅ pass | live | pip-audit.txt | | End user saves a dataset to a local catalog, lists it, reloads it and iterates documents | ✅ pass | live | e2e-py3.11.txt, e2e-py3.13.txt: catalog list ['e2e-ds'], 5 docs / 1 query round-tripped | | End user lists the public catalog and downloads a public dataset over gcsfs/fsspec/aiohttp | ✅ pass | live | e2e-py3.11.txt, e2e-py3.13.txt: 32 public datasets; langchain-python-docs-text-embedding-ada-002 loaded, 6952 docs, dim 1536 | | Docs workflow pdoc build produces HTML with the new deps | ✅ pass | live | pdoc-dataset.html | | Bumped GitHub Actions majors (checkout@v7, setup-python@v7, upload-artifact@v7, upload-pages-artifact@v5, deploy-pages@v5) run successfully in CI/docs/release workflows | ⏸️ untested | no | GitHub-hosted workflows run only on GitHub's runners, and only after a push, which this phase must not do. No local runner (e.g. act) is on PATH. The Pages deploy and the PyPI release also need reposi… | <details> <summary>Evidence: Unit tests py3.11 (versions + result)</summary> ```text 3.11.15 fsspec 2026.9.0 gcsfs 2026.10.1 s3fs 2026.9.0 pydantic 2.14.1 aiohttp 3.14.4 multidict 6.9.1 urllib3 2.8.0 oauthlib 4.0.0 tornado 6.5.9 mypy 2.3.0 -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html 160 passed, 3 skipped, 7 warnings in 53.66s ``` </details> <details> <summary>Evidence: Unit tests py3.12</summary> ```text 3.12.13 fsspec 2026.9.0 gcsfs 2026.10.1 s3fs 2026.9.0 pydantic 2.14.1 aiohttp 3.14.4 multidict 6.9.1 urllib3 2.8.0 oauthlib 4.0.0 tornado 6.5.9 mypy 2.3.0 -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html 160 passed, 3 skipped, 7 warnings in 63.08s (0:01:03) ``` </details> <details> <summary>Evidence: Unit tests py3.13</summary> ```text 3.13.14 fsspec 2026.9.0 gcsfs 2026.10.1 s3fs 2026.9.0 pydantic 2.14.1 aiohttp 3.14.4 multidict 6.9.1 urllib3 2.8.0 oauthlib 4.0.0 tornado 6.5.9 mypy 2.3.0 -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html 160 passed, 3 skipped, 7 warnings in 56.71s ``` </details> <details> <summary>Evidence: gcsfs raw-token test: base file fails, target file passes</summary> ```text ## base-commit test file vs new locked deps (gcsfs 2026.10.1): > raise ValueError("Provided token is either not valid, or expired.") E ValueError: Provided token is either not valid, or expired. /var/folders/ty/3v2j9df158g6mhwgbrkwy3m00000gp/T/tmp.yK8sgkYBCE/venv3.12/lib/python3.12/site-packages/gcsfs/credentials.py:59: ValueError FAILED ../../../../../../var/folders/ty/3v2j9df158g6mhwgbrkwy3m00000gp/T/tmp.yK8sgkYBCE/test_fs_errors_base.py::TestFSErrorPaths::test_get_cloud_fs_with_invalid_token FAILED ../../../../../../var/folders/ty/3v2j9df158g6mhwgbrkwy3m00000gp/T/tmp.yK8sgkYBCE/test_fs_errors_base.py::TestFSErrorPaths::test_get_cloud_fs_gcs_with_custom_token 2 failed, 40 deselected in 1.56s ## target-commit test file: .. [100%] 2 passed, 40 deselected in 0.97s ``` </details> <details> <summary>Evidence: mypy 2.3.0</summary> `Success: no issues found in 36 source files` ```text $ uv run mypy . Success: no issues found in 36 source files ``` </details> <details> <summary>Evidence: pip-audit on locked deps</summary> `No known vulnerabilities found` ```text $ uv export ... && uvx pip-audit -r requirements-audit.txt No known vulnerabilities found ``` </details> <details> <summary>Evidence: E2E local round trip + public dataset load py3.11</summary> ```text python 3.11.15 local catalog list: ['e2e-ds'] local round-trip docs: 5 queries: 1 first batch ids: ['0', '1', '2', '3', '4'] public catalog count: 32 sample: ['ANN_DEEP1B_d96_angular', 'ANN_Fashion-MNIST_d784_euclidean', 'ANN_GIST_d960_euclidean'] public dataset langchain-python-docs-text-embedding-ada-002 docs: 6952 dim: 1536 ``` </details> <details> <summary>Evidence: E2E local round trip + public dataset load py3.13</summary> ```text python 3.13.14 local catalog list: ['e2e-ds'] local round-trip docs: 5 queries: 1 first batch ids: ['0', '1', '2', '3', '4'] public catalog count: 32 sample: ['ANN_DEEP1B_d96_angular', 'ANN_Fashion-MNIST_d784_euclidean', 'ANN_GIST_d960_euclidean'] public dataset langchain-python-docs-text-embedding-ada-002 docs: 6952 dim: 1536 ``` </details> <details> <summary>Evidence: Action tags and inputs at new majors</summary> ```text actions/checkout@v7 -> 3d3c42e5aac5ba805825da76410c181273ba90b1 actions/setup-python@v7 -> 6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 actions/upload-artifact@v7 -> cf430e030ddbb5b0abf93d22962f4752f3646cd9 actions/upload-pages-artifact@v5 -> fc324d3547104276b827a68afc52ff2a11cc49c9 actions/deploy-pages@v5 -> 368f82528645a54fb793d4d04e342629a3f51346 astral-sh/setup-uv@v5 -> e58605a9b6da7c637471fab8847a5e5a6b8df081 actions/checkout action.yml runs.using@major: node24 inputs: ['allow-unsafe-pr-checkout', 'clean', 'fetch-depth', 'fetch-tags', 'filter', 'github-server-url', 'lfs', 'path', 'persist-credentials', 'ref', 'repository', 'set-safe-directory', 'show-progress', 'sparse-checkout', 'sparse-checkout-cone-mode', 'ssh-key', 'ssh-known-hosts', 'ssh-strict', 'ssh-user', 'submodules', 'token'] actions/setup-python action.yml runs.using@major: node24 inputs: ['allow-prereleases', 'architecture', 'cache', 'cache-dependency-path', 'check-latest', 'freethreaded', 'mirror', 'mirror-token', 'pip-version', 'python-version', 'python-version-file', 'token', 'update-environment'] actions/upload-artifact action.yml runs.using@major: node24 inputs: ['archive', 'compression-level', 'if-no-files-found', 'include-hidden-files', 'name', 'overwrite', 'path', 'retention-days'] actions/upload-pages-artifact action.yml runs.using@major: composite inputs: ['include-hidden-files', 'name', 'path', 'retention-days'] actions/deploy-pages action.yml runs.using@major: node24 inputs: ['artifact_name', 'error_count', 'preview', 'reporting_interval', 'timeout', 'token'] ``` </details> <details> <summary>Evidence: Rendered pdoc page from docs build</summary> ```text <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="generator" content="pdoc 16.0.0"/> <title>pinecone_datasets.dataset API documentation</title> <style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style> <style>/*! syntax-highlighting.css */pre{line-height:125%;}span.linenos{color:inherit; background-color:transparent; padding-left:5px; padding-right:20px;}.pdoc-code .hll{background-color:#49483e}.pdoc-code{background:#272822; color:#f8f8f2}.pdoc-code .c{color:#75715e}.pdoc-code .err{color:#960050; background-color:#1e0010}.pdoc-code .esc{color:#f8f8f2}.pdoc-code .g{color:#f8f8f2}.pdoc-code .k{color:#66d9ef}.pdoc-code .l{color:#ae81ff}.pdoc-code .n{color:#f8f8f2}.pdoc-code .o{color:#f92672}.pdoc-code .x{color:#f8f8f2}.pdoc-code .p{color:#f8f8f2}.pdoc-code .ch{color:#75715e}.pdoc-code .cm{color:#75715e}.pdoc-code .cp{color:#75715e}.pdoc-code .cpf{color:#75715e}.pdoc-code .c1{color:#75715e}.pdoc-code .cs{color:#75715e}.pdoc-code .gd{color:#f92672}.pdoc-code .ge{color:#f8f8f2; font-style:italic}.pdoc-code .gr{color:#f8f8f2}.pdoc-code .gh{color:#f8f8f2}.pdoc-code .gi{color:#a6e22e}.pdoc-code .go{color:#66d9ef}.pdoc-code .gp{color:#f92672; font-weight:bold}.pdoc-code .gs{color:#f8f8f2; font-weight:bold}.pdoc-code .gu{color:#75715e}.pdoc-code .gt{color:#f8f8f2}.pdoc-code .kc{color:#66d9ef}.pdoc-code .kd{color:#66d9ef}.pdoc-code .kn{color:#f92672}.pdoc-code .kp{color:#66d9ef}.pdoc-code .kr{color:#66d9ef}.pdoc-code .kt{color:#66d9ef}.pdoc-code .ld{color:#e6db74}.pdoc-code .m{color:#ae81ff}.pdoc-code .s{color:#e6db74}.pdoc-code .na{color:#a6e22e}.pdoc-code .nb{color:#f8f8f2}.pdoc-code .nc{color:#a6e22e}.pdoc-code .no{color:#66d9ef}.pdoc-code .nd{color:#a6e22e}.pdoc-code .ni{color:#f8f8f2}.pdoc-code .ne{color:#a6e22e}.pdoc-code .nf{color:#a6e22e}.pdoc-code .nl{color:#f8f8f2}.pdoc-code .nn{color:#f8f8f2}.pdoc-code .nx{color:#a6e22e}.pdoc-code .py{color:#f8f8f2}.pdoc-code .nt{color:#f92672}.pdoc-code .nv{color:#f8f8f2}.pdoc-code .ow{color:#f92672}.pdoc-code .w{color:#f8f8f2}.pdoc-code .mb{color:#ae81ff}.pdoc-code .mf{color:#ae81ff}.pdoc-code .mh{color:#ae81ff}.pdoc-code .mi{color:#ae81ff}.pdoc-code .mo{color:#ae81ff}.pdoc-code .sa{color:#e6db74}.pdoc-code .sb{color:#e6db74}.pdoc-code .sc{color:#e6db74}.pdoc-code .dl{color:#e6db74}.pdoc-code .sd{color:#e6db74}.pdoc-code .s2{color:#e6db74}.pdoc-code .se{color:#ae81ff}.pdoc-code .sh{color:#e6db74}.pdoc-code .si{color:#e6db74}.pdoc-code .sx{color:#e6db74}.pdoc-code .sr{color:#e6db74}.pdoc-code .s1{color:#e6db74}.pdoc-code .ss{color:#e6db74}.pdoc-code .bp{color:#f8f8f2}.pdoc-code .fm{color:#a6e22e}.pdoc-code .vc{color:#f8f8f2}.pdoc-code .vg{color:#f8f8f2}.pdoc-code .vi{color:#f8f8f2}.pdoc-code .vm{color:#f8f8f2}</style> <style>/*! theme.css */:root{--pdoc-background:#212529;}.pdoc{--text:#f7f7f7;--muted:#9d9d9d;--link:#58a6ff;--link-hover:#3989ff;--code:#333;--active:#555;--accent:#343434;--accent2:#555;--nav-hover:rgba(0, 0, 0, 0.1);--name:#77C1FF;--def:#0cdd0c;--annotation:#00c037;}</style> <style>/*! layout.css */html, body{width:100%;height:100%;}html, main{scroll-behavior:smooth;}body{background-color:var(--pdoc-background);}@media (max-width:769px){#navtoggle{cursor:pointer;position:absolute;width:50px;height:40px;top:1rem;right:1rem;border-color:var(--text);color:var(--text);display:flex;opacity:0.8;z-index:999;}#navtoggle:hover{opacity:1;}#togglestate + div{display:none;}#togglestate:checked + div{display:inherit;}main, header{padding:2rem 3vw;}header + main{margin-top:-3rem;}.git-button{displ ... [205188 bytes truncated] ... o_pinecone_index-276"><span class="linenos">276</span></a><span class="sd"> DEPRECATED: This method has been removed. Please use the `pinecone.Index.upsert` method instead from the `pinecone` SDK package.</span> </span><span id="Dataset.to_pinecone_index-277"><a href="#Dataset.to_pinecone_index-277"><span class="linenos">277</span></a><span class="sd"> """</span> </span><span id="Dataset.to_pinecone_index-278"><a href="#Dataset.to_pinecone_index-278"><span class="linenos">278</span></a> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span> </span><span id="Dataset.to_pinecone_index-279"><a href="#Dataset.to_pinecone_index-279"><span class="linenos">279</span></a> <span class="s2">"This method has been removed. Please use the `pinecone.Index.upsert` method instead from the `pinecone` SDK package."</span> </span><span id="Dataset.to_pinecone_index-280"><a href="#Dataset.to_pinecone_index-280"><span class="linenos">280</span></a> <span class="p">)</span> </span></pre></div> <div class="docstring"><p>DEPRECATED: This method has been removed. Please use the <code>pinecone.Index.upsert</code> method instead from the <code>pinecone</code> SDK package.</p> </div> </div> </section> </main> <script> function escapeHTML(html) { return document.createElement('div').appendChild(document.createTextNode(html)).parentNode.innerHTML; } const originalContent = document.querySelector("main.pdoc"); let currentContent = originalContent; function setContent(innerHTML) { let elem; if (innerHTML) { elem = document.createElement("main"); elem.classList.add("pdoc"); elem.innerHTML = innerHTML; } else { elem = originalContent; } if (currentContent !== elem) { currentContent.replaceWith(elem); currentContent = elem; } } function getSearchTerm() { return (new URL(window.location)).searchParams.get("search"); } const searchBox = document.querySelector(".pdoc input[type=search]"); searchBox.addEventListener("input", function () { let url = new URL(window.location); if (searchBox.value.trim()) { url.hash = ""; url.searchParams.set("search", searchBox.value); } else { url.searchParams.delete("search"); } history.replaceState("", "", url.toString()); onInput(); }); window.addEventListener("popstate", onInput); let search, searchErr; async function initialize() { try { search = await new Promise((resolve, reject) => { const script = document.createElement("script"); script.type = "text/javascript"; script.async = true; script.onload = () => resolve(window.pdocSearch); script.onerror = (e) => reject(e); script.src = "../search.js"; document.getElementsByTagName("head")[0].appendChild(script); }); } catch (e) { console.error("Cannot fetch pdoc search index"); searchErr = "Cannot fetch search index."; } onInput(); document.querySelector("nav.pdoc").addEventListener("click", e => { if (e.target.hash) { searchBox.value = ""; searchBox.dispatchEvent(new Event("input")); } }); } function onInput() { setContent((() => { const term = getSearchTerm(); if (!term) { return null } if (searchErr) { return `<h3>Error: ${searchErr}</h3>` } if (!search) { return "<h3>Searching...</h3>" } window.scrollTo({top: 0, left: 0, behavior: 'auto'}); const results = search(term); let html; if (results.length === 0) { html = `No search results for '${escapeHTML(term)}'.` } else { html = `<h4>${results.length} search result${results.length > 1 ? "s" : ""} for '${escapeHTML(term)}'.</h4>`; } for (let result of results.slice(0, 10)) { let doc = result.doc; let url = `../${doc.modulename.replaceAll(".", "/")}.html`; if (doc.qualname) { url += `#${doc.qualname}`; } let heading; switch (result.doc.kind) { case "function": if (doc.fullname.endsWith(".__init__")) { heading = `<span class="name">${doc.fullname.replace(/\.__init__$/, "")}</span>${doc.signature}`; } else { heading = `<span class="def">${doc.funcdef}</span> <span class="name">${doc.fullname}</span>${doc.signature}`; } break; case "class": heading = `<span class="def">class</span> <span class="name">${doc.fullname}</span>`; if (doc.bases) heading += `<wbr>(<span class="base">${doc.bases}</span>)`; heading += `:`; break; case "variable": heading = `<span class="name">${doc.fullname}</span>`; if (doc.annotation) heading += `<span class="annotation">${doc.annotation}</span>`; if (doc.default_value) heading += `<span class="default_value"> = ${doc.default_value}</span>`; break; default: heading = `<span class="name">${doc.fullname}</span>`; break; } html += ` <section class="search-result"> <a href="${url}" class="attr ${doc.kind}">${heading}</a> <div class="docstring">${doc.doc}</div> </section> `; } return html; })()); } if (getSearchTerm()) { initialize(); searchBox.value = getSearchTerm(); onInput(); } else { searchBox.addEventListener("focus", initialize, {once: true}); } searchBox.addEventListener("keydown", e => { if (["ArrowDown", "ArrowUp", "Enter"].includes(e.key)) { let focused = currentContent.querySelector(".search-result.focused"); if (!focused) { currentContent.querySelector(".search-result").classList.add("focused"); } else if ( e.key === "ArrowDown" && focused.nextElementSibling && focused.nextElementSibling.classList.contains("search-result") ) { focused.classList.remove("focused"); focused.nextElementSibling.classList.add("focused"); focused.nextElementSibling.scrollIntoView({ behavior: "smooth", block: "nearest", inline: "nearest" }); } else if ( e.key === "ArrowUp" && focused.previousElementSibling && focused.previousElementSibling.classList.contains("search-result") ) { focused.classList.remove("focused"); focused.previousElementSibling.classList.add("focused"); focused.previousElementSibling.scrollIntoView({ behavior: "smooth", block: "nearest", inline: "nearest" }); } else if ( e.key === "Enter" ) { focused.querySelector("a").click(); } } }); </script></body> </html> ``` </details> - Outcome:⚠️ 1 info across 1 run (7m51s) ## Pipeline Updates from [git push no-mistakes](https://github.com/kunchenguid/no-mistakes) <!-- no-mistakes-pipeline-attestation:v1 {"head_sha":"4ddd5672706d621c5270d35c91569f2485c7d74b","steps":[{"step":"intent","status":"completed"},{"step":"rebase","status":"completed"},{"step":"review","status":"completed"},{"step":"test","status":"completed"},{"step":"document","status":"completed"},{"step":"lint","status":"completed"},{"step":"push","status":"completed"},{"step":"pr","status":"running"},{"step":"ci","status":"pending"}],"live_validation":{"verdict":"go","live":8,"total":9}} --> <details> <summary>✅ **intent** - passed</summary> ✅ No issues found. </details> <details> <summary>✅ **Rebase** - passed</summary> ✅ No issues found. </details> <details> <summary>✅ **Review** - passed</summary> ✅ No issues found. </details> <details> <summary>⚠️ **Test** - 1 info</summary> - ℹ️ `tests/unit/test_fs_errors.py:24` - gcsfs 2026.10.1 now checks a raw `token=` string against Google's tokeninfo endpoint when the filesystem is created. As a result, get_cloud_fs('gs://...', token=<invalid>) now raises ValueError right away instead of failing on first use, and every raw token costs a network call. The tests set FETCH_RAW_TOKEN_EXPIRY=false to avoid this, but library users who pass raw tokens will see the change. It may be worth a release-notes mention. - Live validation: ✅ go - 8 of 9 scenarios driven live against the product | Scenario | Result | Live | Evidence | | --- | --- | --- | --- | | Developer syncs the updated lock on Python 3.11/3.12/3.13 and gets every Dependabot target version | ✅ pass | live | unit-py3.11.txt / unit-py3.12.txt / unit-py3.13.txt (version line) | | CI 'Run tests' unit suite passes on 3.11, 3.12 and 3.13 with the new deps (previously failing on #104/#106) | ✅ pass | live | unit-py3.*.txt: 160 passed, 3 skipped on each version | | Adversarial: unmodified raw-token tests break under gcsfs 2026.10.1, and the updated tests pass | ✅ pass | live | fs-token-regression.txt: base file 2 failed (ValueError: Provided token is either not valid, or expired), target file 2 passed | | Lint gate: mypy 2.3.0 (major bump #104) type-checks the repo cleanly | ✅ pass | live | mypy.txt | | Dependency audit gate (failing on #106) reports no known vulnerabilities in the locked deps | ✅ pass | live | pip-audit.txt | | End user saves a dataset to a local catalog, lists it, reloads it and iterates documents | ✅ pass | live | e2e-py3.11.txt, e2e-py3.13.txt: catalog list ['e2e-ds'], 5 docs / 1 query round-tripped | | End user lists the public catalog and downloads a public dataset over gcsfs/fsspec/aiohttp | ✅ pass | live | e2e-py3.11.txt, e2e-py3.13.txt: 32 public datasets; langchain-python-docs-text-embedding-ada-002 loaded, 6952 docs, dim 1536 | | Docs workflow pdoc build produces HTML with the new deps | ✅ pass | live | pdoc-dataset.html | | Bumped GitHub Actions majors (checkout@v7, setup-python@v7, upload-artifact@v7, upload-pages-artifact@v5, deploy-pages@v5) run successfully in CI/docs/release workflows | ⏸️ untested | no | GitHub-hosted workflows run only on GitHub's runners, and only after a push, which this phase must not do. No local runner (e.g. act) is on PATH. The Pages deploy and the PyPI release also need reposi… | - <code>`uv sync --locked --all-extras --python {3.11,3.12,3.13}` into separate temp venvs (UV_PROJECT_ENVIRONMENT), then imported each package to confirm the resolved versions (fsspec 2026.9.0, gcsfs 2026.10.1, s3fs 2026.9.0, pydantic 2.14.1, aiohttp 3.14.4, multidict 6.9.1, urllib3 2.8.0, oauthlib 4.0.0, tornado 6.5.9, mypy 2.3.0)</code> - <code>`uv run pytest -n 4 tests/unit` on 3.11, 3.12 and 3.13 (the CI 'Run tests' step that failed on #104/#106)</code> - `Ran the base commit's tests/unit/test_fs_errors.py against the new lock (-k 'invalid_token or gcs_with_custom_token') to reproduce the gcsfs failure, then ran the target commit's version of the file` - <code>`uv run mypy .` with mypy 2.3.0 (CI lint gate)</code> - <code>`uv export --format requirements-txt --all-extras --no-emit-project` + `uvx pip-audit -r` (CI Dependency audit gate)</code> - `End-to-end script on 3.11 and 3.13: Dataset.from_pandas -> Catalog(base_path=tmp).save_dataset -> list/load_dataset -> iter_documents; then list_datasets() + load_dataset('langchain-python-docs-text-embedding-ada-002') from the real public GCS catalog, with PINECONE_DATASETS_CACHE_DIR isolated` - <code>`uv run pdoc -d google -o <tmp> --search -t pdoc_theme ./pinecone_datasets` (the docs.yml build step)</code> - <code>`gh api repos/<action>/git/ref/tags/<major>` plus a parse of each action's action.yml at the new major, to confirm the tags exist and that the inputs the workflows use (python-version, name, path) are still accepted</code> </details> <details> <summary>✅ **Document** - passed</summary> ✅ No issues found. </details> <details> <summary>✅ **Lint** - passed</summary> ✅ No issues found. </details> <details> <summary>✅ **Push** - passed</summary> ✅ No issues found. </details> <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Mostly CI, lockfile, and doc/test housekeeping; the main runtime caveat is gcsfs now validating raw GCS tokens earlier, which can affect callers that pass `token=` strings directly. > > **Overview** > Bumps **GitHub Actions** across `ci.yml`, `cd.yml`, and `docs.yml`: `actions/checkout` and `actions/setup-python` to **v7**, `actions/upload-artifact` to **v7**, and Pages deploy steps to **upload-pages-artifact@v5** and **deploy-pages@v5**. > > Updates **GCS filesystem unit tests** in `test_fs_errors.py` so raw `token=` cases set `FETCH_RAW_TOKEN_EXPIRY=false`, matching newer **gcsfs** behavior that validates raw tokens at construction time (tests were failing without this). > > Applies **ruff 0.17**-style formatting to Python examples in `README.md` and `MAINTAINERS.md` (quotes and line wrapping only). The PR also rolls up open **Dependabot** lockfile updates (fsspec/gcsfs/s3fs, mypy 2.x, oauthlib 4.x, etc.) per the branch intent; `pyproject.toml` and library runtime code are unchanged aside from the test env tweak above. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 4ddd567. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
Contributor
|
Superseded by #114, which applied this update together with the other open dependency updates. |
Author
|
OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting If you change your mind, just re-open this PR and I'll resolve any conflicts on it. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps fsspec from 2026.1.0 to 2026.6.0.
Commits
a245700changelog (#2049)652325dFix async cat ranges on error (#2045)073aac8Forward kwargs from cat_ranges to cat_file (#2044)2818611FTP: preserve filenames containing whitespace in _mlsd2 (#2043)c879384Prevent attribute error by checking for 'forced' attribute before flushing ca...71b8a6bReflect async _walk correctly (#2040)5eec9f9Fix: Omitthreading.get_ident()from cache token for async implementations ...8643878Small safety improvements (#2039)a1c16abHonour simple_templates everywhere in referenceFS (#2029)85facaaFix infinite recursion in expand_path when resolving paths with glob magic ch...