diff --git a/ckan/lib/uploader.py b/ckan/lib/uploader.py index 05ac1ae90df..aa0e9d6748c 100644 --- a/ckan/lib/uploader.py +++ b/ckan/lib/uploader.py @@ -16,6 +16,20 @@ _max_image_size = None +def get_uploader(upload_to, old_filename=None): + '''Query IUploader plugins and return an uploader instance for general + files.''' + upload = None + for plugin in plugins.PluginImplementations(plugins.IUploader): + upload = plugin.get_uploader(upload_to, old_filename) + + # default uploader + if upload is None: + upload = Upload(upload_to, old_filename) + + return upload + + def get_resource_uploader(data_dict): '''Query IUploader plugins and return a resource uploader instance.''' upload = None diff --git a/ckan/logic/action/create.py b/ckan/logic/action/create.py index 7eee12a70b0..c5107f19fc0 100644 --- a/ckan/logic/action/create.py +++ b/ckan/logic/action/create.py @@ -684,7 +684,7 @@ def _group_or_org_create(context, data_dict, is_org=False): session = context['session'] data_dict['is_organization'] = is_org - upload = uploader.Upload('group') + upload = uploader.get_uploader('group') upload.update_data_dict(data_dict, 'image_url', 'image_upload', 'clear_upload') # get the schema @@ -766,6 +766,7 @@ def _group_or_org_create(context, data_dict, is_org=False): logic.get_action('activity_create')(activity_create_context, activity_dict) upload.upload(uploader.get_max_image_size()) + if not context.get('defer_commit'): model.repo.commit() context["group"] = group diff --git a/ckan/logic/action/update.py b/ckan/logic/action/update.py index 2c6467e2c71..6809766892e 100644 --- a/ckan/logic/action/update.py +++ b/ckan/logic/action/update.py @@ -499,6 +499,7 @@ def package_relationship_update(context, data_dict): context['relationship'] = entity return _update_package_relationship(entity, comment, context) + def _group_or_org_update(context, data_dict, is_org=False): model = context['model'] user = context['user'] @@ -515,15 +516,15 @@ def _group_or_org_update(context, data_dict, is_org=False): # get the schema group_plugin = lib_plugins.lookup_group_plugin(group.type) try: - schema = group_plugin.form_to_db_schema_options({'type':'update', - 'api':'api_version' in context, + schema = group_plugin.form_to_db_schema_options({'type': 'update', + 'api': 'api_version' in context, 'context': context}) except AttributeError: schema = group_plugin.form_to_db_schema() - upload = uploader.Upload('group', group.image_url) + upload = uploader.get_uploader('group', group.image_url) upload.update_data_dict(data_dict, 'image_url', - 'image_upload', 'clear_upload') + 'image_upload', 'clear_upload') if is_org: _check_access('organization_update', context, data_dict) @@ -609,12 +610,13 @@ def _group_or_org_update(context, data_dict, is_org=False): # in the group. upload.upload(uploader.get_max_image_size()) + if not context.get('defer_commit'): model.repo.commit() - return model_dictize.group_dictize(group, context) + def group_update(context, data_dict): '''Update a group. diff --git a/ckan/plugins/interfaces.py b/ckan/plugins/interfaces.py index d7707b141d2..2c9ba115e9d 100644 --- a/ckan/plugins/interfaces.py +++ b/ckan/plugins/interfaces.py @@ -1467,6 +1467,8 @@ class IUploader(Interface): be used by resource_create and resource_update actions. ''' + def get_uploader(self): + '''Return an uploader object used to upload general files.''' + def get_resource_uploader(self): - '''Return an alternative resource uploader object for resource - files.''' + '''Return an uploader object used to upload resource files.'''