Directory - Interfacing with files
The Directory class is given to plugins by way of the Sandbox
and in some other instances. This API allows plugins to interface with files
and directory hierarchies owned by BuildStream.
Paths
The path argument to directory functions depict a relative path. Path elements are
separated with the /
character regardless of the platform. Both .
and ..
entries
are permitted. Absolute paths are not permitted, as such it is illegal to specify a path
with a leading /
character.
Directory objects represent a directory entry within the context of a directory tree,
and the directory returned by
Sandbox.get_virtual_directory()
is the root of the sandbox’s directory tree. Attempts to escape the root of a directory tree
using ..
entries will not result in an error, instead ..
entries which cross the
root boundary will be evaluated as the root directory. This behavior matches POSIX behavior
of filesystem root directories.
- exception DirectoryError(message: str, reason: str = None)
Bases:
BstError
Raised by Directory functions.
It is recommended to handle this error and raise a more descriptive user facing
ElementError
orSourceError
from this error.If this is not handled, the BuildStream core will fail the current task where the error occurs and present the user with the error.
- class FileType(value)
Bases:
FastEnum
Depicts the type of a file
- DIRECTORY: int = <buildstream.storage.directory.FileType object>
A directory
- REGULAR_FILE: int = <buildstream.storage.directory.FileType object>
A regular file
- SYMLINK: int = <buildstream.storage.directory.FileType object>
A symbolic link
- class FileStat(file_type: int, *, executable: bool = False, size: int = 0, mtime: float = 1321009871)
Bases:
object
Depicts stats about a file
Note
This object can be compared with the equality operator, two
FileStat
objects will be considered equivalent if they have the sameFileType
and have equivalent attributes.- executable: bool
Whether this file is executable
- size: int
The size of the file in bytes
- mtime: float
The modification time of the file
- class Directory(external_directory=None)
Bases:
object
The Directory object represents a directory in a filesystem hierarchy
Tip
Directory objects behave as a collection of entries in the pythonic sense. Iterating over a directory will yield the entries, and a directory is truthy if it contains any entries and falsy if it is empty.
- open_directory(path: str, *, create: bool = False, follow_symlinks: bool = False) Directory
Open a Directory object relative to this directory
- Parameters:
path – A path relative to this directory.
create – If this is true, the directories will be created if they don’t already exist.
- Returns:
A Directory object representing the found directory.
- Raises:
DirectoryError – if any of the components in subdirectory_spec cannot be found, or are files, or symlinks to files.
- import_files(external_pathspec: Directory | str, *, filter_callback: Callable[[str], bool] | None = None, collect_result: bool = True) FileListResult | None
Imports some or all files from external_path into this directory.
- Parameters:
external_pathspec – Either a string containing a pathname, or a Directory object, to use as the source.
filter_callback – Optional filter callback. Called with the relative path as argument for every file in the source directory. The file is imported only if the callable returns True. If no filter callback is specified, all files will be imported.
collect_result – Whether to collect data for the
FileListResult
, defaults to True.
- Returns:
A
FileListResult
report of files imported and overwritten, or None if collect_result is False.- Raises:
DirectoryError – if any system error occurs.
- import_single_file(external_pathspec: str) FileListResult
Imports a single file from an external path
- Parameters:
external_pathspec – A string containing a pathname.
properties – Optional list of strings representing file properties to capture when importing.
- Returns:
A
FileListResult
report of files imported and overwritten.- Raises:
DirectoryError – if any system error occurs.
- export_to_tar(tarfile: TarFile, destination_dir: str, mtime: int = 1321009871) None
Exports this directory into the given tar file.
- Parameters:
tarfile – A Python TarFile object to export into.
destination_dir – The prefix for all filenames inside the archive.
mtime – mtimes of all files in the archive are set to this.
- Raises:
DirectoryError – if any system error occurs.
- list_relative_paths() Iterator[str]
Generate a list of all relative paths in this directory.
- Yields:
All files in this directory with relative paths.
- exists(path: str, *, follow_symlinks: bool = False) bool
Check whether the specified path exists.
- Parameters:
path – A path relative to this directory.
follow_symlinks – True to follow symlinks.
- Returns:
True if the path exists, False otherwise.
- stat(path: str, *, follow_symlinks: bool = False) FileStat
Get the status of a file.
- Parameters:
path – A path relative to this directory.
follow_symlinks – True to follow symlinks.
- Returns:
A
FileStat
object.- Raises:
DirectoryError – if any system error occurs.
- open_file(path: str, *, mode: str = 'r') Iterator[IO]
Open file and return a corresponding file object. In text mode, UTF-8 is used as encoding.
- Parameters:
path – A path relative to this directory.
mode (str) – An optional string that specifies the mode in which the file is opened.
- Yields:
The file object for the open file
- Raises:
DirectoryError – if any system error occurs.
- file_digest(path: str) str
Return a unique digest of a file.
- Parameters:
path – A path relative to this directory.
- Raises:
DirectoryError – if the specified path depicts an entry that is not a
FileType.REGULAR_FILE
, or if any system error occurs.
- readlink(path: str) str
Return a string representing the path to which the symbolic link points.
- Parameters:
path – A path relative to this directory.
- Returns:
The path to which the symbolic link points to.
- Raises:
DirectoryError – if any system error occurs.
- remove(path: str, *, recursive: bool = False) None
Remove a file, symlink or directory. Symlinks are not followed.
- Parameters:
path – A path relative to this directory.
recursive – True to delete non-empty directories.
- Raises:
DirectoryError – if any system error occurs.
- rename(src: str, dest: str) None
Rename a file, symlink or directory. If destination path exists already and is a file or empty directory, it will be replaced.
- Parameters:
- Raises:
DirectoryError – if any system error occurs.
- isfile(path: str, *, follow_symlinks: bool = False) bool
Check whether the specified path is an existing regular file.
- Parameters:
path – A path relative to this directory.
follow_symlinks – True to follow symlinks.
- Returns:
True if the path is an existing regular file, False otherwise.