--- a/ckanext/datagovau/plugin.py +++ b/ckanext/datagovau/plugin.py @@ -5,19 +5,37 @@ import ckan.lib.dictization.model_dictize as model_dictize 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 = "de0ba262-83fe-45e2-adda-41bb9f0c86d8" - user_list = [x for x in lib.helpers.get_action('package_activity_list',{'id':id}) if x['user_id'] != system_user] - user = user_list[0]['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 lib.helpers.get_action('user_show',{'id':system_user}) + return system_user else: return lib.helpers.get_action('user_show',{'id':user}) - -class ExampleIDatasetFormPlugin(plugins.SingletonPlugin, +# get user created datasets and those they have edited +def get_user_datasets(user_dict): + created_datasets_list = user_dict['datasets'] + active_datasets_list = [x['data']['package'] for x in + lib.helpers.get_action('user_activity_list',{'id':user_dict['id']}) if x['data'].get('package')] + raw_list = created_datasets_list + active_datasets_list + filtered_dict = {} + for dataset in raw_list: + if dataset['id'] not in filtered_dict.keys(): + filtered_dict[dataset['id']] = dataset + return filtered_dict.values() + +class DataGovAuPlugin(plugins.SingletonPlugin, tk.DefaultDatasetForm): '''An example IDatasetForm CKAN plugin. @@ -27,18 +45,55 @@ plugins.implements(plugins.IConfigurer, inherit=False) plugins.implements(plugins.IDatasetForm, inherit=False) plugins.implements(plugins.ITemplateHelpers, inherit=False) - - # These record how many times methods that this plugin's methods are - # called, for testing purposes. - num_times_new_template_called = 0 - num_times_read_template_called = 0 - num_times_edit_template_called = 0 - num_times_search_template_called = 0 - num_times_history_template_called = 0 - num_times_package_form_called = 0 - num_times_check_data_dict_called = 0 - num_times_setup_template_variables_called = 0 - + 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 @@ -52,7 +107,7 @@ # config['licenses_group_url'] = 'http://%(ckan.site_url)/licenses.json' def get_helpers(self): - return {'get_last_active_user': get_last_active_user} + 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 @@ -66,17 +121,17 @@ def create_package_schema(self): - schema = super(ExampleIDatasetFormPlugin, self).create_package_schema() + schema = super(DataGovAuPlugin, self).create_package_schema() schema = self._modify_package_schema(schema) return schema def update_package_schema(self): - schema = super(ExampleIDatasetFormPlugin, self).update_package_schema() + schema = super(DataGovAuPlugin, self).update_package_schema() schema = self._modify_package_schema(schema) return schema def show_package_schema(self): - schema = super(ExampleIDatasetFormPlugin, self).show_package_schema() + 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) @@ -139,25 +194,25 @@ # called. def setup_template_variables(self, context, data_dict): - return super(ExampleIDatasetFormPlugin, self).setup_template_variables( + return super(DataGovAuPlugin, self).setup_template_variables( context, data_dict) def new_template(self): - return super(ExampleIDatasetFormPlugin, self).new_template() + return super(DataGovAuPlugin, self).new_template() def read_template(self): - return super(ExampleIDatasetFormPlugin, self).read_template() + return super(DataGovAuPlugin, self).read_template() def edit_template(self): - return super(ExampleIDatasetFormPlugin, self).edit_template() + return super(DataGovAuPlugin, self).edit_template() def search_template(self): - return super(ExampleIDatasetFormPlugin, self).search_template() + return super(DataGovAuPlugin, self).search_template() def history_template(self): - return super(ExampleIDatasetFormPlugin, self).history_template() + return super(DataGovAuPlugin, self).history_template() def package_form(self): - return super(ExampleIDatasetFormPlugin, self).package_form() - - + return super(DataGovAuPlugin, self).package_form() + +