Fix refactoring of plugin name
[ckanext-datagovau.git] / ckanext / datagovau / plugin.py
blob:a/ckanext/datagovau/plugin.py -> blob:b/ckanext/datagovau/plugin.py
--- a/ckanext/datagovau/plugin.py
+++ b/ckanext/datagovau/plugin.py
@@ -6,6 +6,10 @@
 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):
@@ -24,10 +28,12 @@
     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')]
-    return created_datasets_list + active_datasets_list
-
-def datastore_search(context, data_dict):
-        return {'success': True} # allow all datastore search
+    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):
@@ -39,12 +45,55 @@
     plugins.implements(plugins.IConfigurer, inherit=False)
     plugins.implements(plugins.IDatasetForm, inherit=False)
     plugins.implements(plugins.ITemplateHelpers, inherit=False)
-    plugins.implements(plugins.IAuthFunctions)
-
-
-    def get_auth_functions(self):
-        return {'datastore_search': datastore_search}
-
+    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