From 0298b43264a8382886ace16526c80e887a9df4f2 Mon Sep 17 00:00:00 2001 From: yomguy Date: Wed, 16 Mar 2011 02:12:22 +0100 Subject: [PATCH] add csv export methods for playlists (to finish) --- telemeta/htdocs/images/ok.png | Bin 0 -> 661 bytes telemeta/templates/telemeta_default/home.html | 7 ++-- telemeta/urls.py | 4 ++ telemeta/web/base.py | 35 +++++++++++++++++- 4 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 telemeta/htdocs/images/ok.png diff --git a/telemeta/htdocs/images/ok.png b/telemeta/htdocs/images/ok.png new file mode 100644 index 0000000000000000000000000000000000000000..543710fb7b9b2a3ea9a115031cec06748ba82d8e GIT binary patch literal 661 zcmV;G0&4wRCwBA z{Qv(y10?_;fS4F41ONfV!Z?9Zmf;V>V}`Fl-Zvor4#a;zGC<4*#H>hc7AT*ML79!6 zA(@$(K^Gu^SQ!2?Yy@hk1`2P-YZb_+{}`lzWD-z)+OIzhKNwjULIDDZiRmxXZ&nW0 z#SFh09C2#=#UKnM%LQZv_DRY}HUnMxh~X!L6Hx3TKmalQ|MY*Au$HhehaATuh93-; z42(#ce=~>!U6{cl&2m)QSGt2=mS6qV?N{4@n!|wVo`9491Q5&r5C2cU`|<7JR-I2b;_>;MQLMurpy zF`&Zj3~Ey;tfE&g<%2%7efOBFT+Q0fO0S}Fmf?4 z00a;VFkoIW++jGya2;rXI#42ZU|^UE46;)U{S533l|bA7q6ZN`05Jjm z!@%%`;WWb~pd`oz>_E&7#1DaZ77*_PYW&YohD|dF00a;V!)GA*m*E)01)#I_fZhSc z^AoVMe=yu;$O9TSn*mR90|+1%u(^L3ZU8l1Wq1KJ;1}4x?|~6j4D|DS1_EgnAb?oF z{`?2TKY@-t222aj8D0Z5#{pB_4wNXx0RRGs85mp)V1@sIPJYf{&hQBsFDwjuz+x;& vNg0`DhOildY=8h_q%=1I1Q5l!5g@<-!%>U$(^Vlh00000NkvXXu0mjfxtIY% literal 0 HcmV?d00001 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 -- 2.39.5