# HG changeset patch # User Sverre Rabbelier # Date 1236865104 0 # Node ID 7204ec5ead23ccb3c5a8744070f8b2a88cee693d # Parent e151c2039a981545f554c6670cb48684fd262331 Factor download functionality out of export() This way any kind of data can be offered as downloadable file. Patch by: Sverre Rabbelier diff -r e151c2039a98 -r 7204ec5ead23 app/soc/templates/soc/document/export.html --- a/app/soc/templates/soc/document/export.html Thu Mar 12 13:37:26 2009 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -{% comment %} -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -{% endcomment %} -{{ entity.content|safe }} diff -r e151c2039a98 -r 7204ec5ead23 app/soc/templates/soc/export.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/soc/templates/soc/export.html Thu Mar 12 13:38:24 2009 +0000 @@ -0,0 +1,15 @@ +{% comment %} +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +{% endcomment %} + +{{ data|safe }} diff -r e151c2039a98 -r 7204ec5ead23 app/soc/views/helper/params.py --- a/app/soc/views/helper/params.py Thu Mar 12 13:37:26 2009 +0000 +++ b/app/soc/views/helper/params.py Thu Mar 12 13:38:24 2009 +0000 @@ -220,7 +220,7 @@ 'List %(name_plural)s')] new_params['public_template'] = 'soc/%(module_name)s/public.html' % params - new_params['export_template'] = 'soc/%(module_name)s/export.html' % params + new_params['export_template'] = 'soc/export.html' % params new_params['create_template'] = 'soc/models/edit.html' new_params['edit_template'] = 'soc/models/edit.html' new_params['admin_template'] = 'soc/models/admin.html' diff -r e151c2039a98 -r 7204ec5ead23 app/soc/views/models/base.py --- a/app/soc/views/models/base.py Thu Mar 12 13:37:26 2009 +0000 +++ b/app/soc/views/models/base.py Thu Mar 12 13:38:24 2009 +0000 @@ -185,13 +185,8 @@ error_export: The error_export value is used as template when the key values (as defined by the page's url) do not correspond to an existing entity. - name: The name value is used to set the entity_type in the - context so that the template can refer to it. - export_template: The export_template value is used as template - to display the export page of the found entity. - export_content_type: The export_content_type value is used to set - the Content-Type header of the HTTP response. If empty (or None), - public() is called instead. + Params is passed to download, refer to it's docstring for more + details on how it uses it. Args: request: the standard Django HTTP request object @@ -201,14 +196,11 @@ kwargs: the Key Fields for the specified entity """ - if not params.get('export_content_type'): + if not ('export_content_type' in params) and ('export_function' in params): return self.public(request, access_type, page_name=page_name, params=params, **kwargs) # create default template context for use with any templates - context = helper.responses.getUniversalContext(request) - helper.responses.useJavaScript(context, params['js_uses_all']) - context['page_name'] = page_name entity = None logic = params['logic'] @@ -220,12 +212,34 @@ entity = logic.getFromKeyFieldsOr404(kwargs) except out_of_band.Error, error: return helper.responses.errorResponse( - error, request, template=params['error_export'], context=context) + error, request, template=params['error_export']) + + export_function = params['export_function'] + data, filename = export_function(entity) + + return self.download(request, data, filename, params) + + def download(self, request, data, filename, params): + """Returns data as a downloadable file with the specified name. - self._export(request, entity, context) + Params usage: + export_template: The export_template value is used as template + to display the export page of the found entity. + export_content_type: The export_content_type value is used to set + the Content-Type header of the HTTP response. If empty (or None), + public() is called instead. + export_extension: The export_extension value is used as the suffix + of the file that will be offered for download. - context['entity'] = entity - context['entity_type'] = params['name'] + Args: + request: the standard Django HTTP request object + data: the data that should be offered as file content + filename: the name the file should have + params: a dict with params for this View + """ + + context = {} + context['data'] = data template = params['export_template'] @@ -235,7 +249,7 @@ response_headers = { 'Content-Disposition': 'attachment; filename=%s%s' % ( - entity.link_id, export_extension), + filename, export_extension), } return helper.responses.respond(request, template, context=context, @@ -731,16 +745,6 @@ """ pass - def _export(self, request, entity, context): - """Performs any required processing to get an entity's export page. - - Args: - request: the django request object - entity: the entity to export - context: the context object - """ - pass - def _editGet(self, request, entity, form): """Performs any required processing on the form to get its edit page. diff -r e151c2039a98 -r 7204ec5ead23 app/soc/views/models/document.py --- a/app/soc/views/models/document.py Thu Mar 12 13:37:26 2009 +0000 +++ b/app/soc/views/models/document.py Thu Mar 12 13:38:24 2009 +0000 @@ -67,6 +67,7 @@ new_params['export_content_type'] = 'text/text' new_params['export_extension'] = '.html' + new_params['export_function'] = lambda x: (x.content, x.link_id) new_params['delete_redirect'] = '/' new_params['no_create_raw'] = True