Exemplo n.º 1
0
    def test_public_folder_metadata(self, project_article_type_3_metadata):
        data = FigshareFolderMetadata(
            project_article_type_3_metadata['public'])

        assert data.id == 8263811
        assert data.name == 'Dataset'
        assert data.extra.get('status') == 'public'
Exemplo n.º 2
0
    async def create_folder(self, path, **kwargs):
        """Create a folder at ``path``. Returns a `FigshareFolderMetadata` object if successful.

        :param FigsharePath path: FigsharePath representing the folder to create
        :rtype: :class:`waterbutler.core.metadata.FigshareFolderMetadata`
        :raises: :class:`waterbutler.core.exceptions.CreateFolderError`
        """
        if (len(path.parts) == 2) and path.is_folder:
            article_name = path.parts[-1].value
        else:
            raise exceptions.CreateFolderError(
                'Only projects and collections may contain folders. Unable to create '
                '"{}/"'.format(path.name),
                code=400,
            )

        # Quirks: use Dataset (3) as the article type during figshare folder creation instead of the
        #         deprecated Fileset (4).  Internally figshare converts Fileset to Dataset anyway.
        article_data = json.dumps({'title': article_name, 'defined_type': 'dataset'})
        article_id = await self._create_article(article_data)
        get_article_response = await self.make_request(
            'GET',
            self.build_url(False, *self.root_path_parts, 'articles', article_id),
            expects=(200, ),
            throws=exceptions.CreateFolderError,
        )
        article_json = await get_article_response.json()

        return FigshareFolderMetadata(article_json)
Exemplo n.º 3
0
    async def _get_article_metadata(self, article_id, is_public: bool):
        """Return Figshare*Metadata object for given article_id. Returns a FolderMetadata object
        for filesets, a FileMetadat object for other article types, and ``None`` if the article
        is not a fileset and has no files attached.

        Defined separately to allow for taking advantage of ``asyncio.gather``.

        :param str article_id: id of article whose metadata is requested
        :param bool is_public: ``True`` if article is accessed through public URN
        """
        response = await self.make_request(
            'GET',
            self.build_url(is_public, *self.root_path_parts, 'articles', article_id),
            expects=(200, ),
        )
        article_json = await response.json()
        if article_json['defined_type'] in pd_settings.FOLDER_TYPES:
            return FigshareFolderMetadata(article_json)
        elif article_json['files']:
            return FigshareFileMetadata(article_json)

        return None  # article without attached file
Exemplo n.º 4
0
    def test_private_folder_metadata(self, project_article_type_3_metadata):
        data = FigshareFolderMetadata(project_article_type_3_metadata['private'])

        assert data.id == 8269766
        assert data.name == 'DatasetPrivate'
        assert data.path == '/8269766/'
        assert data.materialized_path == '/DatasetPrivate/'
        assert data.size is None
        assert data.modified == '2019-06-13T16:00:12Z'
        assert data.created_utc is None
        assert data.etag == 'draft::::8269766'
        assert data.kind == 'folder'
        assert data.extra == {
            'id': 8269766,
            'doi': '',
            'status': 'draft'
        }

        assert data.serialized() == {
            'extra': {
                'id': 8269766,
                'doi': '',
                'status': 'draft'
            },
            'kind': 'folder',
            'name': 'DatasetPrivate',
            'path': '/8269766/',
            'provider': 'figshare',
            'materialized': '/DatasetPrivate/',
            'etag': 'd7dc67b05e9c50c8adefabc9e2ff2cfaabad26913e8c9916396f067216941389'
        }

        api_url = 'http://localhost:7777/v1/resources/45hjnz/providers/figshare/8269766/'
        assert data.json_api_serialized('45hjnz') == {
            'id': 'figshare/8269766/',
            'type': 'files',
            'attributes': {
                'extra': {
                    'id': 8269766,
                    'doi': '',
                    'status': 'draft'
                },
                'kind': 'folder',
                'name': 'DatasetPrivate',
                'path': '/8269766/',
                'provider': 'figshare',
                'materialized': '/DatasetPrivate/',
                'etag': 'd7dc67b05e9c50c8adefabc9e2ff2cfaabad26913e8c9916396f067216941389',
                'resource': '45hjnz',
                'size': None,
                'sizeInt': None,
            },
            'links': {
                'move': api_url,
                'upload': '{}?kind=file'.format(api_url),
                'delete': api_url,
                'new_folder': '{}?kind=folder'.format(api_url),
            }
        }

        assert data._json_api_links('45hjnz') == {
            'move': api_url,
            'upload': '{}?kind=file'.format(api_url),
            'delete': api_url,
            'new_folder': '{}?kind=folder'.format(api_url),
        }
Exemplo n.º 5
0
    def test_folder_metadata(self, root_provider_fixtures):
        data = FigshareFolderMetadata(root_provider_fixtures['folder_article_metadata'])

        assert data.id == 4040019
        assert data.name == 'folder_article'
        assert data.path == '/4040019/'
        assert data.materialized_path == '/folder_article/'
        assert data.size is None
        assert data.modified == '2016-10-18T20:47:25Z'
        assert data.created_utc is None
        assert data.etag == 'draft::::4040019'
        assert data.kind == 'folder'
        assert data.extra == {
            'id': 4040019,
            'doi': '',
            'status': 'draft'
        }

        assert data.serialized() == {
            'extra': {
                'id': 4040019,
                'doi': '',
                'status': 'draft'
            },
            'kind': 'folder',
            'name': 'folder_article',
            'path': '/4040019/',
            'provider': 'figshare',
            'materialized': '/folder_article/',
            'etag': '6bef522e6f14597fd939b6b5c29e99091dc0b0badcac332da6e75bec0a69cf5e'
        }

        api_url = 'http://localhost:7777/v1/resources/45hjnz/providers/figshare/4040019/'
        assert data.json_api_serialized('45hjnz') == {
            'id': 'figshare/4040019/',
            'type': 'files',
            'attributes': {
                'extra': {
                    'id': 4040019,
                    'doi': '',
                    'status': 'draft'
                },
                'kind': 'folder',
                'name': 'folder_article',
                'path': '/4040019/',
                'provider': 'figshare',
                'materialized': '/folder_article/',
                'etag': '6bef522e6f14597fd939b6b5c29e99091dc0b0badcac332da6e75bec0a69cf5e',
                'resource': '45hjnz',
                'size': None
            },
            'links': {
                'move': api_url,
                'upload': '{}?kind=file'.format(api_url),
                'delete': api_url,
                'new_folder': '{}?kind=folder'.format(api_url),
            }
        }

        assert data._json_api_links('45hjnz') == {
            'move': api_url,
            'upload': '{}?kind=file'.format(api_url),
            'delete': api_url,
            'new_folder': '{}?kind=folder'.format(api_url),
        }
    def test_folder_metadata(self, root_provider_fixtures):
        data = FigshareFolderMetadata(root_provider_fixtures['folder_article_metadata'])

        assert data.id == 4040019
        assert data.name == 'folder_article'
        assert data.path == '/4040019/'
        assert data.materialized_path == '/folder_article/'
        assert data.size is None
        assert data.modified == '2016-10-18T20:47:25Z'
        assert data.created_utc is None
        assert data.etag == 'draft::::4040019'
        assert data.kind == 'folder'
        assert data.extra == {
            'id': 4040019,
            'doi': '',
            'status': 'draft'
        }

        assert data.serialized() == {
            'extra': {
                'id': 4040019,
                'doi': '',
                'status': 'draft'
            },
            'kind': 'folder',
            'name': 'folder_article',
            'path': '/4040019/',
            'provider': 'figshare',
            'materialized': '/folder_article/',
            'etag': '6bef522e6f14597fd939b6b5c29e99091dc0b0badcac332da6e75bec0a69cf5e'
        }

        api_url = 'http://localhost:7777/v1/resources/45hjnz/providers/figshare/4040019/'
        assert data.json_api_serialized('45hjnz') == {
            'id': 'figshare/4040019/',
            'type': 'files',
            'attributes': {
                'extra': {
                    'id': 4040019,
                    'doi': '',
                    'status': 'draft'
                },
                'kind': 'folder',
                'name': 'folder_article',
                'path': '/4040019/',
                'provider': 'figshare',
                'materialized': '/folder_article/',
                'etag': '6bef522e6f14597fd939b6b5c29e99091dc0b0badcac332da6e75bec0a69cf5e',
                'resource': '45hjnz',
                'size': None,
                'sizeInt': None,
            },
            'links': {
                'move': api_url,
                'upload': '{}?kind=file'.format(api_url),
                'delete': api_url,
                'new_folder': '{}?kind=folder'.format(api_url),
            }
        }

        assert data._json_api_links('45hjnz') == {
            'move': api_url,
            'upload': '{}?kind=file'.format(api_url),
            'delete': api_url,
            'new_folder': '{}?kind=folder'.format(api_url),
        }