from jsonrpc import jsonrpc_site
import os.path
import telemeta.config
+from telemeta.views.enum import EnumView
telemeta.config.check()
profile_view = ProfileView()
geo_view = GeoView()
resource_view = ResourceView()
+enumeration_view = EnumView()
#boolean_view = BooleanSearchView()
# ID's regular expressions
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"),
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"),
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"),
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"),
--- /dev/null
+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
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)
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):
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)
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})
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})
return response
(media, mime_type) = self.item_transcode(item, extension)
- # media = None
+ #media = None
if media:
if return_availability:
data = json.dumps({'available': True})
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):
class ItemListView(ListView):
+
model = MediaItem
template_name = "telemeta/mediaitem_list.html"
queryset = MediaItem.objects.enriched().order_by('code', 'old_code')
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)
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):
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):
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]
class ItemEditView(ItemViewMixin, UpdateWithInlinesView):
+
template_name = 'telemeta/mediaitem_edit.html'
def get_form_class(self):
class ItemAddView(ItemViewMixin, CreateWithInlinesView):
+
form_class = MediaItemForm
template_name = 'telemeta/mediaitem_add.html'
class ItemCopyView(ItemAddView):
+
form_class = MediaItemForm
template_name = 'telemeta/mediaitem_edit.html'
class ItemDetailView(ItemViewMixin, DetailView):
+
template_name = 'telemeta/mediaitem_detail.html'
def item_analyze(self, item):
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
'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',
},
}
class ItemMarkerJsonView(View):
+
model = MediaItem
def get(self, request, *args, **kwargs):
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'
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
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)
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
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
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)
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']]
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
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)