Example #1
0
    def test_2_group_schema(self):

        group = model.Session.query(model.Group).first()

        data = group_dictize(group, self.context)

        converted_data, errors = validate(data, default_group_schema(), self.context)
        group_pack = sorted(group.packages, key=lambda x:x.id)

        converted_data["packages"] = sorted(converted_data["packages"], key=lambda x:x["id"])

        expected = {'description': u'These are books that David likes.',
                                 'id': group.id,
                                 'name': u'david',
                                 'packages': sorted([{'id': group_pack[0].id},
                                              {'id': group_pack[1].id,
                                               }], key=lambda x:x["id"]),
                                 'title': u"Dave's books"}


        assert not errors
        assert converted_data == expected, pformat(converted_data) + '\n\n' + pformat(expected)



        data["packages"].sort(key=lambda x:x["id"])
        data["packages"][0]["id"] = 'fjdlksajfalsf'
        data["packages"][1].pop("id")
        data["packages"][1].pop("name")

        converted_data, errors = validate(data, default_group_schema(), self.context)
        assert errors ==  {'packages': [{'id': [u'Dataset was not found.']}, {'id': [u'Missing value']}]} , pformat(errors)
    def test_2_group_schema(self):

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

        group = model.Session.query(model.Group).first()

        data = group_dictize(group, context)

        converted_data, errors = validate(data, default_group_schema(), context)
        group_pack = sorted(group.packages, key=lambda x: x.id)

        converted_data["packages"] = sorted(converted_data["packages"], key=lambda x: x["id"])

        expected = {
            "description": u"These are books that David likes.",
            "id": group.id,
            "name": u"david",
            "packages": sorted([{"id": group_pack[0].id}, {"id": group_pack[1].id}], key=lambda x: x["id"]),
            "title": u"Dave's books",
        }

        assert not errors
        assert converted_data == expected, pformat(converted_data) + "\n\n" + pformat(expected)

        data["packages"].sort(key=lambda x: x["id"])
        data["packages"][0]["id"] = "fjdlksajfalsf"
        data["packages"][1].pop("id")
        data["packages"][1].pop("name")

        converted_data, errors = validate(data, default_group_schema(), context)
        assert errors == {"packages": [{"id": [u"Dataset was not found."]}, {"id": [u"Missing value"]}]}, pformat(
            errors
        )
    def test_2_group_schema(self):
        group = model.Session.query(model.Group).first()
        data = group_dictize(group, self.context)

        # we don't want these here
        del data['groups']
        del data['users']
        del data['tags']
        del data['extras']

        converted_data, errors = validate(data,
                                          default_group_schema(),
                                          self.context)
        group_pack = sorted(group.packages(), key=lambda x: x.id)

        converted_data["packages"] = sorted(converted_data["packages"],
                                            key=lambda x: x["id"])

        expected = {
            'description': u'These are books that David likes.',
            'id': group.id,
            'name': u'david',
            'is_organization': False,
            'type': u'group',
            'image_url': u'',
            'image_display_url': u'',
            'packages': sorted([{'id': group_pack[0].id,
                                 'name': group_pack[0].name,
                                 'title': group_pack[0].title},
                                {'id': group_pack[1].id,
                                 'name': group_pack[1].name,
                                 'title':group_pack[1].title}],
                               key=lambda x: x["id"]),
            'title': u"Dave's books",
            'approval_status': u'approved'
        }

        assert not errors
        assert converted_data == expected, pformat(converted_data)

        data["packages"].sort(key=lambda x: x["id"])
        data["packages"][0]["id"] = 'fjdlksajfalsf'
        data["packages"][1].pop("id")
        data["packages"][1].pop("name")

        converted_data, errors = validate(data,
                                          default_group_schema(),
                                          self.context)
        assert errors == {
            'packages': [{'id': [u'Not found: Dataset']},
                         {'id': [u'Missing value']}]
        }, pformat(errors)
    def test_2_group_schema(self):
        group = model.Session.query(model.Group).first()
        data = group_dictize(group, self.context)

        # we don't want these here
        del data['groups']
        del data['users']
        del data['tags']
        del data['extras']

        converted_data, errors = validate(data,
                                          default_group_schema(),
                                          self.context)
        group_pack = sorted(group.packages(), key=lambda x: x.id)

        converted_data["packages"] = sorted(converted_data["packages"],
                                            key=lambda x: x["id"])

        expected = {
            'description': u'These are books that David likes.',
            'id': group.id,
            'name': u'david',
            'is_organization': False,
            'type': u'group',
            'image_url': u'',
            'image_display_url': u'',
            'packages': sorted([{'id': group_pack[0].id,
                                 'name': group_pack[0].name,
                                 'title': group_pack[0].title},
                                {'id': group_pack[1].id,
                                 'name': group_pack[1].name,
                                 'title':group_pack[1].title}],
                               key=lambda x: x["id"]),
            'title': u"Dave's books",
            'approval_status': u'approved'
        }

        assert not errors
        assert converted_data == expected, pformat(converted_data)

        data["packages"].sort(key=lambda x: x["id"])
        data["packages"][0]["id"] = 'fjdlksajfalsf'
        data["packages"][1].pop("id")
        data["packages"][1].pop("name")

        converted_data, errors = validate(data,
                                          default_group_schema(),
                                          self.context)
        assert errors == {
            'packages': [{'id': [u'Not found: Dataset']},
                         {'id': [u'Missing value']}]
        }, pformat(errors)
Example #5
0
    def test_2_group_schema(self):

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

        group = model.Session.query(model.Group).first()

        data = group_dictize(group, context)

        converted_data, errors = validate(data, default_group_schema(),
                                          context)
        group_pack = sorted(group.packages, key=lambda x: x.id)

        converted_data["packages"] = sorted(converted_data["packages"],
                                            key=lambda x: x["id"])

        expected = {
            'description':
            u'These are books that David likes.',
            'id':
            group.id,
            'name':
            u'david',
            'packages':
            sorted([{
                'id': group_pack[0].id
            }, {
                'id': group_pack[1].id,
            }],
                   key=lambda x: x["id"]),
            'title':
            u"Dave's books"
        }

        assert not errors
        assert converted_data == expected, pformat(
            converted_data) + '\n\n' + pformat(expected)

        data["packages"].sort(key=lambda x: x["id"])
        data["packages"][0]["id"] = 'fjdlksajfalsf'
        data["packages"][1].pop("id")
        data["packages"][1].pop("name")

        converted_data, errors = validate(data, default_group_schema(),
                                          context)
        assert errors == {
            'packages': [{
                'id': [u'Package was not found.']
            }, {
                'id': [u'Missing value']
            }]
        }, pformat(errors)
Example #6
0
def group_create(context, data_dict):
    model = context['model']
    user = context['user']
    schema = context.get('schema') or default_group_schema()

    check_access(model.System(), model.Action.GROUP_CREATE, context)

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

    if errors:
        model.Session.rollback()
        raise ValidationError(errors, group_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: Create object %s') % data.get("name")

    group = group_dict_save(data, context)

    if user:
        admins = [model.User.by_name(user.decode('utf8'))]
    else:
        admins = []
    model.setup_default_user_roles(group, admins)
    for item in PluginImplementations(IGroupController):
        item.create(group)
    model.repo.commit()
    context["group"] = group
    context["id"] = group.id
    log.debug('Created object %s' % str(group.name))
    return group_dictize(group, context)
Example #7
0
 def setup(self):
     super(TestProjectBase, self).setup()
     self.user = factories.User()
     context = {
         'model': model,
         'session': model.Session,
         'user': self.user['name'],
     }
     org_create_context = context.copy()
     org_create_context['schema'] = schema.default_group_schema()
     self.organization = helpers.call_action('organization_create',
                                             context=context,
                                             id='1',
                                             name='organization')
     project_context = context.copy()
     project_context['schema'] = schema.default_create_package_schema()
     self.project = helpers.call_action(
         'package_create',
         context=project_context,
         type='project',
         id='1',
         name='test',
         title='Test',
         owner_org=self.organization['name'],
     )
Example #8
0
def group_create(context, data_dict):
    model = context['model']
    user = context['user']
    schema = context.get('schema') or default_group_schema()

    check_access(model.System(), model.Action.GROUP_CREATE, context)

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

    if errors:
        model.Session.rollback()
        raise ValidationError(errors, group_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: Create object %s') % data.get("name")

    group = group_dict_save(data, context)

    if user:
        admins = [model.User.by_name(user.decode('utf8'))]
    else:
        admins = []
    model.setup_default_user_roles(group, admins)
    for item in PluginImplementations(IGroupController):
        item.create(group)
    model.repo.commit()        
    context["group"] = group
    context["id"] = group.id
    log.debug('Created object %s' % str(group.name))
    return group_dictize(group, context)
def show_group_schema():
    boolean_validator = get_validator('boolean_validator')
    not_missing = get_validator('not_missing')
    convert_from_extras = get_converter('convert_from_extras')
    schema = default_group_schema()
    schema.update({'needs_approval': [not_missing, boolean_validator, convert_from_extras]})
    return schema
Example #10
0
 def setup(self):
     super(TestProjectBase, self).setup()
     self.user = factories.User()
     context = {
         'model': model,
         'session': model.Session,
         'user': self.user['name'],
     }
     org_create_context = context.copy()
     org_create_context['schema'] = schema.default_group_schema()
     self.organization = helpers.call_action(
         'organization_create',
         context=context,
         id='1',
         name='organization'
     )
     project_context = context.copy()
     project_context['schema'] = schema.default_create_package_schema()
     self.project = helpers.call_action(
         'package_create',
         context=project_context,
         type='project',
         id='1',
         name='test',
         title='Test',
         owner_org=self.organization['name'],
     )
Example #11
0
    def _add_users( self, group, parameters  ):
        if not group:
            h.flash_error(_("There was a problem with your submission, "
                             "please correct it and try again"))
            errors = {"reason": ["No reason was supplied"]}
            return self.apply(group.id, errors=errors,
                              error_summary=action.error_summary(errors))

        data_dict = logic.clean_dict(dict_func.unflatten(
                logic.tuplize_dict(logic.parse_params(request.params))))
        data_dict['id'] = group.id

        # Temporary fix for strange caching during dev
        l = data_dict['users']
        for d in l:
            d['capacity'] = d.get('capacity','editor')

        context = {
            "group" : group,
            "schema": schema.default_group_schema(),
            "model": model,
            "session": model.Session
        }

        # Temporary cleanup of a capacity being sent without a name
        users = [d for d in data_dict['users'] if len(d) == 2]
        data_dict['users'] = users

        model.repo.new_revision()
        model_save.group_member_save(context, data_dict, 'users')
        model.Session.commit()

        h.redirect_to( controller='group', action='edit', id=group.name)
Example #12
0
    def test_2_group_schema(self):
        group = model.Session.query(model.Group).first()
        data = group_dictize(group, self.context)

        # we don't want these here
        del data["groups"]
        del data["users"]
        del data["tags"]
        del data["extras"]

        converted_data, errors = validate(data, default_group_schema(), self.context)
        group_pack = sorted(group.packages(), key=lambda x: x.id)

        converted_data["packages"] = sorted(converted_data["packages"], key=lambda x: x["id"])

        expected = {
            "description": u"These are books that David likes.",
            "id": group.id,
            "name": u"david",
            "is_organization": False,
            "type": u"group",
            "image_url": u"",
            "packages": sorted(
                [
                    {"id": group_pack[0].id, "name": group_pack[0].name, "title": group_pack[0].title},
                    {"id": group_pack[1].id, "name": group_pack[1].name, "title": group_pack[1].title},
                ],
                key=lambda x: x["id"],
            ),
            "title": u"Dave's books",
            "approval_status": u"approved",
        }

        assert not errors
        assert converted_data == expected, pformat(converted_data)

        data["packages"].sort(key=lambda x: x["id"])
        data["packages"][0]["id"] = "fjdlksajfalsf"
        data["packages"][1].pop("id")
        data["packages"][1].pop("name")

        converted_data, errors = validate(data, default_group_schema(), self.context)
        assert errors == {"packages": [{"id": [u"Not found: Dataset"]}, {"id": [u"Missing value"]}]}, pformat(errors)
Example #13
0
 def db_to_form_schema(self, group_type=None):
     packages_schema = project_schema.project_show_schema()
     packages_schema.pop('organization', '')
     schema = default_group_schema()
     schema.update({
         'orgURL': [convert_from_extras, ignore_missing, unicode],
         'contact': [convert_from_extras, ignore_missing, unicode],
         'cadasta_id': [convert_from_extras, ignore_missing, unicode],
         'packages': packages_schema,
     })
     return schema
Example #14
0
    def db_to_form_schema_options(self, options):
        # Get the default organization schema
        schema = super(SchemaPlugin, self).db_to_form_schema_options(options)

        if not schema:
            from ckan.logic.schema import default_group_schema
            schema = default_group_schema()

        # Add custom fileds to organization schema
        schema.update({'private': [cnvrt_from_ext, ignore_missing, unicode]})
        return schema
def create_group_schema():
    boolean_validator = get_validator('boolean_validator')
    not_missing = get_validator('not_missing')
    convert_to_extras = get_converter('convert_to_extras')
    name_validator = get_validator('name_validator')
    group_name_validator = get_validator('group_name_validator')
    schema = default_group_schema()
    schema.update({
        'name': [not_empty, unicode, name_validator, group_name_validator,
                 no_pending_organization_with_same_name],
        'needs_approval': [not_missing, boolean_validator, convert_to_extras]
    })
    return schema
Example #16
0
 def db_to_form_schema_options(self, options):
     #Get the default organization schema
     schema = super(HierarchyForm, self).db_to_form_schema_options(options)
     
     if not schema :
         from ckan.logic.schema import default_group_schema
         schema = default_group_schema()
     
     #Add custom fileds to organization schema
     schema.update({
                   'url' : [cnvrt_from_ext, ignore_missing, unicode],
                   'sector' : [cnvrt_from_ext, ignore_missing, unicode]
                   })
     return schema
Example #17
0
 def db_to_form_schema(data, package_type=None):
     from ckan.logic.schema import default_group_schema
     schema = {
         'foi-name' : [convert_from_extras, ignore_missing, unicode],
         'foi-email': [convert_from_extras, ignore_missing, unicode],
         'foi-phone': [convert_from_extras, ignore_missing, unicode],
         'contact-name' : [convert_from_extras, ignore_missing, unicode],
         'contact-email': [convert_from_extras, ignore_missing, unicode],
         'contact-phone': [convert_from_extras, ignore_missing, unicode],
         'category': [convert_from_extras],
         'abbreviation': [convert_from_extras, ignore_missing, unicode],
     }
     schema.update( default_group_schema() )
     return schema
Example #18
0
def show_group_schema():
    boolean_validator = get_validator('boolean_validator')
    convert_from_extras = get_converter('convert_from_extras')
    schema = default_group_schema()
    schema.update({
        'needs_approval': [convert_from_extras, ignore_missing, boolean_validator],
        'num_followers': [ignore_missing],
        'package_count': [ignore_missing],
        'display_name': [ignore_missing]
    })
    schema['packages'].update({
        'notes': [ignore_missing],
    })
    return schema
Example #19
0
 def db_to_form_schema(data, package_type=None):
     from ckan.logic.schema import default_group_schema
     schema = {
         'foi-name': [convert_from_extras, ignore_missing, unicode],
         'foi-email': [convert_from_extras, ignore_missing, unicode],
         'foi-phone': [convert_from_extras, ignore_missing, unicode],
         'contact-name': [convert_from_extras, ignore_missing, unicode],
         'contact-email': [convert_from_extras, ignore_missing, unicode],
         'contact-phone': [convert_from_extras, ignore_missing, unicode],
         'category': [convert_from_extras],
         'abbreviation': [convert_from_extras, ignore_missing, unicode],
     }
     schema.update(default_group_schema())
     return schema
Example #20
0
 def db_to_form_schema(data, package_type=None):
     from ckan.logic.schema import default_group_schema
     schema = {
         'foi-name' : [convert_from_extras, ignore_missing, unicode],
         'foi-email': [convert_from_extras, ignore_missing, unicode],
         'foi-phone': [convert_from_extras, ignore_missing, unicode],
         'foi-web': [convert_from_extras, ignore_missing, unicode],
         'contact-name' : [convert_from_extras, ignore_missing, unicode],
         'contact-email': [convert_from_extras, ignore_missing, unicode],
         'contact-phone': [convert_from_extras, ignore_missing, unicode],
         'category': [convert_from_extras, ignore_missing],
         'abbreviation': [convert_from_extras, ignore_missing, unicode],
         'closed': [convert_from_extras, ignore_missing, dgu_boolean_validator],
         'replaced_by': [convert_from_extras, value_if_missing([]), from_json],
     }
     schema.update( default_group_schema() )
     return schema
Example #21
0
    def _add_users(self, group, parameters):
        from ckan.logic.schema import default_group_schema
        from ckan.logic.action import error_summary
        from ckan.lib.dictization.model_save import group_member_save

        if not group:
            h.flash_error(_("There was a problem with your submission, \
                             please correct it and try again"))
            errors = {"reason": ["No reason was supplied"]}
            return self.apply(group.id, errors=errors,
                              error_summary=error_summary(errors))

        data_dict = clean_dict(unflatten(
                tuplize_dict(parse_params(request.params))))
        data_dict['id'] = group.id

        # Temporary fix for strange caching during dev
        l = data_dict['users']
        for d in l:
            # Form javascript creates d['capacity'] == 'undefined' for
            # newly added users.
            # If javascript in users form is not working (such as in tests)
            # it will not create a capacity value.
            if 'capacity' not in d or d['capacity'] == 'undefined':
                # default to 'editor'
                d['capacity'] = 'editor'

        context = {
            "group" : group,
            "schema": default_group_schema(),
            "model": model,
            "session": model.Session
        }

        # Temporary cleanup of a capacity being sent without a name
        users = [d for d in data_dict['users'] if len(d) == 2]
        data_dict['users'] = users

        model.repo.new_revision()
        group_member_save(context, data_dict, 'users')
        model.Session.commit()

        h.redirect_to('/publisher/%s' % str(group.name))
Example #22
0
def group_form_schema():
    schema = ckan_schema.default_group_schema()

    schema['description'] = [
        ignore_missing, unicode, validators.description_length_validator
    ]

    schema['packages'] = {
        "name": [not_empty, unicode],
        "title": [ignore_missing],
        "__extras": [ignore]
    }
    schema['users'] = {
        "name": [not_empty, unicode],
        "capacity": [ignore_missing],
        "__extras": [ignore]
    }
    schema['num_followers'] = []
    schema['package_count'] = [ignore_missing]

    return schema
Example #23
0
    def _add_users(self, group, parameters):
        if not group:
            h.flash_error(
                _("There was a problem with your submission, "
                  "please correct it and try again"))
            errors = {"reason": ["No reason was supplied"]}
            return self.apply(group.id,
                              errors=errors,
                              error_summary=action.error_summary(errors))

        data_dict = logic.clean_dict(
            dict_func.unflatten(
                logic.tuplize_dict(logic.parse_params(request.params))))
        data_dict['id'] = group.id

        # Temporary fix for strange caching during dev
        l = data_dict['users']
        for d in l:
            d['capacity'] = d.get('capacity', 'editor')

        context = {
            "group": group,
            "schema": schema.default_group_schema(),
            "model": model,
            "session": model.Session
        }

        # Temporary cleanup of a capacity being sent without a name
        users = [d for d in data_dict['users'] if len(d) == 2]
        data_dict['users'] = users

        model.repo.new_revision()
        model_save.group_member_save(context, data_dict, 'users')
        model.Session.commit()

        h.redirect_to(controller='group', action='edit', id=group.name)
Example #24
0
 def db_to_form_schema(self, package_type=None):
     from ckan.logic.schema import default_group_schema
     schema = default_group_schema()
     for optional_extra in [
             'category', 'contact-name', 'contact-email', 'contact-phone',
             'foi-name', 'foi-email', 'foi-web', 'foi-phone'
     ]:
         schema.update({
             optional_extra: [
                 toolkit.get_converter('convert_from_extras'),
                 toolkit.get_validator('ignore_missing'), unicode
             ]
         })
     schema['num_followers'] = []
     schema['created'] = []
     schema['display_name'] = []
     schema['package_count'] = [toolkit.get_validator('ignore_missing')]
     schema['packages'] = {
         '__extras': [toolkit.get_validator('keep_extras')]
     }
     schema['revision_id'] = []
     schema['state'] = []
     schema['users'] = {'__extras': [toolkit.get_validator('keep_extras')]}
     return schema
Example #25
0
File: create.py Project: zydio/ckan
def group_create(context, data_dict):
    model = context['model']
    user = context['user']
    session = context['session']
    schema = context.get('schema') or default_group_schema()
    parent = context.get('parent', None)

    check_access('group_create',context,data_dict)

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

    if errors:
        session.rollback()
        raise ValidationError(errors, group_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: Create object %s') % data.get("name")

    group = group_dict_save(data, context)

    if parent:
        parent_group = model.Group.get( parent )
        if parent_group:
            member = model.Member(group=parent_group, table_id=group.id, table_name='group')
            session.add(member)

    if user:
        admins = [model.User.by_name(user.decode('utf8'))]
    else:
        admins = []
    model.setup_default_user_roles(group, admins)
    # Needed to let extensions know the group id
    session.flush()

    for item in PluginImplementations(IGroupController):
        item.create(group)

    activity_dict = {
            'user_id': model.User.by_name(user.decode('utf8')).id,
            'object_id': group.id,
            'activity_type': 'new group',
            }
    activity_dict['data'] = {
            'group': ckan.lib.dictization.table_dictize(group, context)
            }
    activity_create_context = {
        'model': model,
        'user': user,
        'defer_commit':True,
        'session': session
    }
    activity_create(activity_create_context, activity_dict, ignore_auth=True)

    if not context.get('defer_commit'):
        model.repo.commit()
    context["group"] = group
    context["id"] = group.id
    log.debug('Created object %s' % str(group.name))
    return group_dictize(group, context)
Example #26
0
    def test_group_schema(self):
        group = factories.Group.model()
        context = {"model": model, "session": model.Session}
        factories.Dataset.create_batch(2, groups=[{"name": group.name}])

        data = group_dictize(group, context)

        # we don't want these here
        del data["groups"]
        del data["users"]
        del data["tags"]
        del data["extras"]

        converted_data, errors = validate(
            data, default_group_schema(), context
        )
        assert not errors
        group_pack = sorted(group.packages(), key=operator.attrgetter("id"))

        converted_data["packages"] = sorted(
            converted_data["packages"], key=operator.itemgetter("id")
        )

        expected = {
            "description": group.description,
            "id": group.id,
            "name": group.name,
            "is_organization": False,
            "type": u"group",
            "image_url": group.image_url,
            "image_display_url": group.image_url,
            "packages": sorted(
                [
                    {
                        "id": group_pack[0].id,
                        "name": group_pack[0].name,
                        "title": group_pack[0].title,
                    },
                    {
                        "id": group_pack[1].id,
                        "name": group_pack[1].name,
                        "title": group_pack[1].title,
                    },
                ],
                key=operator.itemgetter("id"),
            ),
            "title": group.title,
            "approval_status": u"approved",
        }

        assert converted_data == expected, pformat(converted_data)

        data["packages"].sort(key=lambda x: x["id"])
        data["packages"][0]["id"] = factories.Dataset.stub().name
        data["packages"][1].pop("id")
        data["packages"][1].pop("name")

        converted_data, errors = validate(
            data, default_group_schema(), context
        )
        assert errors == {
            "packages": [
                {"id": [u"Not found: Dataset"]},
                {"id": [u"Missing value"]},
            ]
        }, pformat(errors)
Example #27
0
    def test_2_group_schema(self):
        group = model.Session.query(model.Group).first()
        data = group_dictize(group, self.context)

        # we don't want these here
        del data["groups"]
        del data["users"]
        del data["tags"]
        del data["extras"]

        converted_data, errors = validate(
            data, default_group_schema(), self.context
        )
        group_pack = sorted(group.packages(), key=lambda x: x.id)

        converted_data["packages"] = sorted(
            converted_data["packages"], key=lambda x: x["id"]
        )

        expected = {
            "description": u"These are books that David likes.",
            "id": group.id,
            "name": u"david",
            "is_organization": False,
            "type": u"group",
            "image_url": u"",
            "image_display_url": u"",
            "packages": sorted(
                [
                    {
                        "id": group_pack[0].id,
                        "name": group_pack[0].name,
                        "title": group_pack[0].title,
                    },
                    {
                        "id": group_pack[1].id,
                        "name": group_pack[1].name,
                        "title": group_pack[1].title,
                    },
                ],
                key=lambda x: x["id"],
            ),
            "title": u"Dave's books",
            "approval_status": u"approved",
        }

        assert not errors
        assert converted_data == expected, pformat(converted_data)

        data["packages"].sort(key=lambda x: x["id"])
        data["packages"][0]["id"] = "fjdlksajfalsf"
        data["packages"][1].pop("id")
        data["packages"][1].pop("name")

        converted_data, errors = validate(
            data, default_group_schema(), self.context
        )
        assert errors == {
            "packages": [
                {"id": [u"Not found: Dataset"]},
                {"id": [u"Missing value"]},
            ]
        }, pformat(errors)
    def _add_users(self, group, parameters):
        from ckan.logic.schema import default_group_schema
        from ckan.logic.action import error_summary
        from ckan.lib.dictization.model_save import group_member_save

        if not group:
            h.flash_error(
                _("There was a problem with your submission, \
                             please correct it and try again"))
            errors = {"reason": ["No reason was supplied"]}
            return self.users(group.name,
                              errors=errors,
                              error_summary=error_summary(errors))

        data_dict = clean_dict(
            unflatten(tuplize_dict(parse_params(request.params))))
        data_dict['id'] = group.id

        # Check that the user being added, if they are a Drupal user, has
        # verified their email address
        new_users = [user['name'] for user in data_dict['users'] \
                     if not 'capacity' in user or user['capacity'] == 'undefined']

        # Removed Drupal auth stuff.
        # for user_name in new_users:
        # drupal_id = DrupalUserMapping.ckan_user_name_to_drupal_id(user_name)
        # if drupal_id:
        #     if not is_drupal_auth_activated():
        #         # joint auth with Drupal is not activated, so cannot
        #         # check with Drupal
        #         log.warning('Drupal user made editor/admin but without checking email is verified.')
        #         break
        #     if 'drupal_client' not in dir(self):
        #         self.drupal_client = DrupalClient()
        #     user_properties = self.drupal_client.get_user_properties(drupal_id)
        #     roles = user_properties['roles'].values()
        #     if 'unverified user' in roles:
        #         user = model.User.by_name(user_name)
        #         h.flash_error("There was a problem with your submission - see the error message below.")
        #         errors = {"reason": ['User "%s" has not verified their email address yet. '
        #                              'Please ask them to do this and then try again. ' % \
        #                               user.fullname]}
        #         log.warning('Trying to add user (%r %s) who is not verified to group %s',
        #                     user.fullname, user_name, group.name)
        #         # NB Other values in the form are lost, but that is probably ok
        #         return self.users(group.name, errors=errors,
        #                           error_summary=error_summary(errors))

        # Temporary fix for strange caching during dev
        l = data_dict['users']
        for d in l:
            # Form javascript creates d['capacity'] == 'undefined' for
            # newly added users.
            # If javascript in users form is not working (such as in tests)
            # it will not create a capacity value.
            if 'capacity' not in d or d['capacity'] == 'undefined':
                # default to 'editor'
                d['capacity'] = 'editor'

        context = {
            "group": group,
            "schema": default_group_schema(),
            "model": model,
            "session": model.Session
        }

        # Temporary cleanup of a capacity being sent without a name
        users = [d for d in data_dict['users'] if len(d) == 2]
        data_dict['users'] = users

        model.repo.new_revision()
        group_member_save(context, data_dict, 'users')
        model.Session.commit()

        h.redirect_to('/organisation/%s' % str(group.name))
Example #29
0
 def form_to_db_schema_api_create(self) -> dict[str, Any]:
     return schema.default_group_schema()