def move_remote_file(self, local_file): assert isinstance(local_file, File) assert local_file.is_file assert local_file.locally_moved assert not local_file.is_provider AlertHandler.info(local_file.name, AlertHandler.MOVING) return (yield from self._move_remote_file_folder(local_file))
def upload_folder(self, local_folder): assert isinstance(local_folder, File) assert local_folder.is_folder # PUT /v1/resources/6/providers/osfstorage/21/?kind=folder&name=FUN_FOLDER HTTP/1.1" 200 - params = { 'kind': 'folder', 'name': local_folder.name, } files_url = api_url_for( RESOURCES, node_id=local_folder.node.osf_id, provider=local_folder.provider, file_id=local_folder.parent.osf_id if local_folder.has_parent else None ) resp_json = yield from self.make_request(files_url, method="PUT", params=params, get_json=True) AlertHandler.info(local_folder.name, AlertHandler.UPLOAD) # todo: determine whether uploaded folder will contain api url for its children new_file_id = resp_json['data']['id'].split('/')[1] children_url = api_url_for(NODES, related_type=FILES, node_id=local_folder.node.osf_id, provider=local_folder.provider, file_id=new_file_id) resp_json['data']['relationships'] = { 'files': { 'links': { 'related': { 'href': children_url } } } } # https://staging-api.osf.io/v2/nodes/4e6k8/files/osfstorage/562134f1029bdb6c230f2874/ # ['relationships']['files']['links']['related']['href'] return dict_to_remote_object(resp_json['data'])
def upload_file(self, local_file): """ THROWS FileNotFoundError !!!!!! :param local_file: :return: """ assert isinstance(local_file, File) assert local_file.is_file # /v1/resources/6/providers/osfstorage/21/?kind=file&name=FUN_FILE HTTP/1.1" 200 - params = {'provider': local_file.provider, 'name': local_file.name} parent_osf_id = local_file.parent.osf_id if local_file.has_parent else None files_url = api_url_for(RESOURCES, node_id=local_file.node.osf_id, provider=local_file.provider, file_id=parent_osf_id) file = open(local_file.path, 'rb') resp_json = yield from self.make_request(files_url, method="PUT", params=params, data=file, get_json=True) AlertHandler.info(local_file.name, AlertHandler.UPLOAD) return RemoteFile(resp_json['data'])
def run(self): file_to_delete = ProperPath(self.path, is_dir=False) AlertHandler.info(file_to_delete.name, AlertHandler.DELETING) try: os.remove(file_to_delete.full_path) except FileNotFoundError: logging.warning( 'file not deleted because does not exist on local filesystem. inside delete_local_file_folder (2)')
def run(self): try: new_file_path = ProperPath(self.path, is_dir=False) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception('Exception caught: Invalid target path for new file.') return AlertHandler.info(new_file_path.name, AlertHandler.DOWNLOAD) yield from _download_file(new_file_path, self.download_url, self.osf_query)
def run(self): file_to_delete = ProperPath(self.path, is_dir=False) AlertHandler.info(file_to_delete.name, AlertHandler.DELETING) try: os.remove(file_to_delete.full_path) except FileNotFoundError: logging.warning( 'file not deleted because does not exist on local filesystem. inside delete_local_file_folder (2)' )
def _rename(old_path, new_path): if not isinstance(old_path, ProperPath): logging.error("Old path for rename is not a ProperPath.") if not isinstance(new_path, ProperPath): logging.error("Old path for rename is not a ProperPath.") try: AlertHandler.info(new_path.name, AlertHandler.MODIFYING) os.renames(old_path.full_path, new_path.full_path) except FileNotFoundError: logging.warning('renaming of file/folder failed because file/folder not there')
def run(self): try: new_file_path = ProperPath(self.path, is_dir=False) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception( 'Exception caught: Invalid target path for new file.') return AlertHandler.info(new_file_path.name, AlertHandler.DOWNLOAD) yield from _download_file(new_file_path, self.download_url, self.osf_query)
def _rename(old_path, new_path): if not isinstance(old_path, ProperPath): logging.error("Old path for rename is not a ProperPath.") if not isinstance(new_path, ProperPath): logging.error("Old path for rename is not a ProperPath.") try: AlertHandler.info(new_path.name, AlertHandler.MODIFYING) os.renames(old_path.full_path, new_path.full_path) except FileNotFoundError: logging.warning( 'renaming of file/folder failed because file/folder not there')
def run(self): if not isinstance(self.osf_query, OSFQuery): logging.error('Update file query is not an instance of OSFQuery') return if not isinstance(self.download_url, str): logging.error('Update file download_url is not a str.') return try: updated_file_path = ProperPath(self.path, is_dir=False) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception('Exception caught: Invalid target path for updated file.') return AlertHandler.info(updated_file_path.name, AlertHandler.MODIFYING) yield from _download_file(updated_file_path, self.download_url, self.osf_query)
def run(self): try: old_file_path = ProperPath(self.old_path, is_dir=False) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception('Exception caught: Invalid origin path for renamed file.') return try: new_file_path = ProperPath(self.new_path, is_dir=False) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception('Exception caught: Invalid target path for renamed folder.') return AlertHandler.info(new_file_path.name, AlertHandler.MODIFYING) yield from _rename(old_file_path, new_file_path)
def run(self): # create local node folder on filesystem try: folder_to_create = ProperPath(self.path, is_dir=True) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception('Exception caught: Invalid target path for folder.') return if not os.path.exists(folder_to_create.full_path): AlertHandler.info(folder_to_create.name, AlertHandler.DOWNLOAD) try: os.makedirs(folder_to_create.full_path) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception('Exception caught: Problem making a directory.') return
def run(self): if not isinstance(self.osf_query, OSFQuery): logging.error('Update file query is not an instance of OSFQuery') return if not isinstance(self.download_url, str): logging.error('Update file download_url is not a str.') return try: updated_file_path = ProperPath(self.path, is_dir=False) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception( 'Exception caught: Invalid target path for updated file.') return AlertHandler.info(updated_file_path.name, AlertHandler.MODIFYING) yield from _download_file(updated_file_path, self.download_url, self.osf_query)
def run(self): # create local node folder on filesystem try: folder_to_create = ProperPath(self.path, is_dir=True) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception( 'Exception caught: Invalid target path for folder.') return if not os.path.exists(folder_to_create.full_path): AlertHandler.info(folder_to_create.name, AlertHandler.DOWNLOAD) try: os.makedirs(folder_to_create.full_path) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception( 'Exception caught: Problem making a directory.') return
def run(self): try: folder_to_delete = ProperPath(self.path, is_dir=True) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception('Exception caught: Invalid source path for deleted folder.') return AlertHandler.info(folder_to_delete.name, AlertHandler.DELETING) try: shutil.rmtree( folder_to_delete.full_path, onerror=lambda a, b, c: logging.warning('local node not deleted because it does not exist.') ) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception('Exception caught: Problem removing the tree.') return
def run(self): try: old_folder_path = ProperPath(self.old_path, is_dir=True) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception( 'Exception caught: Invalid origin path for renamed folder.') return try: new_folder_path = ProperPath(self.new_path, is_dir=True) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception( 'Exception caught: Invalid target path for renamed folder.') return AlertHandler.info(new_folder_path.name, AlertHandler.MODIFYING) yield from _rename(old_folder_path, new_folder_path)
def run(self): try: folder_to_delete = ProperPath(self.path, is_dir=True) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception( 'Exception caught: Invalid source path for deleted folder.') return AlertHandler.info(folder_to_delete.name, AlertHandler.DELETING) try: shutil.rmtree( folder_to_delete.full_path, onerror=lambda a, b, c: logging.warning( 'local node not deleted because it does not exist.')) except Exception: # TODO: Narrow down this exception and do client side warnings logging.exception('Exception caught: Problem removing the tree.') return
def upload_folder(self, local_folder): assert isinstance(local_folder, File) assert local_folder.is_folder # PUT /v1/resources/6/providers/osfstorage/21/?kind=folder&name=FUN_FOLDER HTTP/1.1" 200 - params = { 'kind': 'folder', 'name': local_folder.name, } files_url = api_url_for(RESOURCES, node_id=local_folder.node.osf_id, provider=local_folder.provider, file_id=local_folder.parent.osf_id if local_folder.has_parent else None) resp_json = yield from self.make_request(files_url, method="PUT", params=params, get_json=True) AlertHandler.info(local_folder.name, AlertHandler.UPLOAD) # todo: determine whether uploaded folder will contain api url for its children new_file_id = resp_json['data']['id'].split('/')[1] children_url = api_url_for(NODES, related_type=FILES, node_id=local_folder.node.osf_id, provider=local_folder.provider, file_id=new_file_id) resp_json['data']['relationships'] = { 'files': { 'links': { 'related': { 'href': children_url } } } } # https://staging-api.osf.io/v2/nodes/4e6k8/files/osfstorage/562134f1029bdb6c230f2874/ # ['relationships']['files']['links']['related']['href'] return dict_to_remote_object(resp_json['data'])
def upload_file(self, local_file): """ THROWS FileNotFoundError !!!!!! :param local_file: :return: """ assert isinstance(local_file, File) assert local_file.is_file # /v1/resources/6/providers/osfstorage/21/?kind=file&name=FUN_FILE HTTP/1.1" 200 - params = { 'provider': local_file.provider, 'name': local_file.name } parent_osf_id = local_file.parent.osf_id if local_file.has_parent else None files_url = api_url_for(RESOURCES, node_id=local_file.node.osf_id, provider=local_file.provider, file_id=parent_osf_id) file = open(local_file.path, 'rb') resp_json = yield from self.make_request(files_url, method="PUT", params=params, data=file, get_json=True) AlertHandler.info(local_file.name, AlertHandler.UPLOAD) return RemoteFile(resp_json['data'])
def rename_remote_folder(self, local_folder, remote_folder): assert isinstance(local_folder, File) assert local_folder.is_folder assert isinstance(remote_folder, RemoteFolder) AlertHandler.info(local_folder.name, AlertHandler.MODIFYING) return (yield from self._rename_remote(local_folder, remote_folder))
def delete_remote_folder(self, remote_folder): assert isinstance(remote_folder, RemoteFolder) yield from self._delete_file_folder(remote_folder) AlertHandler.info(remote_folder.name, AlertHandler.DELETING)