Exemplo n.º 1
0
    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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
    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
Exemplo n.º 9
0
    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)
Exemplo n.º 10
0
    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)