async def test_intra_move_folder(self, provider, intra_fixtures, root_provider_fixtures): item = intra_fixtures['intra_folder_metadata'] list_metadata = root_provider_fixtures['folder_list_metadata'] src_path = WaterButlerPath('/name/', _ids=(provider, item['id'])) dest_path = WaterButlerPath('/charmander/name/', _ids=(provider, item['id'])) file_url = provider.build_url('folders', src_path.identifier) list_url = provider.build_url( 'folders', item['id'], 'items', fields='id,name,size,modified_at,etag,total_count', offset=0, limit=1000) aiohttpretty.register_json_uri('PUT', file_url, body=item) aiohttpretty.register_json_uri('GET', list_url, body=list_metadata) expected_folder = BoxFolderMetadata(item, dest_path) expected_folder._children = [] for child_item in list_metadata['entries']: child_path = dest_path.child( child_item['name'], folder=(child_item['type'] == 'folder')) serialized_child = provider._serialize_item(child_item, child_path) expected_folder._children.append(serialized_child) expected = (expected_folder, True) result = await provider.intra_move(provider, src_path, dest_path) assert result == expected
async def test_intra_move_folder_replace(self, provider, intra_fixtures, root_provider_fixtures): item = intra_fixtures['intra_folder_metadata'] list_metadata = root_provider_fixtures['folder_list_metadata'] src_path = WaterButlerPath('/name/', _ids=(provider, item['id'])) dest_path = WaterButlerPath('/charmander/name/', _ids=(provider, item['id'], item['id'])) file_url = provider.build_url('folders', src_path.identifier) delete_url = provider.build_url('folders', dest_path.identifier, recursive=True) list_url = provider.build_url('folders', item['id'], 'items', fields='id,name,size,modified_at,etag,total_count', offset=0, limit=1000) aiohttpretty.register_json_uri('PUT', file_url, body=item) aiohttpretty.register_uri('DELETE', delete_url, status=204) aiohttpretty.register_json_uri('GET', list_url, body=list_metadata) expected_folder = BoxFolderMetadata(item, dest_path) expected_folder._children = [] for child_item in list_metadata['entries']: child_path = dest_path.child(child_item['name'], folder=(child_item['type'] == 'folder')) serialized_child = provider._serialize_item(child_item, child_path) expected_folder._children.append(serialized_child) expected = (expected_folder, False) result = await provider.intra_move(provider, src_path, dest_path) assert result == expected assert aiohttpretty.has_call(method='DELETE', uri=delete_url)
async def test_intra_copy_folder(self, provider, intra_fixtures, root_provider_fixtures): item = intra_fixtures['intra_folder_metadata'] list_metadata = root_provider_fixtures['folder_list_metadata'] src_path = WaterButlerPath('/name/', _ids=(provider, item['id'])) dest_path = WaterButlerPath('/charmander/name/', _ids=(provider, item['id'])) file_url = provider.build_url('folders', src_path.identifier, 'copy') list_url = provider.build_url('folders', item['id'], 'items', fields='id,name,size,modified_at,etag,total_count', offset=0, limit=1000) aiohttpretty.register_json_uri('GET', list_url, body=list_metadata) aiohttpretty.register_json_uri('POST', file_url, body=item) expected_folder = BoxFolderMetadata(item, dest_path) expected_folder._children = [] for child_item in list_metadata['entries']: child_path = dest_path.child(child_item['name'], folder=(child_item['type'] == 'folder')) serialized_child = provider._serialize_item(child_item, child_path) expected_folder._children.append(serialized_child) expected = (expected_folder, True) result = await provider.intra_copy(provider, src_path, dest_path) assert result == expected
def test_folder_metadata(self, intra_fixtures): item = intra_fixtures['intra_folder_metadata'] dest_path = WaterButlerPath('/moveablefolder/', _ids=('0', item['id']), folder=True) data = BoxFolderMetadata(item, dest_path) assert data.name == 'moveablefolder' assert data.path == '/36833297084/' assert data.provider == 'box' assert data.materialized_path == '/moveablefolder/' assert data.is_folder is True assert data.serialized() == { 'extra': {}, 'kind': 'folder', 'name': 'moveablefolder', 'path': '/36833297084/', 'provider': 'box', 'materialized': '/moveablefolder/', 'etag': '299a515e98fe1c548c6fe6141d01a43e739cf965b0d324aa0961924162f7af79' } assert data.json_api_serialized('7ycmyr') == { 'id': 'box/36833297084/', 'type': 'files', 'attributes': { 'extra': {}, 'kind': 'folder', 'name': 'moveablefolder', 'path': '/36833297084/', 'provider': 'box', 'materialized': '/moveablefolder/', 'etag': '299a515e98fe1c548c6fe6141d01a43e739cf965b0d324aa0961924162f7af79', 'resource': '7ycmyr', 'size': None, 'sizeInt': None, }, 'links': { 'move': 'http://localhost:7777/v1/resources/7ycmyr/providers/box/36833297084/', 'upload': ('http://localhost:7777/v1/resources/' '7ycmyr/providers/box/36833297084/?kind=file'), 'delete': 'http://localhost:7777/v1/resources/7ycmyr/providers/box/36833297084/', 'new_folder': ('http://localhost:7777/v1/resources/' '7ycmyr/providers/box/36833297084/?kind=folder') } } assert data.children is None assert data.kind == 'folder' assert data.etag is None
def test_metadata(self, provider, folder_object_metadata, folder_list_metadata): path = WaterButlerPath('/', _ids=(provider.folder, )) list_url = provider.build_url('folders', provider.folder, 'items', fields='id,name,size,modified_at,etag') aiohttpretty.register_json_uri('GET', list_url, body=folder_list_metadata) result = yield from provider.metadata(path) expected = [] for x in folder_list_metadata['entries']: if x['type'] == 'file': expected.append(BoxFileMetadata(x, path.child(x['name']))) else: expected.append( BoxFolderMetadata(x, path.child(x['name'], folder=True))) assert result == expected
async def create_folder(self, path: wb_path.WaterButlerPath, folder_precheck: bool=True, **kwargs) -> BoxFolderMetadata: wb_path.WaterButlerPath.validate_folder(path) if folder_precheck: if path.identifier is not None: raise exceptions.FolderNamingConflict(path.name) async with self.request( 'POST', self.build_url('folders'), data={ 'name': path.name, 'parent': { 'id': path.parent.identifier } }, expects=(201, 409), throws=exceptions.CreateFolderError, ) as resp: # Catch 409s to avoid race conditions if resp.status == 409: raise exceptions.FolderNamingConflict(path.name) resp_json = await resp.json() # save new folder's id into the WaterButlerPath object. logs will need it later. path._parts[-1]._id = resp_json['id'] return BoxFolderMetadata(resp_json, path)
def create_folder(self, path, **kwargs): WaterButlerPath.validate_folder(path) if path.identifier is not None: raise exceptions.FolderNamingConflict(str(path)) resp = yield from self.make_request( 'POST', self.build_url('folders'), data={ 'name': path.name, 'parent': { 'id': path.parent.identifier } }, expects=(201, 409), throws=exceptions.CreateFolderError, ) # Catch 409s to avoid race conditions if resp.status == 409: raise exceptions.FolderNamingConflict(str(path)) resp_json = yield from resp.json() # save new folder's id into the WaterButlerPath object. logs will need it later. path._parts[-1]._id = resp_json['id'] return BoxFolderMetadata(resp_json, path)
async def test_metadata(self, provider, root_provider_fixtures): path = WaterButlerPath('/', _ids=(provider.folder, )) list_url = provider.build_url( 'folders', provider.folder, 'items', fields='id,name,size,modified_at,etag,total_count', offset=0, limit=1000) list_metadata = root_provider_fixtures['folder_list_metadata'] aiohttpretty.register_json_uri('GET', list_url, body=list_metadata) result = await provider.metadata(path) expected = [] for x in list_metadata['entries']: if x['type'] == 'file': expected.append(BoxFileMetadata(x, path.child(x['name']))) else: expected.append( BoxFolderMetadata(x, path.child(x['name'], folder=True))) assert result == expected
async def test_intra_copy_folder_replace(self, provider, intra_fixtures, root_provider_fixtures): item = intra_fixtures['intra_folder_metadata'] list_metadata = root_provider_fixtures['folder_list_metadata'] src_path = WaterButlerPath('/name/', _ids=(provider, item['id'])) dest_path = WaterButlerPath('/charmander/name/', _ids=(provider, item['id'], item['id'])) file_url = provider.build_url('folders', src_path.identifier, 'copy') delete_url = provider.build_url('folders', dest_path.identifier, recursive=True) list_url = provider.build_url( 'folders', item['id'], 'items', fields='id,name,size,modified_at,etag,total_count', offset=0, limit=1000) aiohttpretty.register_json_uri('GET', list_url, body=list_metadata) aiohttpretty.register_uri('DELETE', delete_url, status=204) aiohttpretty.register_json_uri('POST', file_url, body=item) expected_folder = BoxFolderMetadata(item, dest_path) expected_folder._children = [] for child_item in list_metadata['entries']: child_path = dest_path.child( child_item['name'], folder=(child_item['type'] == 'folder')) serialized_child = provider._serialize_item(child_item, child_path) expected_folder._children.append(serialized_child) expected = (expected_folder, False) result = await provider.intra_copy(provider, src_path, dest_path) assert result == expected assert aiohttpretty.has_call(method='DELETE', uri=delete_url)
def create_folder(self, path, **kwargs): WaterButlerPath.validate_folder(path) if path.identifier is not None: raise exceptions.FolderNamingConflict(str(path)) resp = yield from self.make_request( 'POST', self.build_url('folders'), data={ 'name': path.name, 'parent': { 'id': path.parent.identifier } }, expects=(201, 409), throws=exceptions.CreateFolderError, ) # Catch 409s to avoid race conditions if resp.status == 409: raise exceptions.FolderNamingConflict(str(path)) return BoxFolderMetadata((yield from resp.json()), path)