Exemplo n.º 1
0
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()))
Exemplo n.º 2
0
    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)
Exemplo n.º 4
0
 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