Example #1
0
    def test_connect_from_settings_or_401_forbidden(self, mock_connection):
        mock_connection.side_effect = UnauthorizedError()
        user_settings = AddonDataverseUserSettings()
        user_settings.api_token = "Something ridiculous"

        with assert_raises(HTTPError) as e:
            connect_from_settings_or_401(user_settings)

        mock_connection.assert_called_once_with(settings.HOST, user_settings.api_token)
        assert_equal(e.exception.code, 401)
Example #2
0
    def test_connect_from_settings_or_401_forbidden(self, mock_connection):
        mock_connection.side_effect = UnauthorizedError()
        node_settings = AddonDataverseNodeSettings()
        node_settings.external_account = create_external_account(
            self.host, self.token,
        )

        with assert_raises(HTTPError) as e:
            connect_from_settings_or_401(node_settings)

        mock_connection.assert_called_once_with(self.host, self.token)
        assert_equal(e.exception.code, 401)
Example #3
0
    def test_connect_from_settings_or_401_forbidden(self, mock_connection):
        mock_connection.side_effect = UnauthorizedError()
        node_settings = AddonDataverseNodeSettings()
        node_settings.external_account = create_external_account(
            self.host, self.token,
        )

        with assert_raises(HTTPError) as e:
            connect_from_settings_or_401(node_settings)

        mock_connection.assert_called_once_with(self.host, self.token)
        assert_equal(e.exception.code, 401)
Example #4
0
    def test_connect_from_settings_or_401_forbidden(self, mock_connection):
        mock_connection.side_effect = UnauthorizedError()
        user_settings = AddonDataverseUserSettings()
        user_settings.api_token = 'Something ridiculous'

        with assert_raises(HTTPError) as e:
            connect_from_settings_or_401(user_settings)

        mock_connection.assert_called_once_with(
            settings.HOST,
            user_settings.api_token,
        )
        assert_equal(e.exception.code, 401)
Example #5
0
def dataverse_publish(node_addon, auth, publish_both=False):
    node = node_addon.owner
    user_settings = node_addon.user_settings

    now = datetime.datetime.utcnow()

    try:
        connection = connect_from_settings_or_401(user_settings)
    except HTTPError as error:
        if error.code == httplib.UNAUTHORIZED:
            connection = None
        else:
            raise

    dataverse = get_dataverse(connection, node_addon.dataverse_alias)
    dataset = get_dataset(dataverse, node_addon.dataset_doi)

    if publish_both:
        publish_dataverse(dataverse)
    publish_dataset(dataset)

    # Add a log
    node.add_log(
        action="dataverse_dataset_published",
        params={"project": node.parent_id, "node": node._primary_key, "dataset": dataset.title},
        auth=auth,
        log_date=now,
    )

    return {"dataset": dataset.title}, httplib.OK
Example #6
0
    def test_connect_from_settings_or_401(self, mock_connect):
        user_settings = AddonDataverseUserSettings()
        user_settings.api_token = 'Something ridiculous'

        connection = connect_from_settings_or_401(user_settings)
        assert_true(connection)
        mock_connect.assert_called_once_with(user_settings.api_token)
Example #7
0
def dataverse_publish_dataset(node_addon, auth, **kwargs):
    node = node_addon.owner
    publish_both = request.json.get('publish_both', False)

    now = datetime.datetime.utcnow()

    try:
        connection = connect_from_settings_or_401(node_addon)
    except HTTPError as error:
        if error.code == httplib.UNAUTHORIZED:
            connection = None
        else:
            raise

    dataverse = get_dataverse(connection, node_addon.dataverse_alias)
    dataset = get_dataset(dataverse, node_addon.dataset_doi)

    if publish_both:
        publish_dataverse(dataverse)
    publish_dataset(dataset)

    # Add a log
    node.add_log(
        action='dataverse_dataset_published',
        params={
            'project': node.parent_id,
            'node': node._primary_key,
            'dataset': dataset.title,
        },
        auth=auth,
        log_date=now,
    )

    return {'dataset': dataset.title}, httplib.OK
Example #8
0
def dataverse_get_widget_contents(node_addon, **kwargs):

    data = {
        'connected': False,
    }

    if not node_addon.complete:
        return {'data': data}, http.OK

    doi = node_addon.dataset_doi
    alias = node_addon.dataverse_alias

    connection = connect_from_settings_or_401(node_addon.user_settings)
    dataverse = get_dataverse(connection, alias)
    dataset = get_dataset(dataverse, doi)

    if dataset is None:
        return {'data': data}, http.BAD_REQUEST

    dataverse_url = 'http://{0}/dataverse/'.format(HOST) + alias
    dataset_url = 'http://dx.doi.org/' + doi

    data.update({
        'connected': True,
        'dataverse': node_addon.dataverse,
        'dataverseUrl': dataverse_url,
        'dataset': node_addon.dataset,
        'doi': doi,
        'datasetUrl': dataset_url,
        'citation': dataset.citation,
    })
    return {'data': data}, http.OK
Example #9
0
    def test_connect_from_settings_or_401(self, mock_connect):
        user_settings = AddonDataverseUserSettings()
        user_settings.api_token = "Something ridiculous"

        connection = connect_from_settings_or_401(user_settings)
        assert_true(connection)
        mock_connect.assert_called_once_with(user_settings.api_token)
Example #10
0
def dataverse_publish(node_addon, auth, publish_both=False):
    node = node_addon.owner
    user_settings = node_addon.user_settings

    now = datetime.datetime.utcnow()

    try:
        connection = connect_from_settings_or_401(user_settings)
    except HTTPError as error:
        if error.code == httplib.UNAUTHORIZED:
            connection = None
        else:
            raise

    dataverse = get_dataverse(connection, node_addon.dataverse_alias)
    dataset = get_dataset(dataverse, node_addon.dataset_doi)

    if publish_both:
        publish_dataverse(dataverse)
    publish_dataset(dataset)

    # Add a log
    node.add_log(
        action='dataverse_dataset_published',
        params={
            'project': node.parent_id,
            'node': node._primary_key,
            'dataset': dataset.title,
        },
        auth=auth,
        log_date=now,
    )

    return {'dataset': dataset.title}, httplib.OK
Example #11
0
def dataverse_publish_dataset(node_addon, auth, **kwargs):
    node = node_addon.owner
    publish_both = request.json.get('publish_both', False)

    now = timezone.now()

    connection = client.connect_from_settings_or_401(node_addon)

    dataverse = client.get_dataverse(connection, node_addon.dataverse_alias)
    dataset = client.get_dataset(dataverse, node_addon.dataset_doi)

    if publish_both:
        client.publish_dataverse(dataverse)
    client.publish_dataset(dataset)

    # Add a log
    node.add_log(
        action='dataverse_dataset_published',
        params={
            'project': node.parent_id,
            'node': node._id,
            'dataset': dataset.title,
        },
        auth=auth,
        log_date=now,
    )

    return {'dataset': dataset.title}, http.OK
Example #12
0
def dataverse_get_widget_contents(node_addon, **kwargs):

    data = {
        'connected': False,
    }

    if not node_addon.complete:
        return {'data': data}, http.OK

    doi = node_addon.dataset_doi
    alias = node_addon.dataverse_alias

    connection = client.connect_from_settings_or_401(node_addon)
    dataverse = client.get_dataverse(connection, alias)
    dataset = client.get_dataset(dataverse, doi)

    if dataset is None:
        return {'data': data}, http.BAD_REQUEST

    dataverse_host = node_addon.external_account.oauth_key
    dataverse_url = 'http://{0}/dataverse/{1}'.format(dataverse_host, alias)
    dataset_url = 'https://doi.org/' + doi

    data.update({
        'connected': True,
        'dataverse': node_addon.dataverse,
        'dataverseUrl': dataverse_url,
        'dataset': node_addon.dataset,
        'doi': doi,
        'datasetUrl': dataset_url,
        'citation': dataset.citation,
    })
    return {'data': data}, http.OK
Example #13
0
def dataverse_get_widget_contents(node_addon, **kwargs):

    data = {
        'connected': False,
    }

    if not node_addon.complete:
        return {'data': data}, http.OK

    doi = node_addon.dataset_doi
    alias = node_addon.dataverse_alias

    connection = client.connect_from_settings_or_401(node_addon)
    dataverse = client.get_dataverse(connection, alias)
    dataset = client.get_dataset(dataverse, doi)

    if dataset is None:
        return {'data': data}, http.BAD_REQUEST

    dataverse_host = node_addon.external_account.oauth_key
    dataverse_url = 'http://{0}/dataverse/{1}'.format(dataverse_host, alias)
    dataset_url = 'http://dx.doi.org/' + doi

    data.update({
        'connected': True,
        'dataverse': node_addon.dataverse,
        'dataverseUrl': dataverse_url,
        'dataset': node_addon.dataset,
        'doi': doi,
        'datasetUrl': dataset_url,
        'citation': dataset.citation,
    })
    return {'data': data}, http.OK
Example #14
0
def dataverse_publish_dataset(node_addon, auth, **kwargs):
    node = node_addon.owner
    publish_both = request.json.get('publish_both', False)

    now = datetime.datetime.utcnow()

    connection = client.connect_from_settings_or_401(node_addon)

    dataverse = client.get_dataverse(connection, node_addon.dataverse_alias)
    dataset = client.get_dataset(dataverse, node_addon.dataset_doi)

    if publish_both:
        client.publish_dataverse(dataverse)
    client.publish_dataset(dataset)

    # Add a log
    node.add_log(
        action='dataverse_dataset_published',
        params={
            'project': node.parent_id,
            'node': node._id,
            'dataset': dataset.title,
        },
        auth=auth,
        log_date=now,
    )

    return {'dataset': dataset.title}, http.OK
Example #15
0
def dataverse_user_config_get(user_addon, auth, **kwargs):
    """View for getting a JSON representation of the logged-in user's
    Dataverse user settings.
    """
    try:
        connection = connect_from_settings_or_401(user_addon)
    except HTTPError as error:
        if error.code == 401:
            connection = None
        else:
            raise

    urls = {
        'create': api_url_for('dataverse_set_user_config'),
        'delete': api_url_for('dataverse_delete_user'),
        'apiToken': 'https://{0}/account/apitoken'.format(HOST),
    }
    return {
        'result': {
            'connected': connection is not None,
            'userHasAuth': user_addon.has_auth,
            'apiToken': user_addon.api_token,
            'urls': urls
        },
    }, http.OK
Example #16
0
 def dataset_id(self):
     if self._dataset_id is None:
         connection = connect_from_settings_or_401(self.user_settings)
         dataverse = connection.get_dataverse(self.dataverse_alias)
         dataset = dataverse.get_dataset_by_doi(self.dataset_doi)
         self._dataset_id = dataset.id
         self.save()
     return self._dataset_id
Example #17
0
 def dataset_id(self):
     if self._dataset_id is None:
         connection = connect_from_settings_or_401(self.user_settings)
         dataverse = connection.get_dataverse(self.dataverse_alias)
         dataset = dataverse.get_dataset_by_doi(self.dataset_doi)
         self._dataset_id = dataset.id
         self.save()
     return self._dataset_id
Example #18
0
    def test_connect_from_settings_or_401(self, mock_connect):
        node_settings = AddonDataverseNodeSettings()
        node_settings.external_account = create_external_account(
            self.host, self.token,
        )

        connection = connect_from_settings_or_401(node_settings)
        assert_true(connection)
        mock_connect.assert_called_once_with(self.host, self.token)
Example #19
0
    def test_connect_from_settings_or_401(self, mock_connect):
        node_settings = AddonDataverseNodeSettings()
        node_settings.external_account = create_external_account(
            self.host, self.token,
        )

        connection = connect_from_settings_or_401(node_settings)
        assert_true(connection)
        mock_connect.assert_called_once_with(self.host, self.token)
Example #20
0
 def test_connect_from_settings_or_401_none(self):
     connection = connect_from_settings_or_401(None)
     assert_is_none(connection)
Example #21
0
 def test_connect_from_settings_or_401_none(self):
     connection = connect_from_settings_or_401(None)
     assert_is_none(connection)