Posix¶
-
class
stor.posix.
PosixPath
(path)[source]¶ Represents a posix path.
This class inherits a vendored path.py
Path
object and overrides methods for cross compatibility with swift.This class overrides
Path
object’smodule
attribute and sets it toposixpath
to ensure that it always represents a posix path.-
copy
(dest, **kwargs)¶ Copies a source file to a destination file.
Note that this utility can be called from either OBS, posix, or windows paths created with
stor.Path
.- Parameters
source (path|str) – The source directory to copy from
dest (path|str) – The destination file or directory.
swift_retry_options (dict) – Optional retry arguments to use for swift upload or download. View the swift module-level documentation for more information on retry arguments
Examples
Copying a swift file to a local path behaves as follows:
>>> import stor >>> swift_p = 'swift://tenant/container/dir/file.txt' >>> # file.txt will be copied to other_dir/other_file.txt >>> stor.copy(swift_p, 'other_dir/other_file.txt')
Copying from a local path to swift behaves as follows:
>>> from stor import Path >>> local_p = Path('my/local/file.txt') >>> # File will be uploaded to swift://tenant/container/dir/my_file.txt >>> local_p.copy('swift://tenant/container/dir/')
Because of the ambiguity in whether a remote target is a file or directory, copy() will error on ambiguous paths.
>>> local_p.copy('swift://tenant/container/dir') Traceback (most recent call last): ... ValueError: OBS destination must be file with extension or directory with slash
-
copytree
(dest, copy_cmd=None, use_manifest=False, headers=None, condition=None, **kwargs)¶ Copies a source directory to a destination directory. Assumes that paths are capable of being copied to/from.
Note that this function uses shutil.copytree by default, meaning that a posix or windows destination must not exist beforehand.
For example, assume the following file hierarchy:
a/ - b/ - - 1.txt
Doing a copytree from
a
to a new posix destination ofc
is performed with:Path('a').copytree('c')
The end result for c looks like:
c/ - b/ - - 1.txt
Note that the user can override which copy command is used for posix copies, and it is up to them to ensure that their code abides by the semantics of the provided copy command. This function has been tested in production using the default command of
cp -r
and usingmcp -r
.Using OBS source and destinations work in a similar manner. Assume the destination is a swift path and we upload the same
a
folder:Path('a').copytree('swift://tenant/container/folder')
The end swift result will have one object:
Path('swift://tenant/container/folder/b/1.txt')
Similarly one can do:
Path('swift://tenant/container/folder/').copytree('c')
The end result for c looks the same as the above posix example:
c/ - b/ - - 1.txt
- Parameters
source (path|str) – The source directory to copy from
dest (path|str) – The directory to copy to. Must not exist if its a posix directory
copy_cmd (str) – If copying to / from posix or windows, this command is used instead of shutil.copytree
use_manifest (bool, default False) – See
SwiftPath.upload
andSwiftPath.download
.condition (function(results) -> bool) – See
SwiftPath.upload
andSwiftPath.download
.headers (List[str]) – See
SwiftPath.upload
.
- Raises
ValueError – if two OBS paths are specified
OSError – if destination is a posix path and it already exists
-