Source code for solidipes.loaders.virtual_file

import os
from copy import copy

from solidipes.loaders.data_container import DataContainer

from ..utils import solidipes_logging as logging
from .cached_metadata import CachedMetadata

logger = logging.getLogger()


[docs] class VirtualFile(CachedMetadata, DataContainer): """Remote file, potentially formatted with markdown""" def __init__(self, path=None, metadata=None, **kwargs): from solidipes.viewers.binary import Binary as BinaryViewer self._metadata = copy(metadata) self._path = path self._metadata["path"] = path logger.debug(path) logger.debug(metadata) self._metadata["size"] = self._metadata["size_in_bytes"] self._metadata["type"] = "virtual (dtool)" self._metadata["extension"] = os.path.splitext(self._metadata["relpath"])[1][1:] self._discussions = [] self._archived_discussions = False super().__init__(**kwargs) self.compatible_viewers[:0] = [BinaryViewer]
[docs] def is_cache_invalid(self): return True
@CachedMetadata.cached_loadable def discussions(self): return self._discussions @DataContainer.loadable def path(self): return self._path @DataContainer.loadable def file_info(self): import argparse return argparse.Namespace(**self._metadata) @DataContainer.loadable def valid_loading(self): return True @CachedMetadata.cached_property def modified_time(self): return self._metadata["utc_timestamp"]
[docs] def load_virtual_file(path, metadata, **kwargs): """Load a virtual file from path into the appropriate object type""" # Get cached preferred loader try: obj = VirtualFile(path=path, metadata=metadata, **kwargs) return obj except RuntimeError as e: logger.error(f"Cannot load {type(path)}: {type(e)}") logger.error(f"Cannot load {path}: {e}") raise RuntimeError(f"cannot load remote file: {path}")