--- a/ckanext/datagovau/plugin.py +++ b/ckanext/datagovau/plugin.py @@ -6,22 +6,9 @@ import ckan.plugins.toolkit as tk import ckan.model as model from pylons import config -from routes.mapper import SubMapper, Mapper as _Mapper from sqlalchemy import orm import ckan.model - -#parse the activity feed for last active non-system user -def get_last_active_user(id): - system_user = lib.helpers.get_action('user_show',{'id': config.get('ckan.site_id', 'ckan_site_user')}) - user_list = [x for x in lib.helpers.get_action('package_activity_list',{'id':id}) if x['user_id'] != system_user['id']] - user = None - if len(user_list) > 0: - user = user_list[0].get('user_id', None) - if user is None: - return system_user - else: - return lib.helpers.get_action('user_show',{'id':user}) # get user created datasets and those they have edited def get_user_datasets(user_dict): @@ -43,57 +30,7 @@ ''' plugins.implements(plugins.IConfigurer, inherit=False) - plugins.implements(plugins.IDatasetForm, inherit=False) plugins.implements(plugins.ITemplateHelpers, inherit=False) - plugins.implements(plugins.IRoutes, inherit=True) - - def before_map(self, map): - - # Helpers to reduce code clutter - GET = dict(method=['GET']) - PUT = dict(method=['PUT']) - POST = dict(method=['POST']) - DELETE = dict(method=['DELETE']) - GET_POST = dict(method=['GET', 'POST']) - # intercept API calls that we want to capture analytics on - register_list = [ - 'package', - 'dataset', - 'resource', - 'tag', - 'group', - 'related', - 'revision', - 'licenses', - 'rating', - 'user', - 'activity' - ] - register_list_str = '|'.join(register_list) - # /api ver 3 or none - with SubMapper(map, controller='ckanext.datagovau.controller:DGAApiController', path_prefix='/api{ver:/3|}', - ver='/3') as m: - m.connect('/action/{logic_function}', action='action', - conditions=GET_POST) - - # /api ver 1, 2, 3 or none - with SubMapper(map, controller='ckanext.datagovau.controller:DGAApiController', path_prefix='/api{ver:/1|/2|/3|}', - ver='/1') as m: - m.connect('/search/{register}', action='search') - - # /api/rest ver 1, 2 or none - with SubMapper(map, controller='ckanext.datagovau.controller:DGAApiController', path_prefix='/api{ver:/1|/2|}', - ver='/1', requirements=dict(register=register_list_str) - ) as m: - - m.connect('/rest/{register}', action='list', conditions=GET) - m.connect('/rest/{register}', action='create', conditions=POST) - m.connect('/rest/{register}/{id}', action='show', conditions=GET) - m.connect('/rest/{register}/{id}', action='update', conditions=PUT) - m.connect('/rest/{register}/{id}', action='update', conditions=POST) - m.connect('/rest/{register}/{id}', action='delete', conditions=DELETE) - - return map def update_config(self, config): # Add this plugin's templates dir to CKAN's extra_template_paths, so @@ -107,112 +44,6 @@ # config['licenses_group_url'] = 'http://%(ckan.site_url)/licenses.json' def get_helpers(self): - return {'get_last_active_user': get_last_active_user, 'get_user_datasets': get_user_datasets} - - 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 True - - def package_types(self): - # This plugin doesn't handle any special package types, it just - # registers itself as the default (above). - return [] + return {'get_user_datasets': get_user_datasets} - def create_package_schema(self): - schema = super(DataGovAuPlugin, self).create_package_schema() - schema = self._modify_package_schema(schema) - return schema - - def update_package_schema(self): - schema = super(DataGovAuPlugin, self).update_package_schema() - schema = self._modify_package_schema(schema) - return schema - - def show_package_schema(self): - schema = super(DataGovAuPlugin, self).show_package_schema() - - # Don't show vocab tags mixed in with normal 'free' tags - # (e.g. on dataset pages, or on the search page) - schema['tags']['__extras'].append(tk.get_converter('free_tags_only')) - - # Add our custom_text field to the dataset schema. - # ignore_missing == optional - # ignore_empty == mandatory but not for viewing - # !!! always convert_from_extras first - schema.update({ - 'agency_program': [tk.get_converter('convert_from_extras'), - tk.get_validator('ignore_missing')], - 'contact_point': [tk.get_converter('convert_from_extras'), - tk.get_validator('ignore_empty')], - 'spatial_coverage': [tk.get_converter('convert_from_extras'), - tk.get_validator('ignore_empty')], - 'granularity': [tk.get_converter('convert_from_extras'), - tk.get_validator('ignore_empty')], - 'jurisdiction': [tk.get_converter('convert_from_extras'), - tk.get_validator('ignore_empty')], - 'temporal_coverage': [tk.get_converter('convert_from_extras'), - tk.get_validator('ignore_empty')], - 'data_state': [tk.get_converter('convert_from_extras'), - tk.get_validator('ignore_empty')], - 'update_freq': [tk.get_converter('convert_from_extras'), - tk.get_validator('ignore_empty')] - }) - return schema - - def _modify_package_schema(self, schema): - # Add our custom_test metadata field to the schema, this one will use - # convert_to_extras instead of convert_to_tags. - # ignore_missing == optional - # not_empty == mandatory, enforced here while modifying - - schema.update({ - 'agency_program': [tk.get_validator('ignore_missing'), - tk.get_converter('convert_to_extras')], - 'contact_point': [tk.get_converter('convert_to_extras'), - tk.get_validator('not_empty')], - 'spatial_coverage': [tk.get_converter('convert_to_extras'), - tk.get_validator('not_empty')], - 'granularity': [tk.get_converter('convert_to_extras'), - tk.get_validator('not_empty')], - 'jurisdiction': [tk.get_converter('convert_to_extras'), - tk.get_validator('not_empty')], - 'temporal_coverage': [tk.get_converter('convert_to_extras'), - tk.get_validator('not_empty')], - 'data_state': [tk.get_converter('convert_to_extras'), - tk.get_validator('not_empty')], - 'update_freq': [tk.get_converter('convert_to_extras'), - tk.get_validator('not_empty')] - }) - return schema - - # These methods just record how many times they're called, for testing - # purposes. - # TODO: It might be better to test that custom templates returned by - # these methods are actually used, not just that the methods get - # called. - - def setup_template_variables(self, context, data_dict): - return super(DataGovAuPlugin, self).setup_template_variables( - context, data_dict) - - def new_template(self): - return super(DataGovAuPlugin, self).new_template() - - def read_template(self): - return super(DataGovAuPlugin, self).read_template() - - def edit_template(self): - return super(DataGovAuPlugin, self).edit_template() - - def search_template(self): - return super(DataGovAuPlugin, self).search_template() - - def history_template(self): - return super(DataGovAuPlugin, self).history_template() - - def package_form(self): - return super(DataGovAuPlugin, self).package_form() - -