class TemporaryPackage(): def __init__( self, name: Optional[str] = None, *, prefix: Optional[str] = None, suffix: Optional[str] = None, copy_from: Optional[str] = None, wrap_ignore: bool = True ) -> None: if name is None: self._name = '{prefix}{token}{suffix}'.format( prefix=prefix or '', token=random_token(), suffix=suffix or '', ) elif prefix is not None or suffix is not None: raise ValueError("Argument `name` is incompatible with `prefix` and `suffix`.") else: self._name = name self.copy_from = copy_from self.wrap_ignore = wrap_ignore self.path = ResourcePath('Packages', self._name) def __enter__(self) -> ResourcePath: self.init() return self.path def __exit__(self, exc_type: type, exc_value: Exception, traceback: TracebackType) -> None: self.cleanup() def _ignore(self) -> ContextManager: ret = ExitStack() if self.wrap_ignore: ret.enter_context(ignore_package(self._name)) return ret def init(self) -> None: with self._ignore(): if self.copy_from is None: mkdir(str(self.path.file_path())) else: ResourcePath(self.copy_from).copytree(self.path.file_path()) def cleanup(self) -> None: with self._ignore(): rmtree(str(self.path.file_path()))
def test_temporary_package_name(self): expected_resource_path = ResourcePath('Packages/TemporaryPackageTest') expected_file_path = expected_resource_path.file_path() name = 'TemporaryPackageTest' with TemporaryPackage(name) as path: self.assertEquals(path.name, name) self.assertEquals(path, expected_resource_path) self.assertTrue(expected_file_path.is_dir()) self.assertFalse(expected_file_path.exists())
def copy(source: ResourcePath, dest: ResourcePath) -> None: source_path = source dest_path = dest.file_path() logger.info("Copying {} to {}…".format(source_path, dest_path)) source_path.copy(dest_path)
def _parse_schema(self, resource: ResourcePath) -> Any: try: return sublime.decode_value(resource.read_text()) except Exception: print('Failed parsing schema "{}"'.format(resource.file_path())) return None