From f04d8d535e5c07b55b1dc9c769f370ac1510c3dc Mon Sep 17 00:00:00 2001 From: olivier <> Date: Tue, 10 Apr 2007 16:46:11 +0000 Subject: [PATCH] adding initial django application --- telemeta/__init__.py | 3 + telemeta/css/style.css | 19 +++++ telemeta/models.py | 112 +++++++++++++++++++++++++ telemeta/templates/base.html | 9 ++ telemeta/templates/index.html | 12 +++ telemeta/templates/media_item.html | 29 +++++++ telemeta/templates/mediaitem_list.html | 17 ++++ telemeta/urls.py | 19 +++++ telemeta/util/__init__.py | 0 telemeta/util/logger.py | 13 +++ telemeta/views/__init__.py | 0 telemeta/views/web.py | 68 +++++++++++++++ 12 files changed, 301 insertions(+) create mode 100644 telemeta/__init__.py create mode 100644 telemeta/css/style.css create mode 100644 telemeta/models.py create mode 100644 telemeta/templates/base.html create mode 100644 telemeta/templates/index.html create mode 100644 telemeta/templates/media_item.html create mode 100644 telemeta/templates/mediaitem_list.html create mode 100644 telemeta/urls.py create mode 100644 telemeta/util/__init__.py create mode 100644 telemeta/util/logger.py create mode 100644 telemeta/views/__init__.py create mode 100644 telemeta/views/web.py diff --git a/telemeta/__init__.py b/telemeta/__init__.py new file mode 100644 index 00000000..6fd5b8d0 --- /dev/null +++ b/telemeta/__init__.py @@ -0,0 +1,3 @@ +from telemeta.util.logger import Logger + +logger = Logger() diff --git a/telemeta/css/style.css b/telemeta/css/style.css new file mode 100644 index 00000000..54afe4f6 --- /dev/null +++ b/telemeta/css/style.css @@ -0,0 +1,19 @@ +body { + font-family: Verdana; +} + +#header { + font-size: 16px; + border-bottom: solid 1px black; + font-weight: bold; +} + +label { + width: 20ex; + display: block; + float: left; +} + +input { + margin-bottom: 4px; +} diff --git a/telemeta/models.py b/telemeta/models.py new file mode 100644 index 00000000..be0a80c6 --- /dev/null +++ b/telemeta/models.py @@ -0,0 +1,112 @@ +import telemeta +from django.db import models +from django.core import validators + +class Collection(models.Model): + "Group related media items" + + name = models.CharField(maxlength=250) + + def __str__(self): + return self.name + + class Admin: + pass + +class MediaItem(models.Model): + "Describe an audio/video item with metadata" + + collection = models.ForeignKey(Collection) + title = models.CharField(maxlength=250) + author = models.CharField(maxlength=250) + + + + def get_dynamic_properties(self): + "Retrieve dynamic properties associated with a given media item" + + definitions = MediaItemPropertyDefinition.objects.all() + assigned = MediaItemProperty.objects.filter(media_item=self) + assigned_dict = {} + for p in assigned: + assigned_dict[p.definition.id] = p + + properties = [] + for d in definitions: + enumeration = MediaItemPropertyEnumerationItem.objects.filter(definition=d) + + if d.id in assigned_dict: + if d.type == "text": + value = assigned_dict[d.id].value + else: + value = assigned_dict[d.id].enum_item + + properties.append({ + "id": d.id, "name": d.name, "value": value, + "type" : d.type, "enumeration" : enumeration}) + else: + properties.append({"id": d.id, "name": d.name, "value": "", + "type" : d.type, "enumeration" : enumeration}) + + return properties + + def __str__(self): + return self.author + " - " + self.title + + class Meta: + pass + + class Admin: + pass + +class MediaItemPropertyDefinition(models.Model): + "Define a media item dynamic property" + + TYPE_CHOICES = ( + ('text', 'Text'), + ('enumeration', 'Enumeration'), + ) + + name = models.CharField(maxlength=64) + type = models.CharField(maxlength=64, choices = TYPE_CHOICES) + + def __str__(self): + return self.name + + class Admin: + pass + +class MediaItemPropertyEnumerationItem(models.Model): + "Define a possible value for media item dynamic enumeration properties" + + definition = models.ForeignKey(MediaItemPropertyDefinition, core=True) + name = models.CharField(maxlength=250) + + def __str__(self): + return self.definition.name + " / " + self.name + + class Admin: + pass + +class MediaItemProperty(models.Model): + "Associate a value to a media item dynamic property" + + definition = models.ForeignKey(MediaItemPropertyDefinition, core=True) + media_item = models.ForeignKey(MediaItem) + value = models.CharField(maxlength=250) + enum_item = models.ForeignKey(MediaItemPropertyEnumerationItem, null=True) + + def __str__(self): + return str(self.media_item) + " / " + str(self.definition) + + class Meta: + unique_together = (("media_item", "definition"),) + + class Admin: + pass + + +class Part: + media_item = models.ForeignKey(MediaItem) + parent = models.ForeignKey('self', null=True, related_name='children') + name = models.CharField(maxlength=250) diff --git a/telemeta/templates/base.html b/telemeta/templates/base.html new file mode 100644 index 00000000..38bff8fa --- /dev/null +++ b/telemeta/templates/base.html @@ -0,0 +1,9 @@ + + +
+{% debug %}+ +
No pieces are available.
+{% endif %} diff --git a/telemeta/templates/media_item.html b/telemeta/templates/media_item.html new file mode 100644 index 00000000..7378735e --- /dev/null +++ b/telemeta/templates/media_item.html @@ -0,0 +1,29 @@ +{% extends "base.html" %} + +{% block content %} +No pieces are available.
+{% endif %} +{% endblock %} diff --git a/telemeta/urls.py b/telemeta/urls.py new file mode 100644 index 00000000..14a33dbe --- /dev/null +++ b/telemeta/urls.py @@ -0,0 +1,19 @@ +from django.conf.urls.defaults import * +from telemeta.models import MediaItem + +list_dict = { + 'queryset': MediaItem.objects.all(), +} + +urlpatterns = patterns('', + (r'^$', 'telemeta.views.web.index'), + (r'^media_item/$', 'django.views.generic.list_detail.object_list', + dict(list_dict, paginate_by=10, template_name="mediaitem_list.html")), + (r'^media_item/(?P