]> git.parisson.com Git - telemeta.git/commitdiff
add generic public_id property to media item and collection for use in urls, etc..
authorolivier <>
Tue, 26 Jan 2010 11:23:39 +0000 (11:23 +0000)
committerolivier <>
Tue, 26 Jan 2010 11:23:39 +0000 (11:23 +0000)
13 files changed:
telemeta/models/crem.py
telemeta/models/cremquery.py
telemeta/templates/telemeta_default/collection.m3u
telemeta/templates/telemeta_default/collection_detail.html
telemeta/templates/telemeta_default/collection_detail_dc.html
telemeta/templates/telemeta_default/collection_xspf.xml
telemeta/templates/telemeta_default/inc/collection_list.html
telemeta/templates/telemeta_default/inc/dublincore.html
telemeta/templates/telemeta_default/inc/mediaitem_list.html
telemeta/templates/telemeta_default/mediaitem_detail.html
telemeta/templates/telemeta_default/mediaitem_xspf.xml
telemeta/urls.py
telemeta/web/base.py

index 156bea5ce019247f6eafc3261368291059a36715..3236977d11a1449a64c26e06d9f822b216a9c22d 100755 (executable)
@@ -179,6 +179,10 @@ class MediaCollection(MediaResource):
     def __unicode__(self):
         return self.code
 
+    @property
+    def public_id(self):
+        return self.code
+
     def has_mediafile(self):
         "Tell wether this collection has any media files attached to its items"
         items = self.items.all()
@@ -280,9 +284,15 @@ class MediaItem(MediaResource):
 
     objects               = query.MediaItemManager()
 
-    def _keywords(self):
+    @property
+    def keywords(self):
         return ContextKeyword.objects.filter(mediaitemkeyword__item = self)
-    keywords = property(_keywords)
+
+    @property
+    def public_id(self):
+        if self.code:
+            return self.code
+        return self.id
 
     class Meta(MetaCore):
         db_table = 'media_items'
index 1c72195ffbbb1733f8d7845de69d165b9b477125..4526bcdb9e9bc5ccf217bd9a59221d9454ceaf3e 100644 (file)
@@ -76,16 +76,16 @@ class CoreManager(EnhancedManager):
         return self.get_query_set().none(*args, **kwargs)
 
     def get(self, **kwargs):
-        if kwargs.has_key('code_or_id'):
+        if kwargs.has_key('public_id'):
             try:
                 args = kwargs.copy()
-                args['code'] = kwargs['code_or_id']
-                args.pop('code_or_id')
+                args['code'] = kwargs['public_id']
+                args.pop('public_id')
                 return super(CoreManager, self).get(**args)
             except ObjectDoesNotExist:
                 args = kwargs.copy()
-                args['id'] = kwargs['code_or_id']
-                args.pop('code_or_id')
+                args['id'] = kwargs['public_id']
+                args.pop('public_id')
                 return super(CoreManager, self).get(**args)
 
         return super(CoreManager, self).get(**kwargs)
index 259dc4babccd51987af53bfa08dd590d8dfd4ae8..6412a8f4adf79c8d945545f1d27e609c62c4521e 100644 (file)
@@ -1,3 +1,3 @@
 #EXTM3U{% load telemeta_utils %}{% for item in collection.items.all %}
 #EXTINF:{{ item.get_duration }},{{ item.title }}
-http://{{ host }}{% url telemeta-item-export item|code_or_id,"mp3" %}{% endfor %}
+http://{{ host }}{% url telemeta-item-export item.public_id,"mp3" %}{% endfor %}
index 62399beffce1c0cd0254276a16228a4189f1290d..04171651c0da444549e74dc3c5006152ced80c4e 100644 (file)
@@ -11,7 +11,7 @@
 \r
 {% block submenu %}\r
     <h3>Collection: {{ collection.title }}</h3>\r
-    <div><a href="{% url telemeta-collection-dublincore collection.code %}">Dublin Core</a></div>\r
+    <div><a href="{% url telemeta-collection-dublincore collection.public_id %}">Dublin Core</a></div>\r
 {% endblock %}\r
 \r
 {% block content %}\r
         <div id="rightcol">\r
             <div id="collection_player">\r
               <p><b>Listen to this collection</b>\r
-              (<a href="{% url telemeta-collection-m3u collection.code %}">M3U</a>,\r
-              <a href="{% url telemeta-collection-xspf collection.code %}">XSPF</a>)</p>\r
+              (<a href="{% url telemeta-collection-m3u collection.public_id %}">M3U</a>,\r
+              <a href="{% url telemeta-collection-xspf collection.public_id %}">XSPF</a>)</p>\r
               {% if 0 %} {# Use 1/0 for alternate player #}\r
                 <!-- This is the XSPF Web Music Player, under the BSD license, \r
                   from: http://musicplayer.sourceforge.net/-->\r
                 <object type="application/x-shockwave-flash" width="362" height="200"\r
-                  data="{% url telemeta-swf "xspf_player.swf" %}?playlist_url={% url telemeta-collection-xspf collection.code %}">\r
+                  data="{% url telemeta-swf "xspf_player.swf" %}?playlist_url={% url telemeta-collection-xspf collection.public_id %}">\r
                   <param name="movie" \r
-                    value="{% url telemeta-swf "xspf_player.swf" %}?playlist_url={% url telemeta-collection-xspf collection.code %}" />\r
+                    value="{% url telemeta-swf "xspf_player.swf" %}?playlist_url={% url telemeta-collection-xspf collection.public_id %}" />\r
                 </object>\r
               {% else %}\r
                 <!-- This is Jeroen Wijering's Flash MP3 Player, \r
@@ -39,7 +39,7 @@
                 </p>\r
                 <script type="text/javascript">\r
                   var so = new SWFObject('{% url telemeta-swf "mp3player.swf" %}','playlist','362','200','7');\r
-                  so.addVariable("file","{% url telemeta-collection-xspf collection.code %}");\r
+                  so.addVariable("file","{% url telemeta-collection-xspf collection.public_id %}");\r
                   so.addVariable("displayheight","0");\r
                   so.write('collection_player_c');\r
                 </script> \r
index bc86c070a434ca6c4a82133792b70745282b8ca0..17cafa5c0a9e5646766b8fd4b7de8c2fd4735382 100644 (file)
@@ -4,7 +4,7 @@
 {% if collection %}
 {% block submenu %}
     <h3>Collection: {{ collection.title }}</h3>
-    <div><a href="{% url telemeta-collection-detail collection.code %}">Normal View</a></div>
+    <div><a href="{% url telemeta-collection-detail collection.public_id %}">Normal View</a></div>
 {% endblock %}
 
 {% block content %}
index f7b72e6f8afd3a3bd07fc62c43187e763a4d6527..7efe305e75ef79b315652eba02e91b4ad3fdfdb0 100644 (file)
@@ -5,7 +5,7 @@
 {% with collection.to_dublincore.flatten as dc %}
   <creator>{{ dc.creator }}</creator>
   <title>{{ dc.title }}</title>
-  <info>http://{{ host }}{% url telemeta-collection-detail collection.code %}</info>
+  <info>http://{{ host }}{% url telemeta-collection-detail collection.public_id %}</info>
 {% endwith %}
 {% endblock %}
 
@@ -14,9 +14,9 @@
     <track>
       <title>{{ item.title }}</title>
       <meta rel="type">mp3</meta>
-      <location>http://{{ host }}{% url telemeta-item-export item|code_or_id,"mp3" %}</location>
+      <location>http://{{ host }}{% url telemeta-item-export item.public_id,"mp3" %}</location>
       <duration>{{ item.get_duration|mul:1000 }}</duration>
-      <info>http://{{ host }}{% url telemeta-item-detail item|code_or_id %}</info>
+      <info>http://{{ host }}{% url telemeta-item-detail item.public_id %}</info>
     </track>
 {% endfor %}
 {% endblock %}
index 26254382c99130217ee00fb8f9425432723c8653..c666ddb23dd7233448426a41e1fd99655519221a 100644 (file)
@@ -9,7 +9,7 @@
     {% endif %}
     <ul>
     {% for p in collections %}
-        <li><a href="{% url telemeta-collection-detail p.code %}">{{ p.title }}</a>
+        <li><a href="{% url telemeta-collection-detail p.public_id %}">{{ p.title }}</a>
             </li>
     {% endfor %}
     {% if more_collections %} <li>[...]</li> {% endif %}
index 0e00134c9cdc33d50b669173ba9a947e3cfadd5d..4325964ca4c3590a7a3762a9ef2a8d80284b3148 100644 (file)
@@ -8,9 +8,9 @@
         <dd>
         {% if element.related|is_item or element.related|is_collection %}
             {% if element.related|is_item %}
-            <a href="{% url telemeta-item-dublincore element.related|code_or_id %}">{{ element.value }}</a>
+            <a href="{% url telemeta-item-dublincore element.related.public_id %}">{{ element.value }}</a>
             {% else %}
-            <a href="{% url telemeta-collection-dublincore element.related.code %}">{{ element.value }}</a>
+            <a href="{% url telemeta-collection-dublincore element.related.public_id %}">{{ element.value }}</a>
             {% endif %}
         {% else %}
             {{ element.value }}
index 7e66c4b916464072d1c6510084536f3585625ff2..ed9ba755a1f45410cec7d3bf40afa35552707e52 100644 (file)
@@ -9,7 +9,7 @@
     {% endif %}
     <ul>
     {% for p in items %}
-        <li><a href="{% url telemeta-item-detail p|code_or_id %}">{{ p.title }}</a></li>
+        <li><a href="{% url telemeta-item-detail p.public_id %}">{{ p.title }}</a></li>
     {% endfor %}
     {% if more_items %} <li>[...]</li> {% endif %}
     </ul>
index 37069f132a565f19f8fae97bba1b68af7ee2f633..1344907ecf259c168267c1f643bfcfeffc96f2a3 100644 (file)
@@ -20,7 +20,7 @@
 soundManager.url = '{% url telemeta-swf "./" %}';\r
 soundManager.flashVersion = 9;\r
 soundManager.debugMode = false;\r
-set_player_image_url('{% url telemeta-item-visualize item|code_or_id,visualizer_id,"WIDTH","HEIGHT" %}');\r
+set_player_image_url('{% url telemeta-item-visualize item.public_id,visualizer_id,"WIDTH","HEIGHT" %}');\r
 load_player({{ item.get_duration }});\r
 </script>\r
 \r
@@ -30,7 +30,7 @@ load_player({{ item.get_duration }});
 {% if item %}\r
 {% block submenu %}\r
     <h3>Item : {{ item.title }}</h3>\r
-    <div><a href="{% url telemeta-item-dublincore item|code_or_id %}">Dublin Core</a></div>\r
+    <div><a href="{% url telemeta-item-dublincore item.public_id %}">Dublin Core</a></div>\r
 {% endblock %}\r
 \r
 {% block content %}\r
@@ -50,8 +50,8 @@ load_player({{ item.get_duration }});
             <div class="ts-viewer">\r
                 <div class="ts-wave">\r
                     <div class="ts-image-container">\r
-                        <a href="{% url telemeta-item-export item|code_or_id,"mp3" %}">\r
-                        <img class="ts-image" src="{% url telemeta-item-visualize item|code_or_id,visualizer_id,360,130 %}" \r
+                        <a href="{% url telemeta-item-export item.public_id,"mp3" %}">\r
+                        <img class="ts-image" src="{% url telemeta-item-visualize item.public_id,visualizer_id,360,130 %}" \r
                           alt="" /></a>\r
                     </div>\r
                 </div>  \r
@@ -71,7 +71,7 @@ load_player({{ item.get_duration }});
                 -->\r
                 <select id="visualizer_id" name="visualizer_id">\r
                     {% for v in visualizers %}\r
-                    <option value="{% url telemeta-item-visualize item|code_or_id,v.id,"WIDTH","HEIGHT" %}">\r
+                    <option value="{% url telemeta-item-visualize item.public_id,v.id,"WIDTH","HEIGHT" %}">\r
                     {{v.name}}</option>\r
                     {% endfor %}\r
                 </select>\r
@@ -117,7 +117,7 @@ load_player({{ item.get_duration }});
         <div class="exporter">\r
             <p>Download:\r
             {% for format in export_formats %}\r
-            <a href="{% url telemeta-item-export item|code_or_id,format.extension %}">{{ format.name }}</a>\r
+            <a href="{% url telemeta-item-export item.public_id,format.extension %}">{{ format.name }}</a>\r
             {% endfor %}</p>\r
         </div>\r
 \r
@@ -132,7 +132,7 @@ load_player({{ item.get_duration }});
             {% if item.dates_enregistr %}<dt>Date d'enregistrement</dt><dd>{{ item.dates_enregistr }}</dd>{% endif %}\r
             {% if item.title %}<dt>Titre</dt><dd>{{ item.title }}</dd>{% endif %}\r
             {% if item.transcrip_trad %}<dt>Traduction du titre</dt><dd>{{ item.transcrip_trad }}</dd>{% endif %}\r
-            <dt>Collection</dt><dd><a href="{% url telemeta-collection-detail item.collection.code %}">{{ item.collection.title }}</a></dd>\r
+            <dt>Collection</dt><dd><a href="{% url telemeta-collection-detail item.collection.public_id %}">{{ item.collection.title }}</a></dd>\r
             {% if item.duree %}<dt>DurĂ©e</dt><dd>{{ item.duree }}</dd>{% endif %}\r
             {% if item.collection.ispublished and item.Ref %}\r
             <dt>Ref</dt><dd>{{ item.Ref }}</dd>\r
index 78ed4cc525ad38d271b257d2bd9e0788ab1ea54b..aa7a5d19acd079fcf856e0fb8b3be51d4602effe 100644 (file)
@@ -5,9 +5,9 @@
     <track>
       <title>{{ item.title }}</title>
       <meta rel="type">mp3</meta>
-      <location>http://{{ host }}{% url telemeta-item-export item|code_or_id,"mp3" %}</location>
+      <location>http://{{ host }}{% url telemeta-item-export item.public_id,"mp3" %}</location>
       <duration>{{ item.get_duration|mul:1000 }}</duration>
-      <info>http://{{ host }}{% url telemeta-item-detail item|code_or_id %}</info>
+      <info>http://{{ host }}{% url telemeta-item-detail item.public_id %}</info>
     </track>
 {% endblock %}
 
index 9fded5a40c9a620c57f352aa52015ab724ff85ac..224938006a5a0c9532e5bf2170ee59e76ff6de38 100644 (file)
@@ -63,22 +63,22 @@ urlpatterns = patterns('',
     url(r'^items/$', 'django.views.generic.list_detail.object_list', 
         dict(all_items, paginate_by=20, template_name="telemeta/mediaitem_list.html"),
         name="telemeta-items"),
-    url(r'^items/(?P<item_key>[A-Z0-9_]+)/$', web_view.item_detail, 
+    url(r'^items/(?P<public_id>[A-Z0-9_]+)/$', web_view.item_detail, 
         name="telemeta-item-detail"),
-    url(r'^items/(?P<item_key>[A-Z0-9_]+)/dc/$', web_view.item_detail, 
+    url(r'^items/(?P<public_id>[A-Z0-9_]+)/dc/$', web_view.item_detail, 
         {'template': 'telemeta/mediaitem_detail_dc.html'},
         name="telemeta-item-dublincore"),
-    url(r'^items/(?P<item_key>[A-Z0-9_]+)/dc/xml/$', web_view.item_detail, 
+    url(r'^items/(?P<public_id>[A-Z0-9_]+)/dc/xml/$', web_view.item_detail, 
         {'format': 'dublin_core_xml'},
         name="telemeta-item-dublincore-xml"),
-    url(r'^items/download/(?P<item_key>[A-Z0-9_]+)\.(?P<extension>' 
+    url(r'^items/download/(?P<public_id>[A-Z0-9_]+)\.(?P<extension>' 
             + export_extensions + ')$', 
         web_view.item_export,
         name="telemeta-item-export"),
-    url(r'^items/(?P<item_key>[A-Z0-9_]+)/visualize/(?P<visualizer_id>[0-9a-z_]+)/(?P<width>[0-9A-Z]+)x(?P<height>[0-9A-Z]+)/$', 
+    url(r'^items/(?P<public_id>[A-Z0-9_]+)/visualize/(?P<visualizer_id>[0-9a-z_]+)/(?P<width>[0-9A-Z]+)x(?P<height>[0-9A-Z]+)/$', 
         web_view.item_visualize,
         name="telemeta-item-visualize"),
-    url(r'^items/(?P<item_key>[A-Z0-9_]+)/item_xspf.xml$', 
+    url(r'^items/(?P<public_id>[A-Z0-9_]+)/item_xspf.xml$', 
         web_view.item_playlist, 
         dict(template="telemeta/mediaitem_xspf.xml", mimetype="application/xspf+xml"),
         name="telemeta-item-xspf"),
@@ -91,15 +91,15 @@ urlpatterns = patterns('',
     url(r'^collections/?page=(?P<page>[0-9]+)$', 
         'django.views.generic.list_detail.object_list',
         dict(all_collections, paginate_by=20)),
-    url(r'^collections/(?P<code>[A-Z0-9_]+)/$', web_view.collection_detail,
+    url(r'^collections/(?P<public_id>[A-Z0-9_]+)/$', web_view.collection_detail,
         dict(template="telemeta/collection_detail.html"), name="telemeta-collection-detail"),
-    url(r'^collections/(?P<code>[A-Z0-9_]+)/dc/$', web_view.collection_detail,
+    url(r'^collections/(?P<public_id>[A-Z0-9_]+)/dc/$', web_view.collection_detail,
         dict(template="telemeta/collection_detail_dc.html"), name="telemeta-collection-dublincore"),
-    url(r'^collections/(?P<code>[A-Z0-9_]+)/collection_xspf.xml$', 
+    url(r'^collections/(?P<public_id>[A-Z0-9_]+)/collection_xspf.xml$', 
         web_view.collection_playlist, 
         dict(template="telemeta/collection_xspf.xml", mimetype="application/xspf+xml"),
         name="telemeta-collection-xspf"),
-    url(r'^collections/(?P<code>[A-Z0-9_]+)/collection.m3u$',
+    url(r'^collections/(?P<public_id>[A-Z0-9_]+)/collection.m3u$',
         web_view.collection_playlist, 
         dict(template="telemeta/collection.m3u", mimetype="audio/mpegurl"),
         name="telemeta-collection-m3u"),
index ef7e4fa3071d2ff32ef09fa0ff7f35673b989d28..57d34314045ad8156c53959c4346537634088a79 100644 (file)
@@ -70,14 +70,14 @@ class WebView(Component):
         context = Context({})
         return HttpResponse(template.render(context))
 
-    def collection_detail(self, request, code, template=''):
-        collection = MediaCollection.objects.get(code=code)
+    def collection_detail(self, request, public_id, template=''):
+        collection = MediaCollection.objects.get(public_id=public_id)
         return render_to_response(template, {'collection': collection})
 
 
-    def item_detail(self, request, item_key, template='telemeta/mediaitem_detail.html'):
+    def item_detail(self, request, public_id, template='telemeta/mediaitem_detail.html'):
         """Show the details of a given item"""
-        item = MediaItem.objects.get(code_or_id=item_key)
+        item = MediaItem.objects.get(public_id=public_id)
         
         formats = []
         for exporter in self.exporters:
@@ -115,7 +115,7 @@ class WebView(Component):
                     'visualizers': visualizers, 'visualizer_id': visualizer_id,
                     'analysers': analyzers, 'vamp_plugins': vamp_plugin_list})
                     
-    def item_visualize(self, request, item_key, visualizer_id, width, height):
+    def item_visualize(self, request, public_id, visualizer_id, width, height):
         for visualizer in self.visualizers:
             if visualizer.get_id() == visualizer_id:
                 break
@@ -123,7 +123,7 @@ class WebView(Component):
         if visualizer.get_id() != visualizer_id:
             raise Http404
         
-        item = MediaItem.objects.get(code_or_id=item_key)
+        item = MediaItem.objects.get(public_id=public_id)
 
         visualizer.set_colors((255,255,255), 'purple')
         stream = visualizer.render(item, width=int(width), height=int(height))
@@ -137,7 +137,7 @@ class WebView(Component):
             list.append(exporter.get_file_extension())
         return list
 
-    def item_export(self, request, item_key, extension):                    
+    def item_export(self, request, public_id, extension):                    
         """Export a given media item in the specified format (OGG, FLAC, ...)"""
         for exporter in self.exporters:
             if exporter.get_file_extension() == extension:
@@ -150,7 +150,7 @@ class WebView(Component):
 
         exporter.set_cache_dir(settings.TELEMETA_EXPORT_CACHE_DIR)
 
-        item = MediaItem.objects.get(code_or_id=item_key)
+        item = MediaItem.objects.get(public_id=public_id)
 
         infile = item.file.path
         metadata = item.to_dublincore().flatten()
@@ -316,9 +316,9 @@ class WebView(Component):
 
         return self.edit_enumeration(request, enumeration_id)
   
-    def collection_playlist(self, request, code, template, mimetype):
+    def collection_playlist(self, request, public_id, template, mimetype):
         try:
-            collection = MediaCollection.objects.get(code=code)
+            collection = MediaCollection.objects.get(public_id=public_id)
         except ObjectDoesNotExist:
             raise Http404
 
@@ -326,9 +326,9 @@ class WebView(Component):
         context = Context({'collection': collection, 'host': request.META['HTTP_HOST']})
         return HttpResponse(template.render(context), mimetype=mimetype)
 
-    def item_playlist(self, request, item_key, template, mimetype):
+    def item_playlist(self, request, public_id, template, mimetype):
         try:
-            item = MediaItem.objects.get(code_or_id=item_key)
+            item = MediaItem.objects.get(public_id=public_id)
         except ObjectDoesNotExist:
             raise Http404