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)
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)
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)
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)