From: yomguy Date: Wed, 16 Mar 2011 01:12:22 +0000 (+0100) Subject: add csv export methods for playlists (to finish) X-Git-Tag: 1.1~367 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=0298b43264a8382886ace16526c80e887a9df4f2;p=telemeta.git add csv export methods for playlists (to finish) --- diff --git a/telemeta/htdocs/images/ok.png b/telemeta/htdocs/images/ok.png new file mode 100644 index 00000000..543710fb Binary files /dev/null and b/telemeta/htdocs/images/ok.png differ diff --git a/telemeta/templates/telemeta_default/home.html b/telemeta/templates/telemeta_default/home.html index d4a78ca8..dec64595 100644 --- a/telemeta/templates/telemeta_default/home.html +++ b/telemeta/templates/telemeta_default/home.html @@ -49,7 +49,8 @@

{% trans "Playlists" %}

{% for playlist in playlists %} -

{{ playlist.name }} {% if playlist.is_current %}(current){% endif %}

+

{{ playlist.playlist.name }} {% if playlist.playlist.is_current %}(current){% endif %} + CSV

@@ -65,10 +66,10 @@
{% trans "Title" %}
{% if resource.type == "item" %} - {{ resource.element }} + {{ resource.element }} {% endif %} {% if resource.type == "collection" %} - {{ resource.element }} + {{ resource.element }} {% endif %} {% if resource.type == "marker" %} {{ resource.element }} diff --git a/telemeta/urls.py b/telemeta/urls.py index fe02de71..165aa3f2 100644 --- a/telemeta/urls.py +++ b/telemeta/urls.py @@ -199,4 +199,8 @@ urlpatterns = patterns('', url(r'^json/browse/', 'jsonrpc.views.browse', name="jsonrpc_browser"), # for the graphical browser/web console only, omissible url(r'^json/$', jsonrpc_site.dispatch, name='jsonrpc_mountpoint'), url(r'^json/(?P[a-zA-Z0-9.]+)$', jsonrpc_site.dispatch), # for HTTP GET only, also omissible + + # Playlists + url(r'^playlists/(?P[a-zA-Z0-9]+)/$', web_view.playlist_csv_export, name="telemeta-playlist-csv-export"), + ) diff --git a/telemeta/web/base.py b/telemeta/web/base.py index fb0a6bce..4b41e872 100644 --- a/telemeta/web/base.py +++ b/telemeta/web/base.py @@ -35,6 +35,7 @@ import re import os import sys +import csv import datetime import timeside @@ -820,8 +821,7 @@ class WebView(object): if resource.resource_type == 'marker': element = MediaItemMarker.objects.get(pk=resource.resource_id) resources.append({'element': element, 'type': resource.resource_type}) - playlists.append({'name': playlist.name, 'description': playlist.description, - 'is_current': playlist.is_current, 'resources': resources}) + playlists.append({'playlist': playlist, 'resources': resources}) return playlists @jsonrpc_method('telemeta.update_playlist') @@ -852,3 +852,34 @@ class WebView(object): m = PlaylistResource.objects.get(public_id=public_id) m.delete() + def playlist_csv_export(self, request, public_id): + playlist = Playlist.objects.get(public_id=public_id) + resources = PlaylistResource.objects.filter(playlist=playlist) + response = HttpResponse(mimetype='text/csv') + response['Content-Disposition'] = 'attachment; filename='+playlist.name+'.csv' + writer = csv.writer(response) + items = [] + for resource in resources: + if resource.resource_type == 'collection': + collection = MediaCollection.objects.get(pk=resource.resource_id) + collection_items = MediaItem.objects.filter(collection=collection) + for item in collection_items: + items.append(item) + elif resource.resource_type == 'item': + item = MediaItem.objects.get(pk=resource.resource_id) + items.append(item) + else: + pass + + item = item.to_dict() + tags = item.keys() + writer.writerow(tags) + + for item in items: + data = [] + item = item.to_dict() + for tag in tags: + data.append(item[tag]) + writer.writerow(data) + + return response