Beispiel #1
0
    def add_parent(self, path, parent_dir):
        _log.info(f"add_parent: {path} -> {parent_dir}")
        _CheckPath(path)
        _CheckPath(parent_dir)
        with self._lock:
            targetPath = join(parent_dir, basename(path))
            idsFromPath = self._itemsFromPath(targetPath)

            # don't allow violation of our requirement to keep filename unique inside new directory
            if targetPath in idsFromPath:
                raise FileExists(targetPath)

            parentDirItem = idsFromPath.get(parent_dir)
            if parentDirItem is None:
                raise ResourceNotFound(parent_dir)

            if parentDirItem["mimeType"] != _folderMimeType:
                raise DirectoryExpected(parent_dir)

            sourceItem = self._itemFromPath(path)
            if sourceItem is None:
                raise ResourceNotFound(path)

            self.drive.files().update(
                fileId=sourceItem["id"],
                addParents=parentDirItem["id"],
                body={}).execute(num_retries=self.retryCount)
Beispiel #2
0
 def openbin(self, path, mode="r", buffering=-1, **options):  # pylint: disable=unused-argument
     _CheckPath(path)
     with self._lock:
         _log.info(f"openbin: {path}, {mode}, {buffering}")
         parsedMode = Mode(mode)
         idsFromPath = self._itemsFromPath(path)
         item = idsFromPath.get(path)
         if parsedMode.exclusive and item is not None:
             raise FileExists(path)
         if parsedMode.reading and not parsedMode.create and item is None:
             raise ResourceNotFound(path)
         if item is not None and item["mimeType"] == _folderMimeType:
             raise FileExpected(path)
         parentDir = dirname(path)
         _log.debug(f"looking up id for {parentDir}")
         parentDirItem = idsFromPath.get(parentDir)
         # make sure that the parent directory exists if we're writing
         if parsedMode.writing and parentDirItem is None:
             raise ResourceNotFound(parentDir)
         return _UploadOnClose(fs=self,
                               path=path,
                               thisMetadata=item,
                               parentMetadata=parentDirItem,
                               parsedMode=parsedMode,
                               **options)
Beispiel #3
0
    def openbin(self, path: str, mode: str = "r",
                buffering: int = -1, **options):
        """Open file from filesystem.

        :param path: Path to file on filesystem
        :param mode: Mode to open file in
        :param buffering: TBD
        returns: `BinaryIO` stream
        """
        path = self.validatepath(path)
        mode = Mode(mode + 'b')
        if mode.create:
            if mode.exclusive:
                try:
                    self.getinfo(path)
                except ResourceNotFound:
                    pass
                else:
                    raise FileExists(path)
            self.create(path)
        if "t" in mode:
            raise ValueError('Text-mode not allowed in openbin')

        try:
            info = self.getinfo(path)
        except ResourceNotFound:
            raise ResourceNotFound(path)
        else:
            if info.is_dir:
                raise FileExpected(path)

        return FatIO(self.fs, path, mode)
 def openbin(self, path, mode='r', buffering=-1, **options):
     _log.info(f'openbin({path}, {mode}, {buffering}, {options})')
     path = self.validatepath(path)
     with self._lock:
         parsedMode = Mode(mode)
         idsFromPath = self._itemsFromPath(path)
         item = idsFromPath.get(path)
         if parsedMode.exclusive and item is not None:
             raise FileExists(path)
         if parsedMode.reading and not parsedMode.create and item is None:
             raise ResourceNotFound(path)
         if item is not None and item['mimeType'] == _folderMimeType:
             raise FileExpected(path)
         parentDir = dirname(path)
         _log.debug(
             f'looking up id for {parentDir} in {list(idsFromPath.keys())}')
         parentDirItem = idsFromPath.get(parentDir)
         # make sure that the parent directory exists if we're writing
         if parsedMode.writing and parentDirItem is None:
             raise ResourceNotFound(parentDir)
         return _UploadOnClose(fs=self,
                               path=path,
                               thisMetadata=item,
                               parentMetadata=parentDirItem,
                               parsedMode=parsedMode,
                               **options)
Beispiel #5
0
 def openbin(self, path, mode="r", buffering=-1, **options):
     _CheckPath(path)
     with self._lock:
         if "t" in mode:
             raise ValueError("Text mode is not allowed in openbin")
         parsedMode = Mode(mode)
         exists = self.exists(path)
         if parsedMode.exclusive and exists:
             raise FileExists(path)
         if parsedMode.reading and not parsedMode.create and not exists:
             raise ResourceNotFound(path)
         if self.isdir(path):
             raise FileExpected(path)
         if parsedMode.writing:
             # make sure that the parent directory exists
             parentDir = dirname(path)
             response = self.session.get(_PathUrl(parentDir, ""))
             if response.status_code == 404:
                 raise ResourceNotFound(parentDir)
             response.raise_for_status()
         itemId = None
         if exists:
             response = self.session.get(_PathUrl(path, ""))
             response.raise_for_status()
             itemId = response.json()["id"]
         return _UploadOnClose(session=self.session,
                               path=path,
                               itemId=itemId,
                               mode=parsedMode)
	def openbin(self, path, mode="r", buffering=-1, **options):
		parsedMode = Mode(mode)
		if parsedMode.exclusive and self.exists(path):
			raise FileExists(path)
		elif parsedMode.reading and not parsedMode.create and not self.exists(path):
			raise ResourceNotFound(path)
		elif self.isdir(path):
			raise FileExpected(path)
		return UploadOnClose(client=self.client, path=path, mode=parsedMode)
 def openbin(self, path, mode="r", buffering=-1, **options):  # pylint: disable=unused-argument
     _CheckPath(path)
     with self._lock:
         info(f"openbin: {path}, {mode}, {buffering}")
         parsedMode = Mode(mode)
         exists = self.exists(path)
         if parsedMode.exclusive and exists:
             raise FileExists(path)
         elif parsedMode.reading and not parsedMode.create and not exists:
             raise ResourceNotFound(path)
         elif self.isdir(path):
             raise FileExpected(path)
         if parsedMode.writing:
             # make sure that the parent directory exists
             parentDir = dirname(path)
             if self._itemFromPath(parentDir) is None:
                 raise ResourceNotFound(parentDir)
         return _UploadOnClose(fs=self, path=path, parsedMode=parsedMode)