From 222b78e2b1ec1133e1c6eefae285855b8b8f516b Mon Sep 17 00:00:00 2001 From: Ross Jones Date: Mon, 10 Sep 2012 13:51:52 +0100 Subject: [PATCH] Separating out the group schemas into organization schemas --- ckan/controllers/organization.py | 4 +- ckan/logic/schema.py | 63 ++++++++++++++++++++++++++++++++ ckan/logic/validators.py | 16 ++++++++ 3 files changed, 81 insertions(+), 2 deletions(-) diff --git a/ckan/controllers/organization.py b/ckan/controllers/organization.py index 3d9c14b1a3b..b31317a61fe 100644 --- a/ckan/controllers/organization.py +++ b/ckan/controllers/organization.py @@ -38,7 +38,7 @@ class OrganizationController(BaseController): """ def form_to_db_schema(self): - return schema.group_form_schema() + return schema.organization_form_schema() def db_to_form_schema(self): '''This is an interface to manipulate data from the database @@ -490,7 +490,7 @@ def _add_users(self, group, parameters): context = { "group": group, - "schema": schema.default_group_schema(), + "schema": schema.default_organization_schema(), "model": model, "session": model.Session } diff --git a/ckan/logic/schema.py b/ckan/logic/schema.py index 97425021c5a..78713f38731 100644 --- a/ckan/logic/schema.py +++ b/ckan/logic/schema.py @@ -15,6 +15,7 @@ package_name_validator, package_version_validator, group_name_validator, + organization_name_validator, tag_length_validator, tag_name_validator, tag_string_convert, @@ -202,6 +203,46 @@ def db_to_form_package_schema(): }) return schema +def default_organization_schema(): + + schema = { + 'id': [ignore_missing, unicode], + 'revision_id': [ignore], + 'name': [not_empty, unicode, name_validator, organization_name_validator], + 'title': [ignore_missing, unicode], + 'description': [ignore_missing, unicode], + 'image_url': [ignore_missing, unicode], + 'type': [ignore_missing, unicode], + 'state': [ignore_not_group_admin, ignore_missing], + 'created': [ignore], + 'approval_status': [ignore_missing, unicode], + 'extras': default_extras_schema(), + '__extras': [ignore], + 'packages': { + "id": [not_empty, unicode, package_id_or_name_exists], + "title":[ignore_missing, unicode], + "name":[ignore_missing, unicode], + "__extras": [ignore] + }, + 'groups': { + "name": [not_empty, unicode], + "capacity": [ignore_missing], + "__extras": [ignore] + }, + 'users': { + "name": [not_empty, unicode], + "capacity": [ignore_missing], + "__extras": [ignore] + }, + 'groups': { + "name": [not_empty, unicode], + "capacity": [ignore_missing], + "__extras": [ignore] + } + } + return schema + + def default_group_schema(): schema = { @@ -241,6 +282,22 @@ def default_group_schema(): } return schema +def organization_form_schema(): + schema = default_organization_schema() + schema['packages'] = { + "name": [not_empty, unicode], + "title": [ignore_missing], + "__extras": [ignore] + } + schema['users'] = { + "name": [not_empty, unicode], + "capacity": [ignore_missing], + "__extras": [ignore] + } + schema['display_name'] = [ignore_missing] + return schema + + def group_form_schema(): schema = default_group_schema() #schema['extras_validation'] = [duplicate_extras_key, ignore] @@ -258,6 +315,12 @@ def group_form_schema(): return schema +def default_update_organization_schema(): + schema = default_organization_schema() + schema["name"] = [ignore_missing, organiztion_name_validator, unicode] + return schema + + def default_update_group_schema(): schema = default_group_schema() schema["name"] = [ignore_missing, group_name_validator, unicode] diff --git a/ckan/logic/validators.py b/ckan/logic/validators.py index 12cb0cbcb8f..c3ee69526fb 100644 --- a/ckan/logic/validators.py +++ b/ckan/logic/validators.py @@ -269,6 +269,22 @@ def duplicate_extras_key(key, data, errors, context): if extras_keys: errors[key].append(_('Duplicate key "%s"') % extras_keys[0]) +def organization_name_validator(key, data, errors, context): + model = context['model'] + session = context['session'] + organization = context.get('organization') + + query = session.query(model.Group.name).filter_by(name=data[key]) + if group: + group_id = organization.id + else: + group_id = data.get(key[:-1] + ('id',)) + if group_id and group_id is not missing: + query = query.filter(model.Group.id <> group_id) + result = query.first() + if result: + errors[key].append(_('Organization name already exists in database')) + def group_name_validator(key, data, errors, context): model = context['model'] session = context['session']