summaryrefslogtreecommitdiff
path: root/app/lib/grappelli/actions.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/lib/grappelli/actions.py')
-rw-r--r--app/lib/grappelli/actions.py150
1 files changed, 0 insertions, 150 deletions
diff --git a/app/lib/grappelli/actions.py b/app/lib/grappelli/actions.py
deleted file mode 100644
index d49c317..0000000
--- a/app/lib/grappelli/actions.py
+++ /dev/null
@@ -1,150 +0,0 @@
-# coding: utf-8
-
-# PYTHON IMPORTS
-from datetime import datetime
-import csv
-import re
-from types import *
-
-# DJANGO IMPORTS
-from django.contrib.admin import helpers
-from django.utils.encoding import force_unicode
-from django.shortcuts import render_to_response
-from django import template
-from django.contrib.admin.util import unquote
-from django.http import HttpResponse
-from django.utils.translation import ugettext as _
-
-
-def get_csv_export_fields(modeladmin, included):
- """
- Return a sequence of tuples which should be included in the export.
- """
- model_fields = [f.name for f in modeladmin.model._meta.fields]
- #for relation in modeladmin.csv_follow_relations:
- # for field in modeladmin.model._meta.get_field_by_name(relation)[0].rel.to._meta.fields:
- # fields.append([relation, field.name])
- fields = []
- for item in modeladmin.list_display:
- if item != "action_checkbox":
- if csv_get_fieldname(item) in included:
- fields.append(item)
- elif isinstance(item, FunctionType) and (item.__name__ in included):
- fields.append(item)
-
- for f in model_fields:
- if (csv_get_fieldname(f) in included) and (csv_get_fieldname(f) not in fields):
- fields.append(f)
- return fields
-
-
-def get_csv_export_field_names(modeladmin):
- model_fields = [f for f in modeladmin.model._meta.fields]
- #for relation in modeladmin.csv_follow_relations:
- # for field in modeladmin.model._meta.get_field_by_name(relation)[0].rel.to._meta.fields:
- # fields.append([relation, field.name])
- fields = []
- for item in modeladmin.list_display:
- if isinstance(item, FunctionType):
- fields.append([item.__name__, item.short_description])
- elif item != "action_checkbox":
- appended = False
- for f in model_fields:
- if f.name == item:
- fields.append([f.name, f.verbose_name])
- appended = True
- break
- if not appended:
- fields.append([item, item])
-
- for f in model_fields:
- inserted = False
- for item in fields:
- if item[0] == f.name:
- inserted = True
- break
- if not inserted:
- fields.append([f.name, f.verbose_name])
- return fields
-
-
-def csv_get_export_filename(modeladmin):
- ts = datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
- return '%s_%s_%s_export.csv' % (ts, modeladmin.model._meta.app_label, modeladmin.model._meta.module_name)
-
-
-def csv_resolve_field(row, fieldname):
- if isinstance(fieldname, basestring):
- if isinstance(getattr(row, fieldname), MethodType):
- return getattr(row, fieldname)()
- else:
- return getattr(row, fieldname)
- elif isinstance(fieldname, FunctionType):
- return fieldname(row)
- else:
- obj = row
- for bit in fieldname:
- obj = getattr(obj, bit)
- return obj
-
-
-def csv_get_fieldname(field):
- if isinstance(field, basestring):
- return field
- elif isinstance(field, FunctionType):
- return field.short_description
- return '.'.join(field)
-
-
-def csv_export_selected(modeladmin, request, queryset):
- if request.POST.get('post'):
- csv_export_url = '~csv/'
- csv_export_dialect = 'excel'
- #csv_follow_relations = []
- csv_export_fmtparam = {
- 'delimiter': ';',
- 'quotechar': '"',
- 'quoting': csv.QUOTE_MINIMAL,
- }
- fields = get_csv_export_fields(modeladmin, request.POST.getlist('_fields'))
- headers = [csv_get_fieldname(f) for f in fields]
-
- response = HttpResponse(mimetype='text/csv')
- response['Content-Disposition'] = 'attachment; filename=%s' % csv_get_export_filename(modeladmin)
- writer = csv.writer(response, csv_export_dialect, **csv_export_fmtparam)
- writer.writerow(headers)
- for row in queryset:
- csvrow = [f.encode('utf-8') if isinstance(f, unicode) else f for f in [csv_resolve_field(row, f) for f in fields]]
- writer.writerow(csvrow)
- return response
-
- fields = get_csv_export_field_names(modeladmin)
-
- list_display = []
- for item in modeladmin.list_display:
- if isinstance(item, basestring):
- list_display.append(item)
- else:
- list_display.append(item.__name__)
-
- opts = modeladmin.model._meta
- app_label = opts.app_label
- context = {
- "title": _("Export as CSV"),
- "object_name": force_unicode(opts.verbose_name),
- 'queryset': queryset,
- "opts": opts,
- "root_path": modeladmin.admin_site.root_path,
- "app_label": app_label,
- 'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
- 'fields': fields,
- 'list_display': list_display,
- }
-
- # Display the confirmation page
- return render_to_response([
- "admin/%s/%s/csv_export_selected_confirmation.html" % (app_label, opts.object_name.lower()),
- "admin/%s/csv_export_selected_confirmation.html" % app_label,
- "admin/csv_export_selected_confirmation.html"
- ], context, context_instance=template.RequestContext(request))
-csv_export_selected.short_description = "Export selection as CSV"