[ckan-dev] Reading error after adding a new field in Organization
Qifeng.Bai at csiro.au
Qifeng.Bai at csiro.au
Fri May 9 04:35:45 UTC 2014
Hi, there
I have been struggling into add a new field into "Organization" for a whole week. I have managed add a field "project_leader" into "organization'
I can use API method to retrieve this project and get the value of "project_leader". However, when I use CKAN page: http://127.0.0.1:5000/organization/project6, it returns me "ValidationError: {'name': [u'Missing value']}"
Any comments are appreciated!
See below:
API method return correct value:
http://localhost:5000/api/3/action/organization_show?id=project6 .
It returns:
{
help: "Return the details of a organization. :param id: the id or name of the organization :type id: string :param include_datasets: include a list of the organization's datasets (optional, default: ``True``) :type id: boolean :rtype: dictionary .. note:: Only its first 1000 datasets are returned ",
success: true,
result: {
packages: [ ],
display_name: "project6",
approval_status: "approved",
image_display_url: "",
title: "project6",
name: "project6",
is_organization: true,
image_url: "",
groups: [ ],
users: [
{
capacity: "admin",
name: "baiqif"
}
],
project_leader: "p4",
type: "organization",
id: "e0439ec8-0895-49a1-bc4d-c2df0dce1d54",
tags: [ ],
description: ""
}
}
use CKAN page: http://127.0.0.1:5000/organization/project6 returns error:
File '/home/ckan/ckan/lib/default/src/ckan/ckan/controllers/group.py', line 187 in read
c.group_dict = self._action('group_show')(context, data_dict)
File '/home/ckan/ckan/lib/default/src/ckan/ckan/logic/__init__.py', line 419 in wrapped
result = _action(context, data_dict, **kw)
File '/home/ckan/ckan/lib/default/src/ckan/ckan/logic/action/get.py', line 1046 in organization_show
return _group_or_org_show(context, data_dict, is_org=True)
File '/home/ckan/ckan/lib/default/src/ckan/ckan/logic/action/get.py', line 989 in _group_or_org_show
group_dict = model_dictize.group_dictize(group, context)
File '/home/ckan/ckan/lib/default/src/ckan/ckan/lib/dictization/model_dictize.py', line 379 in group_dictize
search_results = logic.get_action('package_search')(context, q)
File '/home/ckan/ckan/lib/default/src/ckan/ckan/logic/__init__.py', line 419 in wrapped
result = _action(context, data_dict, **kw)
File '/home/ckan/ckan/lib/default/src/ckan/ckan/logic/action/get.py', line 1430 in package_search
raise ValidationError(errors)
ValidationError: {'name': [u'Missing value']}
Here are my codes:
class NlmpProjectFormPlugin(plugins.SingletonPlugin,DefaultOrganizationForm):
plugins.implements(plugins.IConfigurer, inherit=True)
plugins.implements(plugins.IGroupForm, inherit=True)
def update_config(self, config):
# Add this plugin's templates dir to CKAN's extra_template_paths, so
# that CKAN will use this plugin's custom templates.
tk.add_template_directory(config, 'templates')
def group_form(self):
return 'organization/new_organization_form.html'
def setup_template_variables(self, context, data_dict):
pass
def new_template(self):
return 'organization/new.html'
def about_template(self):
return 'organization/about.html'
def index_template(self):
return 'organization/index.html'
def admins_template(self):
return 'organization/admins.html'
def bulk_process_template(self):
return 'organization/bulk_process.html'
def read_template(self):
return 'organization/read.html'
# don't override history_template - use group template for history
def edit_template(self):
return 'organization/edit.html'
def activity_template(self):
return 'organization/activity_stream.html'
def is_fallback(self):
# Return True to register this plugin as the default handler for
# package types not handled by any other IDatasetForm plugin.
return False
def group_types(self):
# This plugin doesn't handle any special package types, it just
# registers itself as the default (above).
return ['organization']
def form_to_db_schema_options(self, options):
''' This allows us to select different schemas for different
purpose eg via the web interface or via the api or creation vs
updating. It is optional and if not available form_to_db_schema
should be used.
If a context is provided, and it contains a schema, it will be
returned.
'''
schema = options.get('context', {}).get('schema', None)
if schema:
return schema
if options.get('api'):
if options.get('type') == 'create':
return self.form_to_db_schema_api_create()
else:
return self.form_to_db_schema_api_update()
else:
return self.form_to_db_schema()
def form_to_db_schema_api_create(self):
schema = super(NlmpProjectFormPlugin, self).form_to_db_schema_api_create()
schema = self._modify_group_schema(schema)
return schema
def form_to_db_schema_api_update(self):
schema = super(NlmpProjectFormPlugin, self).form_to_db_schema_api_update()
schema = self._modify_group_schema(schema)
return schema
def form_to_db_schema(self):
schema = super(NlmpProjectFormPlugin, self).form_to_db_schema()
schema = self._modify_group_schema(schema)
return schema
def _modify_group_schema(self, schema):
#Import core converters and validators
_convert_to_extras = tk.get_converter('convert_to_extras')
_ignore_missing = tk.get_validator('ignore_missing')
default_validators = [_ignore_missing, _convert_to_extras]
schema.update({
'project_leader':default_validators
})
return schema
def db_to_form_schema(self):
# Import core converters and validators
_convert_from_extras = tk.get_converter('convert_from_extras')
_ignore_missing = tk.get_validator('ignore_missing')
schema = super(NlmpProjectFormPlugin, self).form_to_db_schema()
default_validators = [_convert_from_extras, _ignore_missing]
schema.update({
'project_leader':default_validators
})
return schema
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.okfn.org/pipermail/ckan-dev/attachments/20140509/3e73e214/attachment-0003.html>
More information about the ckan-dev
mailing list