From: yomguy Date: Tue, 5 Apr 2011 12:14:19 +0000 (+0200) Subject: add all CharFields in search keywords for Collection and Item, add item_analyze_xml... X-Git-Tag: 1.1~298 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=51c98a717dc2ec37535af69a58ece901537765f5;p=telemeta.git add all CharFields in search keywords for Collection and Item, add item_analyze_xml control and view to get Item analyzers in XML --- diff --git a/telemeta/models/query.py b/telemeta/models/query.py index 9c01f9ad..839f5068 100644 --- a/telemeta/models/query.py +++ b/telemeta/models/query.py @@ -43,14 +43,22 @@ class MediaItemQuerySet(CoreQuerySet): "Base class for all media item query sets" def quick_search(self, pattern): - "Perform a quick search on code, title and collector name" + "Perform a quick search on various fields" + from telemeta.models.media import MediaItem pattern = pattern.strip() - return self.filter( - Q(code__contains=pattern.strip()) | - Q(old_code__contains=pattern.strip()) | - word_search_q('title', pattern) | - self.by_fuzzy_collector_q(pattern) - ) + model = MediaItem() + fields = model.to_dict() + keys = fields.keys() + fields = [] + for field in keys: + field_str = str(model._meta.get_field(field)) + if 'CharField' in field_str: + fields.append(field) + q = Q(code__contains=pattern.strip()) | Q(old_code__contains=pattern.strip()) + for field in fields: + q = q | word_search_q(field, pattern) + q = q | self.by_fuzzy_collector_q(pattern) + return self.filter(q) def without_collection(self): "Find items which do not belong to any collection" @@ -220,14 +228,22 @@ class MediaItemManager(CoreManager): class MediaCollectionQuerySet(CoreQuerySet): def quick_search(self, pattern): - "Perform a quick search on code, title and collector name" + "Perform a quick search on various fields" + from telemeta.models.media import MediaCollection pattern = pattern.strip() - return self.filter( - Q(code__contains=pattern.strip()) | - Q(old_code__contains=pattern.strip()) | - word_search_q('title', pattern) | - self.by_fuzzy_collector_q(pattern) - ) + model = MediaCollection() + fields = model.to_dict() + keys = fields.keys() + fields = [] + for field in keys: + field_str = str(model._meta.get_field(field)) + if 'CharField' in field_str: + fields.append(field) + q = Q(code__contains=pattern.strip()) | Q(old_code__contains=pattern.strip()) + for field in fields: + q = q | word_search_q(field, pattern) + q = q | self.by_fuzzy_collector_q(pattern) + return self.filter(q) def by_location(self, location): "Find collections by location" diff --git a/telemeta/urls.py b/telemeta/urls.py index 93dc42be..54c6bfa3 100644 --- a/telemeta/urls.py +++ b/telemeta/urls.py @@ -82,9 +82,9 @@ urlpatterns = patterns('', url(r'^items/(?P[A-Za-z0-9._-]+)/visualize/(?P[0-9a-z_]+)/(?P[0-9A-Z]+)x(?P[0-9A-Z]+)/$', web_view.item_visualize, name="telemeta-item-visualize"), - url(r'^items/(?P[A-Za-z0-9._-]+)/analyze/(?P[0-9a-z_]+)/$', - web_view.item_analyze, - name="telemeta-item-analyze"), + url(r'^items/(?P[A-Za-z0-9._-]+)/analyze/xml/$', + web_view.item_analyze_xml, + name="telemeta-item-analyze-xml"), url(r'^items/(?P[A-Za-z0-9._-]+)/item_xspf.xml$', web_view.item_playlist, dict(template="telemeta/mediaitem_xspf.xml", mimetype="application/xspf+xml"), diff --git a/telemeta/web/base.py b/telemeta/web/base.py index e488e9f5..cd8acb16 100644 --- a/telemeta/web/base.py +++ b/telemeta/web/base.py @@ -390,12 +390,12 @@ class WebView(object): item.save() else: # process first waveform to speed up imports - width = 360 - height = 130 - size = str(width) + '_' + str(height) - grapher_id = 'waveform' - image_file = '.'.join([public_id, grapher_id, size, 'png']) - +# width = 360 +# height = 130 +# size = str(width) + '_' + str(height) +# grapher_id = 'waveform' +# image_file = '.'.join([public_id, grapher_id, size, 'png']) +# analyzers = [] analyzers_sub = [] if item.file: @@ -440,6 +440,16 @@ class WebView(object): self.cache_data.write_analyzer_xml(analyzers, analyze_file) return analyzers + + def item_analyze_xml(self, request, public_id): + item = MediaItem.objects.get(public_id=public_id) + analyze_file = public_id + '.xml' + if not self.cache_data.exists(analyze_file): + self.item_analyze(item) + mime_type = 'text/xml' + response = HttpResponse(self.cache_data.read_stream_bin(analyze_file), mimetype=mime_type) + response['Content-Disposition'] = 'attachment; filename='+public_id+'.xml' + return response def item_visualize(self, request, public_id, visualizer_id, width, height): item = MediaItem.objects.get(public_id=public_id)