From f2537b1c4b5a8e5eaccccf1068a1cc669eff272b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20H=C3=BChne?= Date: Mon, 23 May 2016 12:00:13 +0200 Subject: [PATCH 1/8] [#3011] do not create default views on package_update --- ckan/logic/action/update.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/ckan/logic/action/update.py b/ckan/logic/action/update.py index ee6ead8b7bd..ae8bf610559 100644 --- a/ckan/logic/action/update.py +++ b/ckan/logic/action/update.py @@ -307,13 +307,6 @@ def package_update(context, data_dict): item.after_update(context, data) - # Create default views for resources if necessary - if data.get('resources'): - logic.get_action('package_create_default_resource_views')( - {'model': context['model'], 'user': context['user'], - 'ignore_auth': True}, - {'package': data}) - if not context.get('defer_commit'): model.repo.commit() From 5d9a994ee93714e6622e5eb47dd05d5ca4977782 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20H=C3=BChne?= Date: Mon, 23 May 2016 12:44:34 +0200 Subject: [PATCH 2/8] [#3011] Create default views on resource_create - This was not neccessary before because we would call `package_update` in the `resource_create` function. Now that `package_update` does not create the default views anymore the `resource_create` function has to do it itself --- ckan/logic/action/create.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ckan/logic/action/create.py b/ckan/logic/action/create.py index 8ea2cef6d77..c39775a5490 100644 --- a/ckan/logic/action/create.py +++ b/ckan/logic/action/create.py @@ -316,6 +316,16 @@ def resource_create(context, data_dict): updated_pkg_dict = _get_action('package_show')(context, {'id': package_id}) resource = updated_pkg_dict['resources'][-1] + ## Add the default views to the new resource + create_datastore_views = paste.deploy.converters.asbool( + data_dict.get('create_datastore_views', False)) + ckan.lib.datapreview.add_views_to_resource(context, + resource, + None, + view_types=[], + create_datastore_views= + create_datastore_views) + for plugin in plugins.PluginImplementations(plugins.IResourceController): plugin.after_create(context, resource) From 045927eae9a5f159f663adfd36d0f7d1cd8d5a6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20H=C3=BChne?= Date: Mon, 23 May 2016 12:46:10 +0200 Subject: [PATCH 3/8] [#3011] Remove tests for package_update and resource_update - The new logic is not to create the views anymore on `*_update` but just on `*_create` --- ckan/tests/lib/test_datapreview.py | 72 ------------------------------ 1 file changed, 72 deletions(-) diff --git a/ckan/tests/lib/test_datapreview.py b/ckan/tests/lib/test_datapreview.py index b2590c9413a..4ae2a740298 100644 --- a/ckan/tests/lib/test_datapreview.py +++ b/ckan/tests/lib/test_datapreview.py @@ -271,49 +271,6 @@ def test_default_views_created_on_package_create(self): eq_(len(views_list), 1) eq_(views_list[0]['view_type'], 'image_view') - def test_default_views_created_on_package_update(self): - - dataset_dict = factories.Dataset( - resources=[{ - 'url': 'http://not.for.viewing', - 'format': 'xxx', - }] - ) - - resource_id = dataset_dict['resources'][0]['id'] - - views_list = helpers.call_action('resource_view_list', id=resource_id) - - eq_(len(views_list), 0) - - updated_data_dict = { - 'id': dataset_dict['id'], - 'resources': [ - { - 'url': 'http://not.for.viewing', - 'format': 'xxx', - }, - { - 'url': 'http://some.image.png', - 'format': 'png', - }, - - - ] - } - - dataset_dict = helpers.call_action('package_update', **updated_data_dict) - - for resource in dataset_dict['resources']: - resource_id = resource['id'] if resource['format'] == 'PNG' else None - - assert resource_id - - updated_views_list = helpers.call_action('resource_view_list', id=resource_id) - eq_(len(updated_views_list), 1) - eq_(updated_views_list[0]['view_type'], 'image_view') - - pass def test_default_views_created_on_resource_create(self): @@ -336,32 +293,3 @@ def test_default_views_created_on_resource_create(self): eq_(len(views_list), 1) eq_(views_list[0]['view_type'], 'image_view') - - def test_default_views_created_on_resource_update(self): - - dataset_dict = factories.Dataset( - resources=[{ - 'url': 'http://not.for.viewing', - 'format': 'xxx', - }] - ) - - resource_id = dataset_dict['resources'][0]['id'] - - views_list = helpers.call_action('resource_view_list', id=resource_id) - - eq_(len(views_list), 0) - - resource_dict = { - 'id': resource_id, - 'package_id': dataset_dict['id'], - 'url': 'http://some.image.png', - 'format': 'png', - } - - updated_resource_dict = helpers.call_action('resource_update', **resource_dict) - - views_list = helpers.call_action('resource_view_list', id=updated_resource_dict['id']) - - eq_(len(views_list), 1) - eq_(views_list[0]['view_type'], 'image_view') From 505d1c9fafb963f1f7047c98b562e4b7cc3b5781 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20H=C3=BChne?= Date: Thu, 26 May 2016 12:04:22 +0200 Subject: [PATCH 4/8] [#3011] create default views via get_action --- ckan/logic/action/create.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ckan/logic/action/create.py b/ckan/logic/action/create.py index c39775a5490..ce90c43e936 100644 --- a/ckan/logic/action/create.py +++ b/ckan/logic/action/create.py @@ -317,14 +317,14 @@ def resource_create(context, data_dict): resource = updated_pkg_dict['resources'][-1] ## Add the default views to the new resource - create_datastore_views = paste.deploy.converters.asbool( - data_dict.get('create_datastore_views', False)) - ckan.lib.datapreview.add_views_to_resource(context, - resource, - None, - view_types=[], - create_datastore_views= - create_datastore_views) + logic.get_action('resource_create_default_resource_views')( + {'model': context['model'], + 'user': context['user'], + 'ignore_auth': True + }, + {'resource': resource, + 'package': updated_pkg_dict + }) for plugin in plugins.PluginImplementations(plugins.IResourceController): plugin.after_create(context, resource) From c906aa1bd1147c310be073edb63f5debda01c66c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20H=C3=BChne?= Date: Thu, 26 May 2016 12:36:31 +0200 Subject: [PATCH 5/8] [#3011] remove empty line for pep8 --- ckan/tests/lib/test_datapreview.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ckan/tests/lib/test_datapreview.py b/ckan/tests/lib/test_datapreview.py index 4ae2a740298..de80b55b5c3 100644 --- a/ckan/tests/lib/test_datapreview.py +++ b/ckan/tests/lib/test_datapreview.py @@ -271,7 +271,6 @@ def test_default_views_created_on_package_create(self): eq_(len(views_list), 1) eq_(views_list[0]['view_type'], 'image_view') - def test_default_views_created_on_resource_create(self): dataset_dict = factories.Dataset( From 218d6f4a9defe798ce8a1426f6cde5b01705b486 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20H=C3=BChne?= Date: Thu, 26 May 2016 15:12:27 +0200 Subject: [PATCH 6/8] [#3011] Spcifiy format in test Not sure if this is a good idea but all the tests should at least pass now --- ckanext/reclineview/tests/test_view.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ckanext/reclineview/tests/test_view.py b/ckanext/reclineview/tests/test_view.py index 897be8048f2..0a8a2ead8f3 100644 --- a/ckanext/reclineview/tests/test_view.py +++ b/ckanext/reclineview/tests/test_view.py @@ -107,7 +107,7 @@ def teardown_class(cls): def test_create_datastore_only_view(self): dataset = factories.Dataset() data = { - 'resource': {'package_id': dataset['id']}, + 'resource': {'package_id': dataset['id'], 'format': 'csv'}, 'fields': [{'id': 'a'}, {'id': 'b'}], 'records': [{'a': 1, 'b': 'xyz'}, {'a': 2, 'b': 'zzz'}] } From ab64c77869e029d0dd602957b5d618d098be7a3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20H=C3=BChne?= Date: Mon, 6 Jun 2016 11:40:10 +0200 Subject: [PATCH 7/8] [#3011] properly check for _datastore_only_resource --- ckanext/reclineview/plugin.py | 2 +- ckanext/reclineview/tests/test_view.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ckanext/reclineview/plugin.py b/ckanext/reclineview/plugin.py index 2a22a884347..26610c0c450 100644 --- a/ckanext/reclineview/plugin.py +++ b/ckanext/reclineview/plugin.py @@ -90,7 +90,7 @@ def can_view(self, data_dict): resource = data_dict['resource'] if (resource.get('datastore_active') or - resource.get('url') == '_datastore_only_resource'): + '_datastore_only_resource' in resource.get('url', '')): return True resource_format = resource.get('format', None) if resource_format: diff --git a/ckanext/reclineview/tests/test_view.py b/ckanext/reclineview/tests/test_view.py index 0a8a2ead8f3..897be8048f2 100644 --- a/ckanext/reclineview/tests/test_view.py +++ b/ckanext/reclineview/tests/test_view.py @@ -107,7 +107,7 @@ def teardown_class(cls): def test_create_datastore_only_view(self): dataset = factories.Dataset() data = { - 'resource': {'package_id': dataset['id'], 'format': 'csv'}, + 'resource': {'package_id': dataset['id']}, 'fields': [{'id': 'a'}, {'id': 'b'}], 'records': [{'a': 1, 'b': 'xyz'}, {'a': 2, 'b': 'zzz'}] } From 11369af309135bffa6ab2e4cbd87808562d1e059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20H=C3=BChne?= Date: Mon, 6 Jun 2016 12:49:32 +0200 Subject: [PATCH 8/8] [#3011] change check for _datastore_only_resource in ReclineViewBase --- ckanext/reclineview/plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ckanext/reclineview/plugin.py b/ckanext/reclineview/plugin.py index 26610c0c450..44de9b385dc 100644 --- a/ckanext/reclineview/plugin.py +++ b/ckanext/reclineview/plugin.py @@ -62,7 +62,7 @@ def update_config(self, config): def can_view(self, data_dict): resource = data_dict['resource'] return (resource.get('datastore_active') or - resource.get('url') == '_datastore_only_resource') + '_datastore_only_resource' in resource.get('url', '')) def setup_template_variables(self, context, data_dict): return {'resource_json': json.dumps(data_dict['resource']),