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 get_child_files(self, remote_node_or_folder): assert isinstance(remote_node_or_folder, RemoteNode) or isinstance( remote_node_or_folder, RemoteFolder) file_folders = yield from self._get_all_paginated_members( remote_node_or_folder.child_files_url) return [ dict_to_remote_object(file_folder) for file_folder in file_folders ]
def get_children_file_folders(parent_folder): assert isinstance(parent_folder, RemoteFolder) url = parent_folder.child_files_url resp = session.get(url) assert resp.ok return [ dict_to_remote_object(file_folder) for file_folder in resp.json()['data'] ]
def get_node_file_folders(node_id): node_files_url = api_node_files(node_id) resp = session.get(node_files_url) assert resp.ok osf_storage_folder = RemoteFolder(resp.json()['data'][0]) assert osf_storage_folder.provider == osf_storage_folder.name children_resp = session.get(osf_storage_folder.child_files_url) assert children_resp.ok return [dict_to_remote_object(file_folder) for file_folder in children_resp.json()['data']]
def create_osf_node(title, parent=None): if parent: url = api_create_node(parent.id) resp = session.post(url, data={'title':title}) assert resp.ok base = furl(resp.headers['Location']) new_node_id = base.path.segments[0] url = api_node_self(new_node_id) resp = session.get(url) assert resp.ok new_node_dict = resp.json()['data'] return dict_to_remote_object(new_node_dict) else: url = api_create_node() resp = session.post(url, data={'title':title}) assert resp.ok return dict_to_remote_object(resp.json()['data'])
def create_osf_node(title, parent=None): if parent: url = api_create_node(parent.id) resp = session.post(url, data={'title': title}) assert resp.ok base = furl(resp.headers['Location']) new_node_id = base.path.segments[0] url = api_node_self(new_node_id) resp = session.get(url) assert resp.ok new_node_dict = resp.json()['data'] return dict_to_remote_object(new_node_dict) else: url = api_create_node() resp = session.post(url, data={'title': title}) assert resp.ok return dict_to_remote_object(resp.json()['data'])
def get_node_file_folders(node_id): node_files_url = api_url_for(NODES, related_type=FILES, node_id=node_id) resp = session.get(node_files_url) assert resp.ok osf_storage_folder = RemoteFolder(resp.json()["data"][0]) assert osf_storage_folder.provider == osf_storage_folder.name children_resp = session.get(osf_storage_folder.child_files_url) assert children_resp.ok return [dict_to_remote_object(file_folder) for file_folder in children_resp.json()["data"]]
def get_node_file_folders(node_id): node_files_url = api_node_files(node_id) resp = session.get(node_files_url) assert resp.ok osf_storage_folder = RemoteFolder(resp.json()['data'][0]) assert osf_storage_folder.provider == osf_storage_folder.name children_resp = session.get(osf_storage_folder.child_files_url) assert children_resp.ok return [ dict_to_remote_object(file_folder) for file_folder in children_resp.json()['data'] ]
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 get_node_by_node_id(node_id): url = api_node_self(node_id) resp = session.get(url) assert resp.ok return dict_to_remote_object(resp.json()['data'])
def download_file(self, remote_file): assert isinstance(remote_file, RemoteFile) file = yield from self.make_request(remote_file.download_url) return dict_to_remote_object(file)
def get_child_nodes(self, remote_node): assert isinstance(remote_node, RemoteNode) nodes = yield from self._get_all_paginated_members( remote_node.child_nodes_url) return [dict_to_remote_object(node) for node in nodes]
def get_child_files(self, remote_node_or_folder): assert isinstance(remote_node_or_folder, RemoteNode) or isinstance(remote_node_or_folder, RemoteFolder) file_folders = yield from self._get_all_paginated_members(remote_node_or_folder.child_files_url) return [dict_to_remote_object(file_folder) for file_folder in file_folders]
def get_child_nodes(self, remote_node): assert isinstance(remote_node, RemoteNode) nodes = yield from self._get_all_paginated_members(remote_node.child_nodes_url) return [dict_to_remote_object(node) for node in nodes]
def get_children_file_folders(parent_folder): assert isinstance(parent_folder, RemoteFolder) url = parent_folder.child_files_url resp = session.get(url) assert resp.ok return [dict_to_remote_object(file_folder) for file_folder in resp.json()["data"]]