Пример #1
0
    def test_14_resource_no_id(self):

        context = {"model": model,
                 "session": model.Session}

        model.repo.new_revision()
        model.Session.commit()

        new_resource = {
            'alt_url': u'empty resource group id',
            'description': u'Full text. Needs escaping: " Umlaut: \xfc',
            'size': u'123',
            'format': u'plain text',
            'hash': u'abc123',
            'position': 0,
            'state': u'active',
            'url': u'test'
        }

        model.repo.new_revision()
        resource_dict_save(new_resource, context)
        model.Session.commit()
        model.Session.remove()

        res = model.Session.query(model.Resource).filter_by(url=u'test').one()

        res_dictized = self.remove_changable_columns(resource_dictize(res, context))

        assert res_dictized == new_resource, res_dictized 
Пример #2
0
    def test_14_resource_no_id(self):

        context = {"model": model, "session": model.Session}

        model.repo.new_revision()
        model.Session.commit()

        new_resource = {
            'alt_url': u'empty resource group id',
            'description': u'Full text. Needs escaping: " Umlaut: \xfc',
            'size': u'123',
            'format': u'plain text',
            'hash': u'abc123',
            'position': 0,
            'state': u'active',
            'url': u'test'
        }

        model.repo.new_revision()
        resource_dict_save(new_resource, context)
        model.Session.commit()
        model.Session.remove()

        res = model.Session.query(model.Resource).filter_by(url=u'test').one()

        res_dictized = self.remove_changable_columns(
            resource_dictize(res, context))

        assert res_dictized == new_resource, res_dictized
Пример #3
0
def resource_update(context, data_dict):
    model = context["model"]
    session = context["session"]
    user = context["user"]
    id = data_dict["id"]
    schema = context.get("schema") or default_update_resource_schema()
    model.Session.remove()

    resource = model.Resource.get(id)
    context["resource"] = resource

    if not resource:
        logging.error("Could not find resource " + id)
        raise NotFound(_("Resource was not found."))

    check_access("resource_update", context, data_dict)

    data, errors = validate(data_dict, schema, context)

    if errors:
        model.Session.rollback()
        raise ValidationError(errors, resource_error_summary(errors))

    rev = model.repo.new_revision()
    rev.author = user
    if "message" in context:
        rev.message = context["message"]
    else:
        rev.message = _(u"REST API: Update object %s") % data.get("name", "")

    resource = resource_dict_save(data, context)
    if not context.get("defer_commit"):
        model.repo.commit()
    return resource_dictize(resource, context)
Пример #4
0
def resource_update(context, data_dict):
    model = context['model']
    session = context['session']
    user = context['user']
    id = data_dict["id"]
    schema = context.get('schema') or default_update_resource_schema()
    model.Session.remove()

    resource = model.Resource.get(id)
    context["resource"] = resource

    if not resource:
        raise NotFound(_('Resource was not found.'))

    check_access('resource_update', context, data_dict)

    data, errors = validate(data_dict, schema, context)

    if errors:
        model.Session.rollback()
        raise ValidationError(errors, resource_error_summary(errors))

    rev = model.repo.new_revision()
    rev.author = user
    if 'message' in context:
        rev.message = context['message']
    else:
        rev.message = _(u'REST API: Update object %s') % data.get("name")

    resource = resource_dict_save(data, context)
    if not context.get('defer_commit'):
        model.repo.commit()        
    return resource_dictize(resource, context)
Пример #5
0
def resource_update(context, data_dict):
    model = context['model']
    user = context['user']
    id = data_dict["id"]
    schema = context.get('schema') or ckan.logic.schema.default_update_resource_schema()
    model.Session.remove()

    resource = model.Resource.get(id)
    context["resource"] = resource

    if not resource:
        logging.error('Could not find resource ' + id)
        raise NotFound(_('Resource was not found.'))

    check_access('resource_update', context, data_dict)

    data, errors = validate(data_dict, schema, context)

    if errors:
        model.Session.rollback()
        raise ValidationError(errors, error_summary(errors))

    rev = model.repo.new_revision()
    rev.author = user
    if 'message' in context:
        rev.message = context['message']
    else:
        rev.message = _(u'REST API: Update object %s') % data.get("name", "")

    resource = model_save.resource_dict_save(data, context)
    if not context.get('defer_commit'):
        model.repo.commit()
    return model_dictize.resource_dictize(resource, context)
Пример #6
0
    def test_14_resource_no_id(self):

        context = {"model": model, "session": model.Session}

        model.Session.commit()

        new_resource = {
            "mimetype": None,
            u"alt_url": u"empty resource group id",
            "hash": u"abc123",
            "description": u'Full text. Needs escaping: " Umlaut: \xfc',
            "format": u"plain text",
            "url": u"http://test_new",
            "cache_url": None,
            "cache_last_updated": None,
            "state": u"active",
            "mimetype_inner": None,
            "url_type": None,
            "last_modified": None,
            "position": 0,
            "size": None,
            "size_extra": u"123",
            "resource_type": None,
            "name": None,
            "package_id": "",  # Just so we can save
        }

        resource_dict_save(new_resource, context)
        model.Session.commit()
        model.Session.remove()

        # Remove the package id
        del new_resource["package_id"]

        res = (
            model.Session.query(model.Resource)
            .filter_by(url=u"http://test_new")
            .one()
        )

        res_dictized = self.remove_changable_columns(
            resource_dictize(res, context), True
        )

        assert res_dictized == new_resource, res_dictized
    def test_14_resource_no_id(self):

        context = {"model": model, "session": model.Session}

        model.repo.new_revision()
        model.Session.commit()

        new_resource = {
            'mimetype': None,
            u'alt_url': u'empty resource group id',
            'hash': u'abc123',
            'description': u'Full text. Needs escaping: " Umlaut: \xfc',
            'format': u'plain text',
            'url': u'http://test_new',
            'cache_url': None,
            'webstore_url': None,
            'cache_last_updated': None,
            'state': u'active',
            'mimetype_inner': None,
            'webstore_last_updated': None,
            'url_type': None,
            'last_modified': None,
            'position': 0,
            'size': None,
            'size_extra': u'123',
            'resource_type': None,
            'name': None,
            'package_id': ''  # Just so we can save
        }

        model.repo.new_revision()
        resource_dict_save(new_resource, context)
        model.Session.commit()
        model.Session.remove()

        # Remove the package id
        del new_resource['package_id']

        res = model.Session.query(
            model.Resource).filter_by(url=u'http://test_new').one()

        res_dictized = self.remove_changable_columns(
            resource_dictize(res, context), True)

        assert res_dictized == new_resource, res_dictized
Пример #8
0
    def test_14_resource_no_id(self):

        context = {"model": model,
                 "session": model.Session}

        model.repo.new_revision()
        model.Session.commit()

        new_resource = {
            'mimetype': None,
            u'alt_url': u'empty resource group id',
            'hash': u'abc123',
            'description': u'Full text. Needs escaping: " Umlaut: \xfc',
            'format': u'plain text',
            'url': u'http://test_new',
            'cache_url': None,
            'webstore_url': None,
            'cache_last_updated': None,
            'state': u'active',
            'mimetype_inner': None,
            'webstore_last_updated': None,
            'url_type': None,
            'last_modified': None,
            'position': 0,
            'size': None,
            'size_extra': u'123',
            'resource_type': None,
            'name': None,
            'package_id':''  # Just so we can save
        }

        model.repo.new_revision()
        resource_dict_save(new_resource, context)
        model.Session.commit()
        model.Session.remove()

        # Remove the package id
        del new_resource['package_id']

        res = model.Session.query(model.Resource).filter_by(url=u'http://test_new').one()

        res_dictized = self.remove_changable_columns(resource_dictize(res, context), True)

        assert res_dictized == new_resource, res_dictized
Пример #9
0
    def test_14_resource_no_id(self):

        context = {"model": model, "session": model.Session}

        model.repo.new_revision()
        model.Session.commit()

        new_resource = {
            "mimetype": None,
            u"alt_url": u"empty resource group id",
            "hash": u"abc123",
            "description": u'Full text. Needs escaping: " Umlaut: \xfc',
            "format": u"plain text",
            "url": u"http://test_new",
            "cache_url": None,
            "cache_last_updated": None,
            "state": u"active",
            "mimetype_inner": None,
            "url_type": None,
            "last_modified": None,
            "position": 0,
            "size": None,
            "size_extra": u"123",
            "resource_type": None,
            "name": None,
            "package_id": "",  # Just so we can save
        }

        model.repo.new_revision()
        resource_dict_save(new_resource, context)
        model.Session.commit()
        model.Session.remove()

        # Remove the package id
        del new_resource["package_id"]

        res = model.Session.query(model.Resource).filter_by(url=u"http://test_new").one()

        res_dictized = self.remove_changable_columns(resource_dictize(res, context), True)

        assert res_dictized == new_resource, res_dictized
Пример #10
0
    def test_package_dictize_resource_upload_with_url_and_striped(self):
        dataset = factories.Dataset()
        resource = factories.Resource(package=dataset['id'],
                                      name='test_pkg_dictize',
                                      url_type='upload',
                                      url='http://some_filename.csv')

        context = {'model': model, 'session': model.Session}

        result = model_save.resource_dict_save(resource, context)

        expected_dict = {u'url': u'some_filename.csv', u'url_type': u'upload'}
        assert expected_dict['url'] == result.url
Пример #11
0
def resource_update(context, data_dict):
    '''Update a resource.

    To update a resource you must be authorized to update the dataset that the
    resource belongs to.

    For further parameters see ``resource_create()``.

    :param id: the id of the resource to update
    :type id: string

    :returns: the updated resource
    :rtype: string

    '''
    model = context['model']
    user = context['user']
    id = _get_or_bust(data_dict, "id")

    resource = model.Resource.get(id)
    context["resource"] = resource

    if not resource:
        logging.error('Could not find resource ' + id)
        raise NotFound(_('Resource was not found.'))

    _check_access('resource_update', context, data_dict)

    if 'schema' in context:
        schema = context['schema']
    else:
        package_plugin = lib_plugins.lookup_package_plugin(
            resource.resource_group.package.type)
        schema = package_plugin.update_package_schema()['resources']

    data, errors = _validate(data_dict, schema, context)
    if errors:
        model.Session.rollback()
        raise ValidationError(errors)

    rev = model.repo.new_revision()
    rev.author = user
    if 'message' in context:
        rev.message = context['message']
    else:
        rev.message = _(u'REST API: Update object %s') % data.get("name", "")

    resource = model_save.resource_dict_save(data, context)
    if not context.get('defer_commit'):
        model.repo.commit()
    return model_dictize.resource_dictize(resource, context)
Пример #12
0
def resource_update(context, data_dict):
    '''Update a resource.

    To update a resource you must be authorized to update the dataset that the
    resource belongs to.

    For further parameters see ``resource_create()``.

    :param id: the id of the resource to update
    :type id: string

    :returns: the updated resource
    :rtype: string

    '''
    model = context['model']
    user = context['user']
    id = _get_or_bust(data_dict, "id")

    resource = model.Resource.get(id)
    context["resource"] = resource

    if not resource:
        logging.error('Could not find resource ' + id)
        raise NotFound(_('Resource was not found.'))

    _check_access('resource_update', context, data_dict)

    if 'schema' in context:
        schema = context['schema']
    else:
        package_plugin = lib_plugins.lookup_package_plugin(
            resource.resource_group.package.type)
        schema = package_plugin.update_package_schema()['resources']

    data, errors = _validate(data_dict, schema, context)
    if errors:
        model.Session.rollback()
        raise ValidationError(errors)

    rev = model.repo.new_revision()
    rev.author = user
    if 'message' in context:
        rev.message = context['message']
    else:
        rev.message = _(u'REST API: Update object %s') % data.get("name", "")

    resource = model_save.resource_dict_save(data, context)
    if not context.get('defer_commit'):
        model.repo.commit()
    return model_dictize.resource_dictize(resource, context)
Пример #13
0
    def test_package_dictize_resource_upload_with_url_and_striped(self):
        dataset = factories.Dataset()
        resource = factories.Resource(
            package=dataset["id"],
            name="test_pkg_dictize",
            url_type="upload",
            url="http://some_filename.csv",
        )

        context = {"model": model, "session": model.Session}

        result = model_save.resource_dict_save(resource, context)

        expected_dict = {u"url": u"some_filename.csv", u"url_type": u"upload"}
        assert expected_dict["url"] == result.url
Пример #14
0
    def test_package_dictize_resource_upload_with_url_and_striped(self):
        dataset = factories.Dataset()
        resource = factories.Resource(package=dataset['id'],
                                      name='test_pkg_dictize',
                                      url_type='upload',
                                      url='http://some_filename.csv')

        context = {'model': model, 'session': model.Session}

        result = model_save.resource_dict_save(resource, context)

        expected_dict = {
            u'url': u'some_filename.csv',
            u'url_type': u'upload'
        }
        assert expected_dict['url'] == result.url
Пример #15
0
def resource_update(context, data_dict):
    """Update a resource.

    To update a resource you must be authorized to update the dataset that the
    resource belongs to.

    For further parameters see ``resource_create()``.

    :param id: the id of the resource to update
    :type id: string

    :returns: the updated resource
    :rtype: string

    """
    model = context["model"]
    user = context["user"]
    id = _get_or_bust(data_dict, "id")
    schema = context.get("schema") or ckan.logic.schema.default_update_resource_schema()
    model.Session.remove()

    resource = model.Resource.get(id)
    context["resource"] = resource

    if not resource:
        logging.error("Could not find resource " + id)
        raise NotFound(_("Resource was not found."))

    _check_access("resource_update", context, data_dict)

    data, errors = _validate(data_dict, schema, context)
    if errors:
        model.Session.rollback()
        raise ValidationError(errors)

    rev = model.repo.new_revision()
    rev.author = user
    if "message" in context:
        rev.message = context["message"]
    else:
        rev.message = _(u"REST API: Update object %s") % data.get("name", "")

    resource = model_save.resource_dict_save(data, context)
    if not context.get("defer_commit"):
        model.repo.commit()
    return model_dictize.resource_dictize(resource, context)
Пример #16
0
def resource_update(context, data_dict):
    model = context["model"]
    session = context["session"]
    user = context["user"]
    id = data_dict["id"]
    schema = context.get("schema") or default_update_resource_schema()
    model.Session.remove()

    resource = model.Resource.get(id)
    context["resource"] = resource

    if not resource:
        raise NotFound(_("Resource was not found."))

    # check authentication against the resource package
    # TODO: can check_access be used against a resource?
    query = (
        session.query(model.Package)
        .join(model.ResourceGroup)
        .join(model.Resource)
        .filter(model.ResourceGroup.id == resource.resource_group_id)
    )
    pkg = query.first()
    if not pkg:
        raise NotFound(_("No package found for this resource, cannot check auth."))
    check_access("package_update", context, package_dictize(pkg, context))

    data, errors = validate(data_dict, schema, context)

    if errors:
        model.Session.rollback()
        raise ValidationError(errors, resource_error_summary(errors))

    rev = model.repo.new_revision()
    rev.author = user
    if "message" in context:
        rev.message = context["message"]
    else:
        rev.message = _(u"REST API: Update object %s") % data.get("name")

    resource = resource_dict_save(data, context)
    model.repo.commit()
    return resource_dictize(resource, context)
## update package positions
    try:
        pkg_dict = _get_action('package_update')(context, pkg_dict)
    except ValidationError, e:
        errors = e.error_dict['resources'][-1]
        raise ValidationError(errors)
## end update package positions

    rev = model.repo.new_revision()
    rev.author = user
    if 'message' in context:
        rev.message = context['message']
    else:
        rev.message = _(u'REST API: Update object %s') % data.get("name", "")

    resource = model_save.resource_dict_save(data, context)
    if not context.get('defer_commit'):
        model.repo.commit()
    return model_dictize.resource_dictize(resource, context)



def package_update(context, data_dict):
    '''Update a dataset (package).

    You must be authorized to edit the dataset and the groups that it belongs
    to.

    Plugins may change the parameters of this function depending on the value
    of the dataset's ``type`` attribute, see the ``IDatasetForm`` plugin
    interface.
Пример #18
0
    def after_create(self, context, data):

        log.info(
            'After Create GOOGLE DRIVE PLUGIN: Context: {}, Data: {}'.format(
                context, data))
        """ SAMPLE LOGs
        Context = {
            'allow_state_change': True,
            'allow_partial_update': True,
            'auth_user_obj': "USER OBJECT" ,
            '__auth_user_obj_checked': True,
            'session': " OBJECT sqlalchemy.orm.scoping.scoped_session",
            'user': '******',
            '__auth_audit': [],
            'model': 'MODULE ckan.model from /srv/app/src/ckan/ckan/model/__init__.pyc',
            'save': True,
            'message': ''
            }
        Data = {
            'maintainer': '',
            'name': 'polonia55644',
            'author': '',
            'author_email': '',
            'title': 'Dataset title',
            'notes': '',
            'owner_org': '60xxxxxxxxxxxxxxxxxxxx',
            'private': True,
            'maintainer_email': '',
            'url': 'https://docs.google.com/spreadsheets/d/1dUgDpVYDywwdqtWw0A8qqaCstgtb5GygsaTDRMIgUAo/edit?usp=drive_web&ouid=100530708543483213226',
            'state': 'draft',
            'version': '',
            'creator_user_id': '4eexxxxxxxxxxxxxxxxxxxxx',
            'id': '4f420a31-xxxxxxxxxxxxxxxx',
            'license_id': 'cc-by',
            'type': 'dataset',
            'tag_string': '',
            'tags': [],
            'extras': []
        }
        """

        url = data.get('url', None)
        log.info('GOOGLE DRIVE PLUGIN url: {}'.format(url))
        # detect google drive URLs
        # https://docs.google.com/spreadsheets/d/1dUgDpVYDywwdqtWw0A8qqaCstgtb5GygsaTDRMIgUAo/edit#gid=1559509753
        if url is None or not url.startswith(
                'https://docs.google.com/spreadsheets'):
            return

        # I supouse never exists resources in creation time
        resources = data.get('resources', None)
        log.info('GOOGLE DRIVE PLUGIN Resources: {}'.format(resources))
        if resources is not None and len(resources) > 0:
            return

        #TODO transform URL to get data as CSV
        #TODO Download CSV

        # save the resources (it works)
        #TODO lear URL an other params
        res_dict = {
            # id: 0,
            'url': 'http://no-se.com',
            'format': 'CSV',
            'description':
            'Auto generated CSV from Google Drive Sheet Download',
            'hash': '',
            'package_id': data.get('id')
        }
        log.info('Save CSV data GOOGLE DRIVE PLUGIN as Resources: {}'.format(
            res_dict))
        resource = resource_dict_save(res_dict=res_dict, context=context)