Exemplo n.º 1
0
    def OpenFileSystem(cls, path_spec, resolver_context=None):
        """Opens a file system object defined by path specification.

    Args:
      path_spec: the VFS path specification (instance of path.PathSpec).
      resolver_context: the optional resolver context (instance of
                        resolver.Context). The default is None which will use
                        the built in context which is not multi process safe.

    Returns:
      The file system object (instance of vfs.FileSystem) or None if the path
      specification could not be resolved or has no file system object.

    Raises:
      AccessError: if the access to open the file system was denied.
      BackEndError: if the file system cannot be opened.
      KeyError: if resolver helper object is not set for the corresponding
                type indicator.
      PathSpecError: if the path specification is incorrect.
    """
        if resolver_context is None:
            resolver_context = cls._resolver_context

        if path_spec.type_indicator == definitions.TYPE_INDICATOR_MOUNT:
            if path_spec.HasParent():
                raise errors.PathSpecError(
                    u'Unsupported mount path specification with parent.')

            mount_point = getattr(path_spec, u'identifier', None)
            if not mount_point:
                raise errors.PathSpecError(
                    u'Unsupported path specification without mount point identifier.'
                )

            path_spec = mount_manager.MountPointManager.GetMountPoint(
                mount_point)
            if not path_spec:
                raise errors.MountPointError(
                    u'No such mount point: {0:s}'.format(mount_point))

        file_system = resolver_context.GetFileSystem(path_spec)
        if not file_system:
            if path_spec.type_indicator not in cls._resolver_helpers:
                raise KeyError(
                    (u'Resolver helper object not set for type indicator: '
                     u'{0:s}.').format(path_spec.type_indicator))

            resolver_helper = cls._resolver_helpers[path_spec.type_indicator]
            file_system = resolver_helper.NewFileSystem(resolver_context)

        try:
            file_system.Open(path_spec=path_spec)
        except (errors.AccessError, errors.PathSpecError):
            raise
        except (IOError, ValueError) as exception:
            raise errors.BackEndError(
                u'Unable to open file system with error: {0:s}'.format(
                    exception))

        return file_system
Exemplo n.º 2
0
    def OpenFileSystem(cls, path_spec_object, resolver_context=None):
        """Opens a file system object defined by path specification.

    Args:
      path_spec_object (PathSpec): path specification.
      resolver_context (Optional[Context]): resolver context, where None
          represents the built in context which is not multi process safe.

    Returns:
      FileSystem: file system or None if the path specification could not
          be resolved or has no file system object.

    Raises:
      AccessError: if the access to open the file system was denied.
      BackEndError: if the file system cannot be opened.
      MountPointError: if the mount point specified in the path specification
          does not exist.
      PathSpecError: if the path specification is incorrect.
      TypeError: if the path specification type is unsupported.
    """
        if not isinstance(path_spec_object, path_spec.PathSpec):
            raise TypeError('Unsupported path specification type.')

        if resolver_context is None:
            resolver_context = cls._resolver_context

        if path_spec_object.type_indicator == definitions.TYPE_INDICATOR_MOUNT:
            if path_spec_object.HasParent():
                raise errors.PathSpecError(
                    'Unsupported mount path specification with parent.')

            mount_point = getattr(path_spec_object, 'identifier', None)
            if not mount_point:
                raise errors.PathSpecError(
                    'Unsupported path specification without mount point identifier.'
                )

            path_spec_object = mount_manager.MountPointManager.GetMountPoint(
                mount_point)
            if not path_spec_object:
                raise errors.MountPointError(
                    'No such mount point: {0:s}'.format(mount_point))

        file_system = resolver_context.GetFileSystem(path_spec_object)
        if not file_system:
            resolver_helper = cls._GetResolverHelper(
                path_spec_object.type_indicator)
            file_system = resolver_helper.NewFileSystem(resolver_context)

        try:
            file_system.Open(path_spec_object)
        except (IOError, ValueError) as exception:
            raise errors.BackEndError(
                'Unable to open file system with error: {0!s}'.format(
                    exception))

        return file_system
Exemplo n.º 3
0
    def OpenFileObject(cls, path_spec_object, resolver_context=None):
        """Opens a file-like object defined by path specification.

    Args:
      path_spec_object: the path specification (instance of PathSpec).
      resolver_context: the optional resolver context (instance of
                        resolver.Context). The default is None which will use
                        the built in context which is not multi process safe.

    Returns:
      The file-like object (instance of file.FileIO) or None if the path
      specification could not be resolved.

    Raises:
      KeyError: if resolver helper object is not set for the corresponding
                type indicator.
      PathSpecError: if the path specification is incorrect.
      TypeError: if the path specification type is unsupported.
    """
        if not isinstance(path_spec_object, path_spec.PathSpec):
            raise TypeError(u'Unsupported path specification type.')

        if resolver_context is None:
            resolver_context = cls._resolver_context

        if path_spec_object.type_indicator == definitions.TYPE_INDICATOR_MOUNT:
            if path_spec_object.HasParent():
                raise errors.PathSpecError(
                    u'Unsupported mount path specification with parent.')

            mount_point = getattr(path_spec_object, u'identifier', None)
            if not mount_point:
                raise errors.PathSpecError(
                    u'Unsupported path specification without mount point identifier.'
                )

            path_spec_object = mount_manager.MountPointManager.GetMountPoint(
                mount_point)
            if not path_spec_object:
                raise errors.MountPointError(
                    u'No such mount point: {0:s}'.format(mount_point))

        file_object = resolver_context.GetFileObject(path_spec_object)
        if not file_object:
            if path_spec_object.type_indicator not in cls._resolver_helpers:
                raise KeyError(
                    (u'Resolver helper object not set for type indicator: '
                     u'{0:s}.').format(path_spec_object.type_indicator))

            resolver_helper = cls._resolver_helpers[
                path_spec_object.type_indicator]
            file_object = resolver_helper.NewFileObject(resolver_context)

        file_object.open(path_spec=path_spec_object)
        return file_object
Exemplo n.º 4
0
    def OpenFileObject(cls, path_spec_object, resolver_context=None):
        """Opens a file-like object defined by path specification.

    Args:
      path_spec_object (PathSpec): path specification.
      resolver_context (Optional[Context]): resolver context, where None
          represents the built in context which is not multi process safe.

    Returns:
      FileIO: file-like object or None if the path specification could not
          be resolved.

    Raises:
      MountPointError: if the mount point specified in the path specification
          does not exist.
      PathSpecError: if the path specification is incorrect.
      TypeError: if the path specification type is unsupported.
    """
        if not isinstance(path_spec_object, path_spec.PathSpec):
            raise TypeError('Unsupported path specification type.')

        if resolver_context is None:
            resolver_context = cls._resolver_context

        if path_spec_object.type_indicator == definitions.TYPE_INDICATOR_MOUNT:
            if path_spec_object.HasParent():
                raise errors.PathSpecError(
                    'Unsupported mount path specification with parent.')

            mount_point = getattr(path_spec_object, 'identifier', None)
            if not mount_point:
                raise errors.PathSpecError(
                    'Unsupported path specification without mount point identifier.'
                )

            path_spec_object = mount_manager.MountPointManager.GetMountPoint(
                mount_point)
            if not path_spec_object:
                raise errors.MountPointError(
                    'No such mount point: {0:s}'.format(mount_point))

        file_object = resolver_context.GetFileObject(path_spec_object)
        if not file_object:
            resolver_helper = cls._GetResolverHelper(
                path_spec_object.type_indicator)
            file_object = resolver_helper.NewFileObject(resolver_context)

        file_object.open(path_spec=path_spec_object)
        return file_object