Source code for norfs.client

from norfs.filesystem import (
    BaseFileSystemObject,
    Directory,
    File,
)
from norfs.fs.base import BaseFileSystem
from norfs.copy.base import Copier


[docs]class FileSystemClient: """ :class:`norfs.client.FileSystemClient` provides a way to access the file system objects of a given file system. It is a handy class that provides easy access to :class:`norfs.filesystem.File` and :class:`norfs.filesystem.Directory` instances. It is usually obtained using :mod:`norfs.helpers`:: import norfs.helpers local_fs_client = norfs.helpers.local() memory_fs_client = norfs.helpers.memory() import boto3 s3_fs_client = norfs.helpers.s3(s3_client=boto3.client('s3')) A :class:`norfs.client.FileSystemClient` exposes the following interface: """ _fs: BaseFileSystem def __init__(self, fs: BaseFileSystem) -> None: """ Constructor for :class:`norfs.client.FileSystemClient` s. """ self._fs = fs @property def fs(self) -> BaseFileSystem: """ The :class:`norfs.filesystem.BaseFileSystemObject` the client is managing. """ return self._fs
[docs] def dir(self, path: str) -> Directory: """ Returns a :class:`norfs.filesystem.Directory` instance for the given path in the managed file system. """ return Directory(self.fs, path)
[docs] def file(self, path: str) -> File: """ Returns a :class:`norfs.filesystem.File` instance for the given path in the managed file system. """ return File(self.fs, path)
[docs]class CopyClient: """ :class:`norfs.client.CopyClient` provides a unified simple copy API for any :class:`norfs.filesystem.File` or :class:`norfs.filesystem.Directory` from any file system. It is usually accessed by using :func:`norfs.helpers.get_copy_client`:: import norfs.helpers local = norfs.helpers.local() cp_local_only = norfs.helpers.get_copy_client(local) cp_local_only.copy(local.file('source_file.txt'), local.file('target_file.txt')) memory = norfs.helpers.memory() import boto3 s3 = norfs.helpers.s3(s3_client=boto3.client('s3')) cp_for_all = norfs.helpers.get_copy_client(local, s3, memory) cp_for_all.copy(s3.file('myBucket/source_file.txt'), local.file('target_file.txt')) :func:`norfs.helpers.get_copy_client` returns a :class:`norfs.client.CopyClient` instance configured with copy strategies for each of the file system clients passed. A :class:`norfs.copy.base.Copier` can have copy policies set for a pair of source and destination file systems to implement a better strategy of copying between them than read source and write destination. :func:`norfs.helpers.get_copy_client` helps you by setting these for you. A :class:`norfs.client.CopyClient` exposes the following interface: """ _copier: Copier def __init__(self, copier: Copier) -> None: """ Constructor for CopyClients. """ self._copier = copier @property def copier(self) -> Copier: """ The :class:`norfs.copy.base.Copier` instance managed by the client. """ return self._copier
[docs] def copy(self, src: BaseFileSystemObject, dst: BaseFileSystemObject) -> None: """ Copies ``src`` to ``dst``, no mater the file systems they are on. ``src`` and ``dst`` can by both :class:`norfs.filesystem.File` or :class:`norfs.filesystem.Directory`. The only operation not supported is copying from a :class:`norfs.filesystem.Directory` into a :class:`norfs.filesystem.File` as it does not make sense. If source is a :class:`norfs.filesystem.Directory` and destination is a :class:`norfs.filesystem.File` it raises a :class:`TypeError`. On copy failure it raises a :class:`norfs.fs.base.FileSystemOperationError`. """ self._copier.copy(src.copy_object(), dst.copy_object())