summaryrefslogtreecommitdiff
path: root/commcrawler/admin.py
diff options
context:
space:
mode:
Diffstat (limited to 'commcrawler/admin.py')
-rw-r--r--commcrawler/admin.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/commcrawler/admin.py b/commcrawler/admin.py
index e475325..6a72e41 100644
--- a/commcrawler/admin.py
+++ b/commcrawler/admin.py
@@ -1,3 +1,4 @@
+import csv
import json
from pygments import highlight
@@ -6,6 +7,7 @@ from pygments.formatters.html import HtmlFormatter
from ajax_select import make_ajax_form
from django.contrib import admin
+from django.http import HttpResponse
from django.utils.translation import ugettext_lazy as _
from django.utils.safestring import mark_safe
@@ -13,6 +15,41 @@ from commonnet.admin_site import admin_site
from commcrawler import models
+def export_as_csv_action(field_names,
+ description=_("Export selected as CSV file"),
+ header=True):
+ def export_as_csv(modeladmin, request, queryset):
+ """
+ Generic csv export admin action.
+ based on http://djangosnippets.org/snippets/1697/
+ """
+ opts = modeladmin.model._meta
+
+ response = HttpResponse(content_type='text/csv')
+ response['Content-Disposition'] = 'attachment; filename=%s.csv' % \
+ str(opts).replace('.', '_')
+
+ writer = csv.writer(response)
+ if header:
+ writer.writerow(list(field_names))
+ for obj in queryset.values(*field_names).order_by('pk'):
+ row = []
+ for field in field_names:
+ value = obj[field]
+ if value is None:
+ value = ""
+ else:
+ value = str(value)
+ row.append(value)
+
+ writer.writerow(row)
+ return response
+ export_as_csv.short_description = description
+ return export_as_csv
+
+
+
+
class CrawlAdmin(admin.ModelAdmin):
model = models.Crawl
list_display = ("name", "status", "target_nb", "created", "started",
@@ -48,6 +85,16 @@ class CrawlResultAdmin(admin.ModelAdmin):
)
exclude = ("crawl_result",)
form = make_ajax_form(model, {'target': 'target'})
+ actions = [
+ export_as_csv_action(
+ ("target_id", "target__name", "target__url", "nb_external_link",
+ "nb_internal_link", "nb_images", "nb_facebook", "nb_twitter",
+ "nb_instagram", "nb_youtube", "nb_dailymotion", "nb_vimeo",
+ "nb_video", "nb_audio", "nb_internal_pdf", "nb_external_pdf",
+ "nb_internal_office", "nb_external_office", "is_online",
+ "redirection")
+ )
+ ]
def open_link(self, obj):
url = obj.url()
@@ -74,6 +121,11 @@ class CrawlRelationAdmin(admin.ModelAdmin):
list_filter = ("crawl",)
search_fields = ["source__name", "destination__name"]
form = make_ajax_form(model, {'source': 'target', 'destination': 'target'})
+ actions = [
+ export_as_csv_action(
+ ("source_id", "destination_id", "number")
+ )
+ ]
admin_site.register(models.CrawlRelation, CrawlRelationAdmin)