]> git.parisson.com Git - telemeta.git/commitdiff
add vocabulary tab
authornicolas neto <nicolasxv3@gmail.com>
Wed, 5 Jul 2017 09:19:15 +0000 (11:19 +0200)
committernicolas neto <nicolasxv3@gmail.com>
Wed, 5 Jul 2017 09:19:15 +0000 (11:19 +0200)
telemeta/templates/telemeta/base.html
telemeta/templates/telemeta/enumeration.html [new file with mode: 0644]
telemeta/templates/telemeta/enumerations.html [new file with mode: 0644]
telemeta/templates/telemeta/instrument_alias.html [new file with mode: 0644]
telemeta/templates/telemeta/instruments.html [new file with mode: 0644]
telemeta/urls.py
telemeta/views/enum.py [new file with mode: 0644]
telemeta/views/instrument.py
telemeta/views/item.py

index ffa104718115b466bf0a3c97d551fbe9844893f0..6a6d81025b951f6cd64e81e7466f2f79ab96a588 100644 (file)
 
                             <li><a href="{% url "haystack_advance_search" %}"
                                    class="orange">{% trans "Advanced search" %}</a></li>
-                            {% if user.is_authenticated %}
-                                {% if user.is_staff or not perms.telemeta.can_not_view_users_and_profiles %}
-                                    <li><a href="{% url "telemeta-users" %}" class="red">{% trans "Users" %}</a></li>
-                                {% endif %}
-                            {% endif %}
+                              <li><a href="#vocabulary#" class="darkblue">{% trans "Vocabulary" %}</a>
                             {% if user.is_staff %}
-                                <li><a href="#admin#" class="violet">{% trans "Admin" %}</a>
+
                                     <ul>
-                                        <li><a href="{% url "telemeta-home" %}admin/django/"
-                                               target="_blank">{% trans "General" context "admin" %}</a></li>
                                         <li>
                                             <a href="{% url "telemeta-admin-enumerations" %}">{% trans "Enumerations" %}</a>
                                         </li>
                                         </li>
                                     </ul>
                                 </li>
+
+                            {% else %}
+
+                                    <ul>
+                                        <li>
+                                            <a href="{% url "telemeta-enumerations" %}">{% trans "Enumerations" %}</a>
+                                        </li>
+                                        <li><a href="{% url "telemeta-instruments" %}">{% trans "Instruments" %}</a>
+                                        </li>
+                                        <li>
+                                            <a href="{% url "telemeta-instrument-alias" %}">{% trans "Instrument aliases" %}</a>
+                                        </li>
+                                    </ul>
+                                </li>
+                            {% endif %}
+
+                            {% if user.is_authenticated %}
+                                {% if user.is_staff or not perms.telemeta.can_not_view_users_and_profiles %}
+                                    <li><a href="{% url "telemeta-users" %}" class="red">{% trans "Users" %}</a></li>
+                                {% endif %}
+                            {% endif %}
+                            {% if user.is_staff %}
+                                <li><a href="{% url "telemeta-home" %}admin/django/" class="violet">{% trans "Admin" %}</a>
+                                </li>
                             {% endif %}
                         </ul>
                         <form id="formlang" action="/i18n/setlang/" method="post" style="display:inline-block; {% if LANGUAGE_BIDI %}float: left;{% endif %}" onchange='this.submit();'>
diff --git a/telemeta/templates/telemeta/enumeration.html b/telemeta/templates/telemeta/enumeration.html
new file mode 100644 (file)
index 0000000..92d69fa
--- /dev/null
@@ -0,0 +1,48 @@
+{% extends "telemeta/admin.html" %}
+{% load i18n %}
+
+{% block head_title %}{% trans "Enumeration" %} : {{ enumeration_name|capfirst }} - {{ block.super }}{% endblock %}
+
+{% block title %}
+    <h1><img src="{{ STATIC_URL }}telemeta/images/collections_red.png" style="vertical-align:middle" />  <a href="{% url "telemeta-enumerations" %}">{% trans "Enumerations" %}</a></h1>
+{% endblock %}
+
+{% block tabcontents %}
+    {% if enumeration_values %}
+        <table class="listing">
+            <thead>
+            <tr><th class="sel">&nbsp;</th><th>{% trans "Value"%}</th>
+                <th>nb{{ enumeration_support }}</th>
+            </tr>
+            </thead><tbody>
+        {% for record in enumeration_values %}
+            <tr>
+
+                <td></td>
+
+                <td>
+                    {{record.value}}</td>
+                {% if enumeration_id == "contextkeyword" %}
+                    <td><a href="{% url "telemeta-keyword-list-item" enumeration_id record.id %}"> {{ enumeration_count.pop }}</a></td>
+                {% else %}
+
+                    {% if enumeration_support == "Collection" %}
+                        <td><a href="{% url "telemeta-enumeration-list-collection" enumeration_id record.id %}"> {{ enumeration_count.pop }}</a></td>
+                    {% else %}
+                        <td><a href="{% url "telemeta-enumeration-list-item" enumeration_id record.id %}"> {{ enumeration_count.pop }}</a></td>
+                    {% endif %}
+
+                {% endif %}
+
+            </tr>
+
+        {% endfor %}
+        </tbody>
+        </table>
+        </form>
+    {% else %}
+        <p class="help">{% trans "This enumeration is empty" %}</p>
+    {% endif %}
+
+    <br style="clear: right"/>
+{% endblock %}
diff --git a/telemeta/templates/telemeta/enumerations.html b/telemeta/templates/telemeta/enumerations.html
new file mode 100644 (file)
index 0000000..dd849d1
--- /dev/null
@@ -0,0 +1,27 @@
+{% extends "telemeta/admin.html" %}
+{% load telemeta_tags %}
+{% load i18n %}
+
+{% block title %}
+<h1><img src="{{ STATIC_URL }}telemeta/images/collections_red.png" style="vertical-align:middle" /> {% trans "Enumerations" %}</h1>
+{% endblock %}
+
+{% block tabcontents %}
+{% if enumerations %}
+  <table class="listing">
+   <thead>
+    <tr><th>{% trans "Title"%}</th></tr>
+   </thead><tbody>
+    {% for enum in enumerations %}
+    <tr><td>
+      <a href="{% url "telemeta-enumeration" enum.id %}">{% trans enum.name|capfirst %}</a>
+    </td></tr>
+    {% endfor %}
+   </tbody>
+  </table>
+  {% else %}
+    <p class="help">{% trans "No enumerations" %}</p>
+ {% endif %}
+{% endblock %}
+
+
diff --git a/telemeta/templates/telemeta/instrument_alias.html b/telemeta/templates/telemeta/instrument_alias.html
new file mode 100644 (file)
index 0000000..f7a5ba7
--- /dev/null
@@ -0,0 +1,34 @@
+{% extends "telemeta/admin.html" %}
+{% load i18n %}
+
+{% block head_title %}{% trans "Instrument aliases" %} - {{ block.super }}{% endblock %}
+
+{% block title %}
+<h1><img src="{{ STATIC_URL }}telemeta/images/collections_red.png" style="vertical-align:middle" />  {% trans "Instrument aliases" %}</h1>
+{% endblock %}
+
+{% block tabcontents %}
+
+ {% if instruments %}
+
+  <table class="listing">
+   <thead>
+    <tr><th class="sel">&nbsp;</th><th>{% trans "Name"%}</th><th>{% trans "Associated items" %}</th></tr>
+   </thead><tbody>
+    {% for record in instruments %}
+    <tr>
+     <td></td>
+     <td>
+        {{record.name}}</td>
+     <td><a href="{% url "telemeta-alias-item-list" record.id %}">{{ record.num_items }}</a></td>
+    </tr>
+    {% endfor %}
+    </tbody>
+  </table>
+
+ {% else %}
+    <p class="help">{% trans "This instrument list is empty" %}</p>
+ {% endif %}
+
+  <br style="clear: right"/>
+{% endblock %}
diff --git a/telemeta/templates/telemeta/instruments.html b/telemeta/templates/telemeta/instruments.html
new file mode 100644 (file)
index 0000000..2100630
--- /dev/null
@@ -0,0 +1,32 @@
+{% extends "telemeta/admin.html" %}
+{% load i18n %}
+
+{% block head_title %}{% trans "Instruments" %} - {{ block.super }}{% endblock %}
+
+{% block title %}
+<h1><img src="{{ STATIC_URL }}telemeta/images/collections_red.png" style="vertical-align:middle" />  {% trans "Instruments" %}</h1>
+{% endblock %}
+
+{% block tabcontents %}
+
+ {% if instruments %}
+
+  <table class="listing">
+   <thead>
+    <tr><th class="sel">&nbsp;</th><th>{% trans "Name"%}</th><th>{% trans "Associated items" %}</th></tr>
+   </thead><tbody>
+    {% for record in instruments %}
+    <tr>
+     <td></td>
+     <td>{{record.name}}</td>
+     <td><a href="{% url "telemeta-instrument-item-list" record.id %}">{{ record.num_items }}</a></td>
+    </tr>
+    {% endfor %}
+    </tbody>
+  </table>
+ {% else %}
+    <p class="help">{% trans "This instrument list is empty" %}</p>
+ {% endif %}
+
+  <br style="clear: right"/>
+{% endblock %}
index 5d02642c38e38a54f4957c10621d09a200bda85e..5b5436ff21badfb0a5d071ac25377489dd1c8ceb 100644 (file)
@@ -31,6 +31,7 @@ from haystack.forms import *
 from jsonrpc import jsonrpc_site
 import os.path
 import telemeta.config
+from telemeta.views.enum import EnumView
 
 telemeta.config.check()
 
@@ -45,6 +46,7 @@ playlist_view = PlaylistView()
 profile_view = ProfileView()
 geo_view = GeoView()
 resource_view = ResourceView()
+enumeration_view = EnumView()
 #boolean_view = BooleanSearchView()
 
 # ID's regular expressions
@@ -53,7 +55,6 @@ export_extensions = "|".join(item_view.list_export_extensions())
 
 urlpatterns = patterns('',
                        url(r'^$', home_view.home, name="telemeta-home"),
-                       url(r'^test', TemplateView.as_view(template_name = "telemeta/hello_world.html")),
 
                        # items
                        url(r'^archives/items/$', ItemListView.as_view(), name="telemeta-items"),
@@ -146,6 +147,10 @@ urlpatterns = patterns('',
                        url(r'^admin/enumerations/$', admin_view.admin_enumerations, name="telemeta-admin-enumerations"),
                        url(r'^admin/users/$', admin_view.admin_users, name="telemeta-admin-users"),
 
+                       # instruments
+                       url(r'^instruments/$', instrument_view.instrument_list, name="telemeta-instruments"),
+
+
                        # instruments administration
                        url(r'^admin/instruments/$', instrument_view.edit_instrument , name="telemeta-instrument-edit"),
                        url(r'^admin/instruments/add/$', instrument_view.add_to_instrument, name="telemeta-instrument-add"),
@@ -158,6 +163,9 @@ urlpatterns = patterns('',
                        url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/update/$', instrument_view.update_instrument_value, name="telemeta-instrument-record-update"),
                        url(r'^admin/instruments/' + r'(?P<value_id>[0-9]+)/replace/$', instrument_view.replace_instrument_value, name="telemeta-instrument-record-replace"),
 
+                       # instruments aliases
+                       url(r'^instruments_alias/$', instrument_alias_view.instrument_list, name="telemeta-instrument-alias"),
+
                        # instruments aliases administration
                        url(r'^admin/instrument_aliases/$', instrument_alias_view.edit_instrument, name="telemeta-instrument-alias-edit"),
                        url(r'^admin/instrument_aliases/add/$', instrument_alias_view.add_to_instrument, name="telemeta-instrument-alias-add"),
@@ -169,7 +177,9 @@ urlpatterns = patterns('',
                        url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/'+'list-item-unpublished/$', ItemAliasUnpublishedListView.as_view(),name="telemeta-items-alias-unpublished"),
                        url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/'+'list-item-sound/$', ItemAliasSoundListView.as_view(),name="telemeta-items-alias-sound"),
                        url(r'^admin/instrument_aliases/' + r'(?P<value_id>[0-9]+)/'+'list-items/$', ItemAliasListView.as_view(), name="telemeta-alias-item-list"),
-
+                       # enumeration
+                       url(r'^enumerations/$',enumeration_view.enumerations,name="telemeta-enumerations"),
+                       url(r'^enumerations/(?P<enumeration_id>[0-9a-z]+)/$', enumeration_view.enumeration, name="telemeta-enumeration"),
                        # enumerations administration
                        url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/$',admin_view.edit_enumeration,name="telemeta-enumeration-edit"),
                        url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/add/$',admin_view.add_to_enumeration,name="telemeta-enumeration-add"),
diff --git a/telemeta/views/enum.py b/telemeta/views/enum.py
new file mode 100644 (file)
index 0000000..d6fa1c0
--- /dev/null
@@ -0,0 +1,98 @@
+from telemeta.views.core import *
+import telemeta.models
+
+class EnumView(object):
+
+    def __get_admin_context_vars(self):
+        return {"enumerations": self.__get_enumerations_list()}
+
+    def enumerations(self, request):
+        return render(request, 'telemeta/enumerations.html', self.__get_admin_context_vars())
+
+    def enumeration (self, request, enumeration_id):
+        atr = "";
+        print enumeration_id
+        enumeration = self.__get_enumeration(enumeration_id)
+        if enumeration == None:
+            raise Http404
+        vars = self.__get_admin_context_vars()
+        vars["enumeration_id"] = enumeration._meta.module_name
+        vars["enumeration_name"] = enumeration._meta.verbose_name
+        vars["enumeration_values"] = enumeration.objects.all()
+        vars["enumeration_support"] = ""
+        vars["enumeration_count"] = []
+        f = MediaCollection._meta.get_all_field_names()
+        for field in f:
+            if field in enumeration._meta.db_table.replace(" ", "_"):
+                atr = field;
+        if enumeration._meta.db_table.replace(" ", "_") == "context_keywords":
+            vars["enumeration_support"] = "Item"
+            vars["enumeration_count"] = self.__getCountKeyWord(vars["enumeration_values"])
+        else:
+            if atr == "":
+                vars["enumeration_support"] = "Item"
+                vars["enumeration_count"] = self.__getCountItem(enumeration, vars["enumeration_values"])
+            else:
+                vars["enumeration_support"] = "Collection"
+                vars["enumeration_count"] = self.__getCountColl(vars["enumeration_values"], atr)
+
+        return render(request, 'telemeta/enumeration.html', vars)
+
+    def __get_enumerations_list(self):
+        from django.db.models import get_models
+        models = get_models(telemeta.models)
+
+        enumerations = []
+        for model in models:
+            if issubclass(model, Enumeration):
+                if not model.hidden:
+                    enumerations.append({"name": model._meta.verbose_name,
+                                         "id": model._meta.module_name})
+
+        cmp = lambda obj1, obj2: unaccent_icmp(obj1['name'], obj2['name'])
+        enumerations.sort(cmp)
+        return enumerations
+
+    def __get_enumeration(self, id):
+        from django.db.models import get_models
+        models = get_models(telemeta.models)
+        for model in models:
+            if model._meta.module_name == id:
+                break
+
+        if model._meta.module_name != id:
+            return None
+
+        return model
+
+    def __getCountColl(self, values, atr):
+        c = []
+        for enum in values:
+            lookup = "%s__exact" % atr
+            c.append(MediaCollection.objects.filter(**{lookup: enum.__getattribute__("id")}).count())
+        c.reverse()
+        return c
+
+
+    def __getCountItem(self, enumeration, values):
+        c = []
+        atr = ""
+        f = MediaItem._meta.get_all_field_names()
+        for field in f:
+            if field in enumeration._meta.db_table.replace(" ", "_"):
+                atr = field;
+        for enum in values:
+            lookup = "%s__exact" % atr
+            c.append(MediaItem.objects.filter(**{lookup: enum.__getattribute__("id")}).count())
+        c.reverse()
+        return c
+
+
+    def __getCountKeyWord(self, values):
+        c = []
+        atr = "keyword_id"
+        for enum in values:
+            lookup = "%s__exact" % atr
+            c.append(MediaItemKeyword.objects.filter(**{lookup: enum.__getattribute__("id")}).count())
+        c.reverse()
+        return c
\ No newline at end of file
index 61c8a7984d54e1244b5191f51c3e51905349149d..7877778c2fdde6318483afe609f94e1a7230f087 100644 (file)
@@ -26,6 +26,12 @@ from django.db.models import Count
 
 class InstrumentView(object):
     """Provide Instrument web UI methods"""
+    def instrument_list(self,request):
+
+        instruments = Instrument.objects.annotate(num_items=Count('performances')).order_by('name')
+        if instruments == None:
+            raise Http404
+        return render(request, 'telemeta/instruments.html', {'instruments': instruments})
 
     @method_decorator(permission_required('telemeta.change_instrument'))
     def edit_instrument(self, request):
@@ -109,6 +115,11 @@ class InstrumentView(object):
 
 class InstrumentAliasView(object):
     """Provide Instrument alias web UI methods"""
+    def instrument_list(self,request):
+        instruments = InstrumentAlias.objects.annotate(num_items=Count('performances')).order_by('name')
+        if instruments == None:
+            raise Http404
+        return render(request, 'telemeta/instrument_alias.html', {'instruments': instruments})
 
     @method_decorator(permission_required('telemeta.change_instrumentalias'))
     def edit_instrument(self, request):
index f9903f70eddaf6ef43d1eca755c00b5db104ef99..76e983aa3337402d08c26e85228e14897737788b 100644 (file)
@@ -33,6 +33,7 @@ import time
 
 
 class ItemBaseMixin(TelemetaBaseMixin):
+
     graphers = timeside.core.processor.processors(timeside.core.api.IGrapher)
     decoders = timeside.core.processor.processors(timeside.core.api.IDecoder)
     encoders = timeside.core.processor.processors(timeside.core.api.IEncoder)
@@ -45,16 +46,16 @@ class ItemBaseMixin(TelemetaBaseMixin):
     default_grapher_sizes = getattr(settings, 'TIMESIDE_DEFAULT_GRAPHER_SIZES', ['346x130', ])
     auto_zoom = getattr(settings, 'TIMESIDE_AUTO_ZOOM', False)
 
-    public_graphers = ['waveform_centroid', 'waveform_simple',
-                       'spectrogram', 'spectrogram_log']
-
+    public_graphers  = ['waveform_centroid' ,'waveform_simple',
+                        'spectrogram', 'spectrogram_log']
+    
     def get_graphers(self):
         graphers = []
         user = self.request.user
         graphers_access = (user.is_staff
                            or user.is_superuser
                            or user.has_perm('can_run_analysis'))
-
+           
         for grapher in self.graphers:
             if (not graphers_access
                 and grapher.id() not in self.public_graphers):
@@ -297,7 +298,7 @@ class ItemView(ItemBaseMixin):
                 graph = grapher(width=width, height=height)
                 (decoder | graph).run()
                 graph.watermark('timeside', opacity=.6, margin=(5, 5))
-                # f = open(path, 'w')
+                #f = open(path, 'w')
                 graph.render(output=path)
                 # f.close()
                 self.cache_data.add_file(image_file)
@@ -408,7 +409,7 @@ class ItemView(ItemBaseMixin):
             video = item.file.path
             response = serve_media(video, content_type=mime_type)
             # response['Content-Disposition'] = 'attachment'
-            #  TF : I don't know why empty attachment was set
+            # TF : I don't know why empty attachment was set
             # TODO: remove if useless
             if return_availability:
                 data = json.dumps({'available': True})
@@ -420,7 +421,7 @@ class ItemView(ItemBaseMixin):
             video = item.file.path
             response = serve_media(video, content_type=mime_type)
             # response['Content-Disposition'] = 'attachment'
-            #  TF : I don't know why empty attachment was set,
+            # TF : I don't know why empty attachment was set,
             # TODO: remove if useless
             if return_availability:
                 data = json.dumps({'available': True})
@@ -428,7 +429,7 @@ class ItemView(ItemBaseMixin):
             return response
 
         (media, mime_type) = self.item_transcode(item, extension)
-        # media  = None
+        #media  = None
         if media:
             if return_availability:
                 data = json.dumps({'available': True})
@@ -447,7 +448,7 @@ class ItemView(ItemBaseMixin):
             messages.info(request, title)
             response = render(request, 'telemeta/messages.html', {'description': description})
             from django.utils.cache import patch_cache_control
-            # patch_cache_control(response, no_cache=True, no_store=True, must_revalidate=True)
+            #patch_cache_control(response, no_cache=True, no_store=True, must_revalidate=True)
             return response
 
     def item_export_available(self, request, public_id, extension):
@@ -491,6 +492,7 @@ class ItemView(ItemBaseMixin):
 
 
 class ItemListView(ListView):
+
     model = MediaItem
     template_name = "telemeta/mediaitem_list.html"
     queryset = MediaItem.objects.enriched().order_by('code', 'old_code')
@@ -506,12 +508,11 @@ class ItemListView(ListView):
 
 
 class ItemListViewFullAccess(ListView):
+
     model = MediaItem
     template_name = "telemeta/mediaitem_list.html"
     paginate_by = 20
-    queryset = MediaItem.objects.enriched().filter(
-        Q(collection__public_access="full") | Q(public_access="full")).sound().exclude(
-        collection__public_access="none").order_by('code', 'old_code')
+    queryset = MediaItem.objects.enriched().filter(Q(collection__public_access="full") | Q(public_access="full")).sound().exclude(collection__public_access="none").order_by('code', 'old_code')
 
     def get_context_data(self, **kwargs):
         context = super(ItemListViewFullAccess, self).get_context_data(**kwargs)
@@ -520,18 +521,22 @@ class ItemListViewFullAccess(ListView):
 
 
 class ItemUnpublishedListView(ItemListView):
+
     queryset = MediaItem.objects.filter(collection__code__contains='_I_').order_by('code', 'old_code')
 
 
 class ItemPublishedListView(ItemListView):
+
     queryset = MediaItem.objects.filter(collection__code__contains='_E_').order_by('code', 'old_code')
 
 
 class ItemSoundListView(ItemListView):
+
     queryset = MediaItem.objects.sound().order_by('code', 'old_code')
 
 
 class ItemInstrumentListView(ItemListView):
+
     template_name = "telemeta/media_item_instrument_list.html"
 
     def get_queryset(self):
@@ -547,23 +552,25 @@ class ItemInstrumentListView(ItemListView):
 
 
 class ItemInstrumentPublishedListView(ItemInstrumentListView):
+
     def get_queryset(self):
-        return super(ItemInstrumentPublishedListView, self).get_queryset().filter(
-            collection__code__contains='_E_').order_by('code', 'old_code')
+        return super(ItemInstrumentPublishedListView, self).get_queryset().filter(collection__code__contains='_E_').order_by('code', 'old_code')
 
 
 class ItemInstrumentUnpublishedListView(ItemInstrumentListView):
+
     def get_queryset(self):
-        return super(ItemInstrumentUnpublishedListView, self).get_queryset().filter(
-            collection__code__contains='_I_').order_by('code', 'old_code')
+        return super(ItemInstrumentUnpublishedListView, self).get_queryset().filter(collection__code__contains='_I_').order_by('code', 'old_code')
 
 
 class ItemInstrumentSoundListView(ItemInstrumentListView):
+
     def get_queryset(self):
         return super(ItemInstrumentSoundListView, self).get_queryset().sound().order_by('code', 'old_code')
 
 
 class ItemAliasListView(ItemListView):
+
     template_name = "telemeta/media_item_alias_list.html"
 
     def get_queryset(self):
@@ -579,27 +586,28 @@ class ItemAliasListView(ItemListView):
 
 
 class ItemAliasPublishedListView(ItemAliasListView):
+
     def get_queryset(self):
-        return super(ItemAliasPublishedListView, self).get_queryset().filter(collection__code__contains='_E_').order_by(
-            'code', 'old_code')
+        return super(ItemAliasPublishedListView, self).get_queryset().filter(collection__code__contains='_E_').order_by('code', 'old_code')
 
 
 class ItemAliasUnpublishedListView(ItemAliasListView):
+
     def get_queryset(self):
-        return super(ItemAliasUnpublishedListView, self).get_queryset().filter(
-            collection__code__contains='_I_').order_by('code', 'old_code')
+        return super(ItemAliasUnpublishedListView, self).get_queryset().filter(collection__code__contains='_I_').order_by('code', 'old_code')
 
 
 class ItemAliasSoundListView(ItemAliasListView):
+
     def get_queryset(self):
         return super(ItemAliasSoundListView, self).get_queryset().sound().order_by('code', 'old_code')
 
 
 class ItemViewMixin(ItemBaseMixin):
+
     model = MediaItem
     form_class = MediaItemForm
     inlines = [ItemPerformanceInline, ItemKeywordInline, ItemRelatedInline, ItemIdentifierInline]
-
     # inlines = [ItemPerformanceInline, ItemKeywordInline, ItemRelatedInline,
     #             ItemFormatInline, ItemIdentifierInline]
 
@@ -619,6 +627,7 @@ class ItemViewMixin(ItemBaseMixin):
 
 
 class ItemEditView(ItemViewMixin, UpdateWithInlinesView):
+
     template_name = 'telemeta/mediaitem_edit.html'
 
     def get_form_class(self):
@@ -666,6 +675,7 @@ class ItemEditView(ItemViewMixin, UpdateWithInlinesView):
 
 
 class ItemAddView(ItemViewMixin, CreateWithInlinesView):
+
     form_class = MediaItemForm
     template_name = 'telemeta/mediaitem_add.html'
 
@@ -697,6 +707,7 @@ class ItemAddView(ItemViewMixin, CreateWithInlinesView):
 
 
 class ItemCopyView(ItemAddView):
+
     form_class = MediaItemForm
     template_name = 'telemeta/mediaitem_edit.html'
 
@@ -746,6 +757,7 @@ class ItemCopyView(ItemAddView):
 
 
 class ItemDetailView(ItemViewMixin, DetailView):
+
     template_name = 'telemeta/mediaitem_detail.html'
 
     def item_analyze(self, item):
@@ -850,8 +862,8 @@ class ItemDetailView(ItemViewMixin, DetailView):
                     is_transcoded_flag.value = True
                     is_transcoded_flag.save()
 
-                    #                FIXME: parse tags on first load
-                    #                tags = decoder.tags
+#                FIXME: parse tags on first load
+#                tags = decoder.tags
 
         self.mime_type = mime_type
 
@@ -952,28 +964,28 @@ class DublinCoreToFormatMetadata(object):
             'relation': 'TALB',  # album
             'type': 'TCON',  # genre
             'publisher': 'TPUB',  # publisher
-            'date': 'TDRC',  # year
+                         'date': 'TDRC',  # year
             #                         'coverage': 'COMM',  #comment
         },
         'ogg': {
             'creator': 'artist',
             'relation': 'album',
-            'all': 'all',
+                        'all': 'all',
         },
         'flac': {
             'creator': 'artist',
             'relation': 'album',
-            'all': 'all',
+                        'all': 'all',
         },
         'wav': {
             'creator': 'artist',
             'relation': 'album',
-            'all': 'all',
+                        'all': 'all',
         },
         'webm': {
             'creator': 'artist',
             'relation': 'album',
-            'all': 'all',
+                        'all': 'all',
         },
     }
 
@@ -1004,6 +1016,7 @@ class DublinCoreToFormatMetadata(object):
 
 
 class ItemMarkerJsonView(View):
+
     model = MediaItem
 
     def get(self, request, *args, **kwargs):
@@ -1017,21 +1030,23 @@ class ItemMarkerJsonView(View):
             data = ''
         response = HttpResponse(data, content_type='application/json')
         response['Content-Disposition'] = "attachment; filename=%s.%s" % \
-                                          (item.code, 'json')
+            (item.code, 'json')
         return response
 
 
 class ItemPlayerDefaultView(ItemDetailView):
+
     template_name = 'telemeta/mediaitem_player.html'
 
 
 class ItemDetailDCView(ItemDetailView):
+
     template_name = 'telemeta/mediaitem_detail_dc.html'
 
 
 class ItemVideoPlayerView(ItemDetailView):
-    template_name = 'telemeta/mediaitem_video_player.html'
 
+    template_name = 'telemeta/mediaitem_video_player.html'
 
 class ItemEnumListView(ItemListView):
     template_name = 'telemeta/media_item_enum_list.html'
@@ -1043,13 +1058,10 @@ class ItemEnumListView(ItemListView):
         context['count'] = self.object_list.count()
         context['keyword'] = False
         context['enum_name'] = ItemEnumListView().get_enumeration(self.request.path.split('/')[3])._meta.verbose_name
-        context['enum_value'] = ItemEnumListView().get_enumeration(self.request.path.split('/')[3]).objects.get(
-            id__exact=self.request.path.split('/')[4])
+        context['enum_value'] = ItemEnumListView().get_enumeration(self.request.path.split('/')[3]).objects.get(id__exact=self.request.path.split('/')[4])
         context['url_all'] = "/admin/enumerations/" + context['enum'] + "/" + context['id'] + "/item/list"
-        context['url_unpublished'] = "/admin/enumerations/" + context['enum'] + "/" + context[
-            'id'] + "/item_unpublished/list/"
-        context['url_published'] = "/admin/enumerations/" + context['enum'] + "/" + context[
-            'id'] + "/item_published/list/"
+        context['url_unpublished'] = "/admin/enumerations/" + context['enum'] + "/" + context['id'] + "/item_unpublished/list/"
+        context['url_published'] = "/admin/enumerations/" + context['enum'] +"/"+context['id'] + "/item_published/list/"
         context['url_sound'] = "/admin/enumerations/" + context['enum'] + "/" + context['id'] + "/item_sound/list/"
         return context
 
@@ -1078,11 +1090,10 @@ class ItemEnumListView(ItemListView):
             return None
         return model
 
-
 class ItemPublishedEnumListView(ItemEnumListView):
     def get_queryset(self):
         c = ItemEnumListView()
-        # id of value of enumeration
+        #id of value of enumeration
         i = self.request.path.split('/')[4]
         enumeration = c.get_enumeration(self.request.path.split('/')[3])
         queryset = self.get_item(enumeration.objects.filter(id=i).get(), c)
@@ -1095,8 +1106,8 @@ class ItemPublishedEnumListView(ItemEnumListView):
 class ItemUnpublishedEnumListView(ItemEnumListView):
     def get_queryset(self):
         c = ItemEnumListView()
-        # id of value of enumeration
-        i = self.request.path.split('/')[4]
+        #id of value of enumeration
+        i= self.request.path.split('/')[4]
         enumeration = c.get_enumeration(self.request.path.split('/')[3])
         queryset = self.get_item(enumeration.objects.filter(id=i).get(), c)
         return queryset
@@ -1108,8 +1119,8 @@ class ItemUnpublishedEnumListView(ItemEnumListView):
 class ItemSoundEnumListView(ItemEnumListView):
     def get_queryset(self):
         c = ItemEnumListView()
-        # id of value of enumeration
-        i = self.request.path.split('/')[4]
+        #id of value of enumeration
+        i= self.request.path.split('/')[4]
         enumeration = c.get_enumeration(self.request.path.split('/')[3])
         queryset = self.get_item(enumeration.objects.filter(id=i).get(), c)
         return queryset
@@ -1119,6 +1130,8 @@ class ItemSoundEnumListView(ItemEnumListView):
 
 
 class ItemKeywordListView(ItemListView):
+    template_name = 'telemeta/media_item_enum_list.html'
+
 
     def get_context_data(self, **kwargs):
         context = super(ItemListView, self).get_context_data(**kwargs)
@@ -1127,15 +1140,11 @@ class ItemKeywordListView(ItemListView):
         context['count'] = self.object_list.count()
         context['keyword'] = True
         context['enum_name'] = ItemEnumListView().get_enumeration(self.request.path.split('/')[3])._meta.verbose_name
-        context['enum_value'] = ItemEnumListView().get_enumeration(self.request.path.split('/')[3]).objects.get(
-            id__exact=self.request.path.split('/')[4])
-        context['url_all'] = "/admin/enumerations/" + context['enum'] + "/" + context['id'] + "/keyword_item/list"
-        context['url_unpublished'] = "/admin/enumerations/" + context['enum'] + "/" + context[
-            'id'] + "/keyword_item_unpublished/list/"
-        context['url_published'] = "/admin/enumerations/" + context['enum'] + "/" + context[
-            'id'] + "/keyword_item_published/list/"
-        context['url_sound'] = "/admin/enumerations/" + context['enum'] + "/" + context[
-            'id'] + "/keyword_item_published/list/"
+        context['enum_value'] = ItemEnumListView().get_enumeration(self.request.path.split('/')[3]).objects.get(id__exact=self.request.path.split('/')[4])
+        context['url_all'] = "/admin/enumerations/"+context['enum']+"/"+context['id']+"/keyword_item/list"
+        context['url_unpublished'] = "/admin/enumerations/"+context['enum']+"/"+context['id']+"/keyword_item_unpublished/list/"
+        context['url_published'] = "/admin/enumerations/"+context['enum']+"/"+context['id']+"/keyword_item_published/list/"
+        context['url_sound'] = "/admin/enumerations/"+context['enum']+"/"+context['id']+"/keyword_item_published/list/"
 
         context['argument'] = [context['enum'], context['id']]
 
@@ -1147,9 +1156,10 @@ class ItemKeywordListView(ItemListView):
 
     def get_item(self, id):
         c = []
-        for m in MediaItemKeyword.objects.filter(keyword_id=id):
+        for m  in MediaItemKeyword.objects.filter(keyword_id=id):
             c.append(m.__getattribute__("item_id"))
-        return MediaItem.objects.filter(id__in=c)
+        return  MediaItem.objects.filter(id__in=c)
+
 
     def get_enumeration(self, id):
         from django.db.models import get_models
@@ -1161,28 +1171,28 @@ class ItemKeywordListView(ItemListView):
             return None
         return model
 
-
 class ItemKeywordPublishedListView(ItemKeywordListView):
+
     def get_queryset(self):
-        c = ItemKeywordListView()
-        queryset = self.get_item(self.request.path.split('/')[4], c)
+        c=ItemKeywordListView()
+        queryset = self.get_item(self.request.path.split('/')[4],c)
         return queryset
 
-    def get_item(self, id, c):
+    def get_item(self, id,c):
         return c.get_item(id).filter(code__contains='_E_')
 
-
 class ItemKeywordUnpublishedListView(ItemKeywordListView):
+
     def get_queryset(self):
-        c = ItemKeywordListView()
-        queryset = self.get_item(self.request.path.split('/')[4], c)
+        c=ItemKeywordListView()
+        queryset = self.get_item(self.request.path.split('/')[4],c)
         return queryset
 
-    def get_item(self, id, c):
+    def get_item(self, id,c):
         return c.get_item(id).filter(code__contains='_I_')
 
-
 class ItemKeywordSoundListView(ItemKeywordListView):
+
     def get_queryset(self):
         c = ItemKeywordListView()
         queryset = self.get_item(self.request.path.split('/')[4], c)