Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

FsspecStore fails for local URL-style windows paths

Aperta
#554 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Ferma
Stack tecnologico
python
Ambito
backend

Direzione di ricerca

Inizia da FsspecStore.exists e dal percorso _info/_ls mostrato nel traceback, confrontando la sua gestione di file:///C:/dev/tmp con la chiamata fsspec funzionante e il caso diretto C:/dev/tmp. Il lavoro è completato quando i percorsi locali Windows in stile URL non diventano più C:\C:\dev\tmp ed exists restituisce il risultato previsto.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

fsspec

Hi,
I noticed the following bug when working with local Windows URL-style paths:

✅works fine
import fsspec

local_path = "file:///C:/dev/tmp"

fs_fsspec = fsspec.filesystem("file")
fs_fsspec.exists(local_path)
❌ fails
from obstore.fsspec import FsspecStore

local_path = "file:///C:/dev/tmp"

fs_fsspecstore = FsspecStore("file")
fs_fsspecstore.exists(local_path)
---------------------------------------------------------------------------
GenericError                              Traceback (most recent call last)
Cell In[18], line 10
      7 fs_fsspec.exists(local_path)
      9 fs_fsspecstore = FsspecStore('file')
---> 10 fs_fsspecstore.exists(local_path)

File c:\Users\...\.venv\lib\site-packages\fsspec\asyn.py:118, in sync_wrapper.<locals>.wrapper(*args, **kwargs)
    115 @functools.wraps(func)
    116 def wrapper(*args, **kwargs):
    117     self = obj or args[0]
--> 118     return sync(self.loop, func, *args, **kwargs)

File c:\Users\...\.venv\lib\site-packages\fsspec\asyn.py:103, in sync(loop, func, timeout, *args, **kwargs)
    101     raise FSTimeoutError from return_result
    102 elif isinstance(return_result, BaseException):
--> 103     raise return_result
    104 else:
    105     return return_result

File c:\Users\...\.venv\lib\site-packages\fsspec\asyn.py:56, in _runner(event, coro, result, timeout)
     54     coro = asyncio.wait_for(coro, timeout=timeout)
     55 try:
---> 56     result[0] = await coro
     57 except Exception as ex:
     58     result[0] = ex

File c:\Users\...\.venv\lib\site-packages\fsspec\asyn.py:695, in AsyncFileSystem._exists(self, path, **kwargs)
    693 async def _exists(self, path, **kwargs):
    694     try:
--> 695         await self._info(path, **kwargs)
    696         return True
    697     except FileNotFoundError:

File c:\Users\...\.venv\lib\site-packages\obstore\fsspec.py:520, in FsspecStore._info(self, path, **_kwargs)
    515     pass
    517 # Ref: https://github.com/fsspec/s3fs/blob/01b9c4b838b81375093ae1d78562edf6bdc616ea/s3fs/core.py#L1471-L1492
    518 # We check to see if the path is a directory by attempting to list its
    519 # contexts. If anything is found, it is indeed a directory
--> 520 out = await self._ls(path, detail=True)
    521 if len(out) > 0:
    522     return {
    523         "name": f"{bucket}/{path_no_bucket}",
    524         "type": "directory",
    525         "size": 0,
    526     }

File c:\Users\...\.venv\lib\site-packages\obstore\fsspec.py:555, in FsspecStore._ls(self, path, detail, **_kwargs)
    552 bucket, path = self._split_path(path)
    553 store = self._construct_store(bucket)
--> 555 result = await obs.list_with_delimiter_async(store, path)
    556 objects = result["objects"]
    557 prefs = result["common_prefixes"]

GenericError: Generic LocalFileSystem error: Unable to walk dir: IO error for operation on C:\C:\dev\tmp: Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch. (os error 123)

Debug source:
Generic {
    store: "LocalFileSystem",
    source: UnableToWalkDir {
        source: Error {
            depth: 0,
            inner: Io {
                path: Some(
                    "C:\\C:\\dev\\tmp",
                ),
                err: Os {
                    code: 123,
                    kind: InvalidFilename,
                    message: "Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.",
                },
            },
        },
    },
}
✅works fine
fs_fsspecstore.exists("C:/dev/tmp")
Lingua principale
Python
Stelle
826
Fork
45
Merge medio
5h 44m
PR unite (30g)
14

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di developmentseed/obstore

Tutte le issue di developmentseed/obstore

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.