Esempio n. 1
0
 def _get_fileobj_child_metadata(self, filenode, user, cookie=None, version=None):
     kwargs = dict(
         provider=self.config.short_name,
         path=filenode.get('path', ''),
         node=self.owner,
         user=user,
         view_only=True,
     )
     if cookie:
         kwargs['cookie'] = cookie
     if version:
         kwargs['version'] = version
     metadata_url = waterbutler_url_for(
         'metadata',
         **kwargs
     )
     res = requests.get(metadata_url)
     if res.status_code != 200:
         # The Dataverse API returns a 404 if the dataset has no published files
         if res.status_code == http.NOT_FOUND and version == 'latest-published':
             return []
         raise HTTPError(res.status_code, data={
             'error': res.json(),
         })
     # TODO: better throttling?
     sleep(1.0 / 5.0)
     return res.json().get('data', [])
Esempio n. 2
0
 def _get_fileobj_child_metadata(self,
                                 filenode,
                                 user,
                                 cookie=None,
                                 version=None):
     kwargs = dict(
         provider=self.config.short_name,
         path=filenode.get('path', ''),
         node=self.owner,
         user=user,
         view_only=True,
     )
     if cookie:
         kwargs['cookie'] = cookie
     if version:
         kwargs['version'] = version
     metadata_url = waterbutler_url_for('metadata', **kwargs)
     res = requests.get(metadata_url)
     if res.status_code != 200:
         # The Dataverse API returns a 404 if the dataset has no published files
         if res.status_code == http.NOT_FOUND and version == 'latest-published':
             return []
         raise HTTPError(res.status_code, data={
             'error': res.json(),
         })
     # TODO: better throttling?
     sleep(1.0 / 5.0)
     return res.json().get('data', [])
Esempio n. 3
0
    def _test__get_file_tree(self, addon_short_name):
        requests_made = []
        def callback(request, uri, headers):
            path = request.querystring['path'][0]
            requests_made.append(path)
            return (200, headers, json.dumps(self.RESP_MAP[path]))

        for path in self.RESP_MAP.keys():
            url = waterbutler_url_for(
                'metadata',
                provider=addon_short_name,
                path=path,
                node=self.src,
                user=self.user,
                view_only=True,
                _internal=True,
            )
            httpretty.register_uri(httpretty.GET,
                                   url,
                                   body=callback,
                                   content_type='applcation/json')
        addon = self.src.get_or_add_addon(addon_short_name, auth=self.auth)
        root = {
            'path': '/',
            'name': '',
            'kind': 'folder',
        }
        file_tree = addon._get_file_tree(root, self.user)
        assert_equal(FILE_TREE, file_tree)
        assert_equal(requests_made, ['/', '/qwerty'])  # no requests made for files
Esempio n. 4
0
 def _get_fileobj_child_metadata(self, filenode, user, cookie=None, version=None):
     kwargs = dict(
         provider=self.config.short_name,
         path=filenode.get('path', ''),
         node=self.owner,
         user=user,
         view_only=True,
     )
     if cookie:
         kwargs['cookie'] = cookie
     if version:
         kwargs['version'] = version
     metadata_url = waterbutler_url_for(
         'metadata',
         _internal=True,
         **kwargs
     )
     res = requests.get(metadata_url)
     if res.status_code != 200:
         raise HTTPError(res.status_code, data={
             'error': res.json(),
         })
     # TODO: better throttling?
     sleep(1.0 / 5.0)
     return res.json().get('data', [])
Esempio n. 5
0
    def _test__get_file_tree(self, addon_short_name):
        requests_made = []
        def callback(request, uri, headers):
            path = request.querystring['path'][0]
            requests_made.append(path)
            return (200, headers, json.dumps(self.RESP_MAP[path]))

        for path in self.RESP_MAP.keys():
            url = waterbutler_url_for(
                'metadata',
                provider=addon_short_name,
                path=path,
                node=self.src,
                user=self.user,
                view_only=True,
            )
            httpretty.register_uri(httpretty.GET,
                                   url,
                                   body=callback,
                                   content_type='applcation/json')
        addon = self.src.get_or_add_addon(addon_short_name, auth=self.auth)
        root = {
            'path': '/',
            'name': '',
            'kind': 'folder',
        }
        file_tree = addon._get_file_tree(root, self.user)
        assert_equal(FILE_TREE, file_tree)
        assert_equal(requests_made, ['/', '/qwerty'])  # no requests made for files
Esempio n. 6
0
    def _get_fileobj_child_metadata(self,
                                    filenode,
                                    user,
                                    cookie=None,
                                    version=None):
        kwargs = dict(
            provider=self.config.short_name,
            path=filenode.get('path', ''),
            node=self.owner,
            user=user,
            view_only=True,
        )
        if cookie:
            kwargs['cookie'] = cookie
        if version:
            kwargs['version'] = version
        metadata_url = waterbutler_url_for('metadata',
                                           _internal=True,
                                           **kwargs)

        res = requests.get(metadata_url)
        if res.status_code != 200:
            raise HTTPError(res.status_code, data={'error': res.json()})

        # TODO: better throttling?
        time.sleep(1.0 / 5.0)
        return res.json().get('data', [])
Esempio n. 7
0
    def test_waterbutler_url_for(self):
        with self.app.test_request_context():
            url = waterbutler_url_for('upload', 'provider', 'path', mock.Mock(_id='_id'))

        assert_in('nid=_id', url)
        assert_in('/file?', url)
        assert_in('path=path', url)
        assert_in('provider=provider', url)
Esempio n. 8
0
    def test_waterbutler_url_for(self):
        with self.app.test_request_context():
            url = waterbutler_url_for('upload', 'provider', 'path', mock.Mock(_id='_id'))

        assert_in('nid=_id', url)
        assert_in('/file?', url)
        assert_in('path=path', url)
        assert_in('provider=provider', url)
Esempio n. 9
0
def upload_attachment(user, node, attachment):
    attachment.seek(0)
    name = '/' + (attachment.filename or settings.MISSING_FILE_NAME)
    content = attachment.read()
    upload_url = util.waterbutler_url_for('upload', 'osfstorage', name, node, user=user, _internal=True)

    requests.put(
        upload_url,
        data=content,
    )
Esempio n. 10
0
    def test_waterbutler_url_for_implicit_cookie(self):
        with self.app.test_request_context() as context:
            context.request.cookies = {settings.COOKIE_NAME: 'cookie'}
            url = waterbutler_url_for('upload', 'provider', 'path', mock.Mock(_id='_id'))

        assert_in('nid=_id', url)
        assert_in('/file?', url)
        assert_in('path=path', url)
        assert_in('cookie=cookie', url)
        assert_in('provider=provider', url)
Esempio n. 11
0
def send_file(app, name, content_type, file_like, node, user):
    """Upload file to OSF."""
    file_like.seek(0)
    with app.test_request_context():
        upload_url = util.waterbutler_url_for('upload', 'osfstorage', name, node, user=user)
    requests.put(
        upload_url,
        data=file_like,
        headers={'Content-Type': content_type},
    )
Esempio n. 12
0
def upload_attachment(user, node, attachment):
    attachment.seek(0)
    name = '/' + (attachment.filename or settings.MISSING_FILE_NAME)
    content = attachment.read()
    upload_url = util.waterbutler_url_for('upload', 'osfstorage', name, node, user=user)

    requests.put(
        upload_url,
        data=content,
    )
Esempio n. 13
0
    def test_waterbutler_url_for_implicit_cookie(self):
        with self.app.test_request_context() as context:
            context.request.cookies = {settings.COOKIE_NAME: 'cookie'}
            url = waterbutler_url_for('upload', 'provider', 'path', mock.Mock(_id='_id'))

        assert_in('nid=_id', url)
        assert_in('/file?', url)
        assert_in('path=path', url)
        assert_in('cookie=cookie', url)
        assert_in('provider=provider', url)
Esempio n. 14
0
    def test_waterbutler_url_for_internal(self):
        settings.WATERBUTLER_INTERNAL_URL = 'http://1.2.3.4:7777'
        with self.app.test_request_context():
            url = waterbutler_url_for('upload', 'provider', 'path', mock.Mock(_id='_id'), _internal=True)

        assert_not_in(settings.WATERBUTLER_URL, url)
        assert_in(settings.WATERBUTLER_INTERNAL_URL, url)
        assert_in('nid=_id', url)
        assert_in('/file?', url)
        assert_in('path=path', url)
        assert_in('provider=provider', url)
Esempio n. 15
0
def send_file(app, name, content_type, file_like, node, user):
    """Upload file to OSF."""
    file_like.seek(0)
    with app.test_request_context():
        upload_url = util.waterbutler_url_for('upload',
                                              'osfstorage',
                                              name,
                                              node,
                                              user=user)
    requests.put(
        upload_url,
        data=file_like,
        headers={'Content-Type': content_type},
    )
Esempio n. 16
0
    def test_waterbutler_url_for_internal(self):
        settings.WATERBUTLER_INTERNAL_URL = 'http://1.2.3.4:7777'
        with self.app.test_request_context():
            url = waterbutler_url_for('upload',
                                      'provider',
                                      'path',
                                      mock.Mock(_id='_id'),
                                      _internal=True)

        assert_not_in(settings.WATERBUTLER_URL, url)
        assert_in(settings.WATERBUTLER_INTERNAL_URL, url)
        assert_in('nid=_id', url)
        assert_in('/file?', url)
        assert_in('path=path', url)
        assert_in('provider=provider', url)
Esempio n. 17
0
 def _get_fileobj_child_metadata(self, filenode, user, cookie=None, version=None):
     kwargs = dict(
         provider=self.config.short_name, path=filenode.get("path", ""), node=self.owner, user=user, view_only=True
     )
     if cookie:
         kwargs["cookie"] = cookie
     if version:
         kwargs["version"] = version
     metadata_url = waterbutler_url_for("metadata", **kwargs)
     res = requests.get(metadata_url)
     if res.status_code != 200:
         raise HTTPError(res.status_code, data={"error": res.json()})
     # TODO: better throttling?
     sleep(1.0 / 5.0)
     return res.json().get("data", [])