76 lines
2.2 KiB
Python
76 lines
2.2 KiB
Python
from abc import ABC
|
|
from types import TracebackType
|
|
from typing import Any, Optional, Union
|
|
|
|
from cerulean.path import Path
|
|
from cerulean.util import BaseExceptionType
|
|
|
|
|
|
class UnsupportedOperationError(RuntimeError):
|
|
"""Raised when an unsupported method is called.
|
|
|
|
See :class:`WebdavFileSystem`.
|
|
"""
|
|
pass
|
|
|
|
|
|
class FileSystem(ABC):
|
|
"""Represents a file system.
|
|
|
|
This is a generic interface class that all file systems inherit \
|
|
from, so you can use it wherever any file system will do.
|
|
|
|
In order to do something useful, you'll want an actual file system,
|
|
like a :class:`LocalFileSystem` or an :class:`SftpFileSystem`.
|
|
|
|
FileSystems may hold resources, so you should either use them \
|
|
with a ``with`` statement, or call :meth:`close` on the returned \
|
|
object when you are done with it.
|
|
|
|
Beyond that, file systems support a single operation:
|
|
|
|
.. code-block:: python
|
|
|
|
fs / 'path'
|
|
|
|
which produces a :class:`Path`, through which you can do things \
|
|
with files.
|
|
|
|
"""
|
|
def __enter__(self) -> 'FileSystem':
|
|
"""Enter context manager."""
|
|
return self
|
|
|
|
def __exit__(self, exc_type: Optional[BaseExceptionType],
|
|
exc_value: Optional[BaseException],
|
|
traceback: Optional[TracebackType]) -> None:
|
|
"""Exit context manager."""
|
|
pass
|
|
|
|
def __eq__(self, other: Any) -> bool:
|
|
"""Returns True iff this filesystem and other are equal.
|
|
|
|
FileSystem objects compare equal if they access the same
|
|
file system on the same host via the same protocol.
|
|
"""
|
|
return NotImplemented
|
|
|
|
def close(self) -> None:
|
|
"""Close connections and free resources, if any.
|
|
|
|
FileSystem objects may hold resources that need to be freed \
|
|
when you are done with the object. You can free them by calling \
|
|
this function, or you can use the FileSystem as a context \
|
|
manager using a ``with`` statement.
|
|
"""
|
|
pass
|
|
|
|
def root(self) -> Path:
|
|
"""Returns a Path representing the root of the file system.
|
|
"""
|
|
raise NotImplementedError()
|
|
|
|
def __truediv__(self, segment: str) -> Path:
|
|
"""Returns a Path anchored at this file system's root."""
|
|
raise NotImplementedError()
|