Changeset 6d9a741
- Timestamp:
- 04/23/07 10:09:32 (6 years ago)
- Branches:
- master, crem, crem2, dev, dev2, diadems, forma, generic, instru_search, lam, nlivemulti, production, release/1.4.4, security, social, storage, test, video
- Children:
- e789173
- Parents:
- b503f0b
- git-author:
- olivier <> (04/23/07 10:09:32)
- git-committer:
- olivier <> (04/23/07 10:09:32)
- Location:
- telemeta
- Files:
-
- 3 added
- 7 edited
-
css/style.css (modified) (2 diffs)
-
models.py (modified) (1 diff)
-
templates/base.html (modified) (1 diff)
-
templates/collection_detail.html (added)
-
templates/collection_list.html (added)
-
templates/index.html (modified) (1 diff)
-
templates/mediaitem_detail.html (added)
-
templates/mediaitem_list.html (modified) (1 diff)
-
urls.py (modified) (1 diff)
-
views/web.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
telemeta/css/style.css
rf04d8d5 r6d9a741 1 1 body { 2 2 font-family: Verdana; 3 font-size: 11px; 3 4 } 4 5 … … 18 19 margin-bottom: 4px; 19 20 } 21 22 #menu { 23 text-align: right; 24 } 25 26 #menu a:link, #menu a:visited { 27 border-bottom:1px dotted #BBBBBB; 28 color:#BB0000; 29 text-decoration:none; 30 } 31 32 #menu a:link:hover, #menu a:visited:hover { 33 background-color:#EEEEEE; 34 color:#555555; 35 } 36 37 #menu a { 38 } -
telemeta/models.py
rf04d8d5 r6d9a741 1 1 import telemeta 2 2 from django.db import models 3 from django.core import validators3 from telemeta.core import * 4 4 5 class Collection(models.Model): 5 class MediaModel(Component): 6 pass 7 8 class MediaCore: 9 def list(self): 10 fields_list = [] 11 for field in self._meta.fields: 12 fields_list.append({'name': field.name, 'value': getattr(self, field.name)}) 13 return fields_list 14 15 def to_dict(self): 16 fields_dict = {} 17 for field in self._meta.fields: 18 fields_dict[field.name] = getattr(self, field.name) 19 return fields_dict 20 21 class MediaCollection(models.Model, MediaCore): 6 22 "Group related media items" 7 23 8 name = models.CharField(maxlength=250) 24 title = models.CharField(maxlength=250) 25 date = models.DateField() 26 contributor = models.CharField(maxlength=250, blank=True) 27 coverage = models.CharField(maxlength=250, blank=True) 28 creator = models.CharField(maxlength=250, blank=True) 29 description = models.CharField(maxlength=250, blank=True) 30 format = models.CharField(maxlength=250, blank=True) 31 identifier = models.CharField(maxlength=250, blank=True) 32 language = models.CharField(maxlength=250, blank=True) 33 publisher = models.CharField(maxlength=250, blank=True) 34 rights = models.CharField(maxlength=250, blank=True) 35 source = models.CharField(maxlength=250, blank=True) 36 subject = models.CharField(maxlength=250, blank=True) 9 37 10 38 def __str__(self): 11 return self.name 39 return self.title 40 41 class Meta: 42 ordering = ['title'] 43 db_table = 'telemeta_collection' 12 44 13 45 class Admin: 14 46 pass 15 47 16 class MediaItem(models.Model):17 "Describe an audio/video item with metadata"18 19 collection = models.ForeignKey(Collection)20 title = models.CharField(maxlength=250)21 author = models.CharField(maxlength=250)22 48 23 49 50 class MediaItem(models.Model, MediaCore): 51 "Describe a item with metadata" 24 52 25 def get_dynamic_properties(self): 26 "Retrieve dynamic properties associated with a given media item" 27 28 definitions = MediaItemPropertyDefinition.objects.all() 29 assigned = MediaItemProperty.objects.filter(media_item=self) 30 assigned_dict = {} 31 for p in assigned: 32 assigned_dict[p.definition.id] = p 33 34 properties = [] 35 for d in definitions: 36 enumeration = MediaItemPropertyEnumerationItem.objects.filter(definition=d) 37 38 if d.id in assigned_dict: 39 if d.type == "text": 40 value = assigned_dict[d.id].value 41 else: 42 value = assigned_dict[d.id].enum_item 43 44 properties.append({ 45 "id": d.id, "name": d.name, "value": value, 46 "type" : d.type, "enumeration" : enumeration}) 47 else: 48 properties.append({"id": d.id, "name": d.name, "value": "", 49 "type" : d.type, "enumeration" : enumeration}) 50 51 return properties 53 collection = models.ForeignKey(MediaCollection, related_name="items") 54 collection.dublin_core = 'relation' 55 identifier = models.CharField(maxlength=250) 56 title = models.CharField(maxlength=250) 57 creator = models.CharField(maxlength=250) 58 date = models.DateField() 59 file = models.FileField(upload_to='items/%Y/%m/%d') 60 subject = models.CharField(maxlength=250, blank=True) 61 description = models.TextField(maxlength=250, blank=True) 62 contributor = models.CharField(maxlength=250, blank=True) 63 coverage = models.CharField(maxlength=250, blank=True) 64 format = models.CharField(maxlength=25, blank=True) 65 language = models.CharField(maxlength=250, blank=True) 66 publisher = models.CharField(maxlength=250, blank=True) 67 rights = models.CharField(maxlength=250, blank=True) 68 source = models.CharField(maxlength=250, blank=True) 69 duration = models.FloatField(max_digits=11, decimal_places=3, null=True, blank=True) 52 70 53 71 def __str__(self): 54 return self.author + " - " + self.title 55 56 class Meta: 57 pass 72 return self.title 58 73 59 74 class Admin: 60 75 pass 61 76 62 class MediaItemPropertyDefinition(models.Model): 63 "Define a media item dynamic property" 77 class Meta: 78 ordering = ['title'] 79 db_table = 'telemeta_item' 64 80 65 TYPE_CHOICES = (66 ('text', 'Text'),67 ('enumeration', 'Enumeration'),68 )69 81 70 name = models.CharField(maxlength=64) 71 type = models.CharField(maxlength=64, choices = TYPE_CHOICES) 82 class MediaPart(models.Model, MediaCore): 83 "Describe the part of a media item" 84 85 contributor = models.CharField(maxlength=250) 86 coverage = models.CharField(maxlength=250) 87 creator = models.CharField(maxlength=250) 88 date = models.DateField() 89 description = models.CharField(maxlength=250) 90 format = models.CharField(maxlength=250) 91 identifier = models.CharField(maxlength=250) 92 language = models.CharField(maxlength=250) 93 publisher = models.CharField(maxlength=250) 94 rights = models.CharField(maxlength=250) 95 source = models.CharField(maxlength=250) 96 subject = models.CharField(maxlength=250) 97 title = models.CharField(maxlength=250) 98 media_item = models.ForeignKey(MediaItem) 99 media_item.dublin_core = 'relation' 100 parent = models.ForeignKey('self', null=True, related_name='children') 101 media_item.dublin_core = 'relation' 102 start = models.FloatField(max_digits=11, decimal_places=3) 103 end = models.FloatField(max_digits=11, decimal_places=3) 72 104 73 105 def __str__(self): 74 return self.name 106 return self.title 107 108 class Meta: 109 ordering = ['title'] 110 db_table = 'telemeta_part' 75 111 76 112 class Admin: 77 113 pass 78 114 79 class MediaItemPropertyEnumerationItem(models.Model):80 "Define a possible value for media item dynamic enumeration properties"81 115 82 definition = models.ForeignKey(MediaItemPropertyDefinition, core=True)83 name = models.CharField(maxlength=250)84 85 def __str__(self):86 return self.definition.name + " / " + self.name87 88 class Admin:89 pass90 91 class MediaItemProperty(models.Model):92 "Associate a value to a media item dynamic property"93 94 definition = models.ForeignKey(MediaItemPropertyDefinition, core=True)95 media_item = models.ForeignKey(MediaItem)96 value = models.CharField(maxlength=250)97 enum_item = models.ForeignKey(MediaItemPropertyEnumerationItem, null=True)98 99 def __str__(self):100 return str(self.media_item) + " / " + str(self.definition)101 102 class Meta:103 unique_together = (("media_item", "definition"),)104 105 class Admin:106 pass107 108 109 class Part:110 media_item = models.ForeignKey(MediaItem)111 parent = models.ForeignKey('self', null=True, related_name='children')112 name = models.CharField(maxlength=250) -
telemeta/templates/base.html
rf04d8d5 r6d9a741 1 1 <html> 2 <link rel="stylesheet" href="/ telemeta/css/style.css" />2 <link rel="stylesheet" href="/css/style.css" /> 3 3 <body> 4 4 <div id="header"> 5 5 Telemeta Web Interface 6 6 </div> 7 <div id="menu"> 8 <a href="/collections">Collections</a> | 9 <a href="/items">Items</a> 10 </div> 7 11 {% block content %}{% endblock %} 8 12 </body> -
telemeta/templates/index.html
rf04d8d5 r6d9a741 1 <pre>{% debug %}</pre> 1 {% extends "base.html" %} 2 2 3 <h3>Pieces</h3> 4 {% if pieces %} 3 {% block content %} 4 <h3>Media items</h3> 5 {% if object_list %} 5 6 <ul> 6 {% for p in pieces %} 7 <li><b>{{ p.author }}</b> - {{ p.title }}</li> 7 {% for p in object_list %} 8 <li><b>{{ p.author }}</b> - {{ p.title }} 9 <a href="{{ p.id }}">View</a> 10 <a href="#">Edit</a> 11 </li> 8 12 {% endfor %} 9 13 </ul> 10 14 {% else %} 11 <p>No pieces areavailable.</p>15 <p>No media item available.</p> 12 16 {% endif %} 17 {% endblock %} -
telemeta/templates/mediaitem_list.html
rf04d8d5 r6d9a741 6 6 <ul> 7 7 {% for p in object_list %} 8 <li><b>{{ p. author }}</b> - {{ p.title }}8 <li><b>{{ p.creator }}</b> - {{ p.title }} 9 9 <a href="{{ p.id }}">View</a> 10 10 <a href="#">Edit</a> -
telemeta/urls.py
rf04d8d5 r6d9a741 1 1 from django.conf.urls.defaults import * 2 from telemeta.models import MediaItem 2 from telemeta.models import MediaItem, MediaCollection 3 3 4 list_dict= {4 all_items = { 5 5 'queryset': MediaItem.objects.all(), 6 } 7 8 all_collections = { 9 'queryset': MediaCollection.objects.all(), 6 10 } 7 11 8 12 urlpatterns = patterns('', 9 13 (r'^$', 'telemeta.views.web.index'), 10 (r'^media_item/$', 'django.views.generic.list_detail.object_list', 11 dict(list_dict, paginate_by=10, template_name="mediaitem_list.html")), 12 (r'^media_item/(?P<media_item_id>[0-9]+)/$', 'telemeta.views.web.media_item_edit'), 14 (r'^items/$', 'django.views.generic.list_detail.object_list', 15 dict(all_items, paginate_by=10, template_name="mediaitem_list.html")), 16 (r'^items/(?P<item_id>[0-9]+)/$', 'telemeta.views.web.item_detail'), 17 (r'^items/(?P<item_id>[0-9]+)/download/(?P<format>[0-9A-Z]+)/$', 18 'telemeta.views.web.item_export'), 19 #(r'^media_item/(?P<media_item_id>[0-9]+)/$', 'telemeta.views.web.media_item_edit'), 13 20 (r'^media_item/(?P<media_item_id>[0-9]+)/update/$', 'telemeta.views.web.media_item_update'), 21 22 (r'^collections/$', 'django.views.generic.list_detail.object_list', 23 dict(all_collections, paginate_by=10, template_name="collection_list.html")), 24 (r'^collections/(?P<object_id>[0-9]+)/$', 25 'django.views.generic.list_detail.object_detail', 26 dict(all_collections, template_name="collection_detail.html")), 27 14 28 15 29 # CSS (FIXME: for developement only) -
telemeta/views/web.py
rf04d8d5 r6d9a741 3 3 from django.template import Context, loader 4 4 from django.http import HttpResponse 5 from django.http import Http404 5 6 from telemeta.models import MediaItem 6 from telemeta.models import MediaItemPropertyDefinition7 from telemeta.models import MediaItemPropertyEnumerationItem8 from telemeta.models import MediaItemProperty9 7 from django.shortcuts import render_to_response 10 8 import re 9 from telemeta.core import * 10 from telemeta.core import ComponentManager 11 from telemeta.export import * 12 from django.conf import settings 13 import os 11 14 12 15 def index(request): … … 19 22 }) 20 23 return HttpResponse(template.render(context)) 24 25 class WebView(Component): 26 27 exporters = ExtensionPoint(IExporter) 28 29 def item_detail(self, request, item_id): 30 item = MediaItem.objects.get(pk=item_id) 31 formats = [] 32 for exporter in self.exporters: 33 formats.append(exporter.get_format()) 34 return render_to_response('mediaitem_detail.html', 35 {'item': item, 'export_formats': formats}) 36 37 def file_stream(self, filepath): 38 buffer_size = 0xFFFF 39 f = open(filepath, 'rb') 40 chunk = f.read(buffer_size) 41 yield chunk 42 while chunk: 43 chunk = f.read(buffer_size) 44 yield chunk 45 f.close() 46 47 def item_export(self, request, item_id, format): 48 for exporter in self.exporters: 49 if exporter.get_format() == format: 50 break 51 52 if exporter.get_format() != format: 53 raise Http404 54 55 mime_type = exporter.get_mime_type() 56 57 exporter.set_cache_dir(settings.TELEMETA_EXPORT_CACHE_DIR) 58 59 item = MediaItem.objects.get(pk=item_id) 60 61 infile = settings.MEDIA_ROOT + "/" + item.file 62 metadata = item.to_dict() 63 metadata['collection'] = str(metadata['collection']) 64 metadata['Collection'] = metadata['collection'] 65 metadata['Artist'] = metadata['creator'] 66 metadata['Title'] = metadata['title'] 67 68 outfile = exporter.process(item.id, infile, metadata, []) 69 70 return HttpResponse(self.file_stream(outfile), mimetype = mime_type) 71 72 comp_mgr = ComponentManager() 73 view = WebView(comp_mgr) 74 item_detail = view.item_detail 75 item_export = view.item_export 21 76 22 77 def media_item_edit(request, media_item_id):
Note: See TracChangeset
for help on using the changeset viewer.
