|
import importlib |
|
import shutil |
|
import warnings |
|
from typing import List |
|
|
|
import fsspec |
|
import fsspec.asyn |
|
from fsspec.implementations.local import LocalFileSystem |
|
|
|
from . import compression |
|
|
|
|
|
COMPRESSION_FILESYSTEMS: list[compression.BaseCompressedFileFileSystem] = [ |
|
compression.Bz2FileSystem, |
|
compression.GzipFileSystem, |
|
compression.Lz4FileSystem, |
|
compression.XzFileSystem, |
|
compression.ZstdFileSystem, |
|
] |
|
|
|
|
|
for fs_class in COMPRESSION_FILESYSTEMS: |
|
if fs_class.protocol in fsspec.registry and fsspec.registry[fs_class.protocol] is not fs_class: |
|
warnings.warn(f"A filesystem protocol was already set for {fs_class.protocol} and will be overwritten.") |
|
fsspec.register_implementation(fs_class.protocol, fs_class, clobber=True) |
|
|
|
|
|
def is_remote_filesystem(fs: fsspec.AbstractFileSystem) -> bool: |
|
""" |
|
Checks if `fs` is a remote filesystem. |
|
|
|
Args: |
|
fs (`fsspec.spec.AbstractFileSystem`): |
|
An abstract super-class for pythonic file-systems, e.g. `fsspec.filesystem(\'file\')` or `s3fs.S3FileSystem`. |
|
""" |
|
return not isinstance(fs, LocalFileSystem) |
|
|
|
|
|
def rename(fs: fsspec.AbstractFileSystem, src: str, dst: str): |
|
""" |
|
Renames the file `src` in `fs` to `dst`. |
|
""" |
|
if not is_remote_filesystem(fs): |
|
|
|
shutil.move(fs._strip_protocol(src), fs._strip_protocol(dst)) |
|
else: |
|
fs.mv(src, dst, recursive=True) |
|
|