BROKER_URL = 'amqp://guest:guest@rabbitmq//'
CELERY_IMPORTS = ("timeside.server.tasks",)
-CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend'
+CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
CELERY_TASK_SERIALIZER = "json"
CELERY_ACCEPT_CONTENT = ['application/json']
'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
'URL': 'http://search:9200/',
'INDEX_NAME': 'haystack',
+ 'INLUDE_SPELLING': True,
},
}
# The fact that you are presently reading this means that you have had
# knowledge of the CeCILL license and that you accept its terms.
#
-# Authors: Angy Fil-Aimé
+# Authors: Angy Fils-Aimé
# Killian Mary
+# Novembre 2015 : Raouf Benmansour
from telemeta.models import *
return sqs
if self.cleaned_data['q']:
- sqs = sqs.filter(content__contains=self.cleaned_data['q']).facet('item_acces').facet('item_status').facet('digitized').facet('recording_context').facet('physical_format').facet('media_type')
+ #search input of a code, contains at least '_YYYY_'
+ if not re.match('([a-zA-Z]*_?[EI])?_[0-9]{4}_([0-9]{3}_[0-9]{3})?', self.cleaned_data.get('q')):
+ sqs = sqs.filter(content__contains=self.cleaned_data['q']).facet('item_acces').facet('item_status').facet('digitized').facet('recording_context').facet('physical_format').facet('media_type')
+ else:
+ sqs = sqs.filter(code__exact=self.cleaned_data['q']).facet('item_acces').facet('item_status').facet('digitized').facet('recording_context').facet('physical_format').facet('media_type')
+ print(self.cleaned_data['q'])
for facet in self.selected_facets:
if ":" not in facet:
-Subproject commit 91973b13f9dc9405052727c0c525d342dee15562
+Subproject commit 030ff8fbada394775abfd9deec770706dd531acc
collection_code_regex = '(?:%s|%s)' % (collection_published_code_regex,
collection_unpublished_code_regex)
-
class MediaCollection(MediaResource):
"Describe a collection of items"
media_type = indexes.CharField(model_attr='media_type', null='None', faceted=True)
recording_context = indexes.CharField(model_attr='collection__recording_context', default='', faceted=True)
physical_format = indexes.CharField(model_attr='collection__physical_format', default='', faceted=True)
+ #content_auto = indexes.EdgeNgramField(model_attr='content')
#advance search
title = indexes.NgramField(model_attr='title')
media_type = indexes.CharField(model_attr='media_type', null='None', faceted=True)
recording_context = indexes.CharField(model_attr='recording_context', default='', faceted=True)
physical_format = indexes.CharField(model_attr='physical_format', default='', faceted=True)
+ #content_auto = indexes.EdgeNgramField(model_attr='content')
#advance search
title = indexes.NgramField(model_attr='title')
if obj.recorded_to_year != 0:
return datetime.date(int(obj.recorded_to_year), 01, 01)
else:
- return None
\ No newline at end of file
+ return None
+
+
+class MediaCorpusIndex(indexes.SearchIndex, indexes.Indexable):
+
+ text = indexes.CharField(document=True, use_template=True)
+ #item_acces = indexes.CharField(model_attr='public_access', faceted=True)
+ #item_status = indexes.CharField(model_attr='document_status', faceted=True)
+ digitized = indexes.BooleanField(default=False, faceted=True)
+ #media_type = indexes.CharField(model_attr='media_type', null='None', faceted=True)
+ #recording_context = indexes.CharField(model_attr='recording_context', default='', faceted=True)
+ #physical_format = indexes.CharField(model_attr='collection__physical_format', default='', faceted=True)
+ #content_auto = indexes.EdgeNgramField(model_attr='content')
+
+ #advance search
+ title = indexes.NgramField(model_attr='title')
+ code = indexes.NgramField(model_attr='code', default='')
+ #location_principal = indexes.CharField(default='', boost=1.05)
+ #location_relation = indexes.CharField()
+ #ethnic_group = indexes.CharField(default='')
+ #instruments = indexes.NgramField(default='')
+ #collectors = indexes.NgramField(model_attr='collector', default='')
+ #recorded_from_date = indexes.DateField(model_attr='recorded_from_year', null=True)
+ recorded_to_date = indexes.DateField(model_attr='recorded_to_year', null=True)
+ #year_published = indexes.IntegerField(model_attr='year_published', default='')
+
+ def prepare_digitized(self, obj):
+ return obj.has_mediafile
+
+ def get_model(self):
+ return MediaCorpus
+
+
+class MediaFondsIndex(indexes.SearchIndex, indexes.Indexable):
+
+ text = indexes.CharField(document=True, use_template=True)
+ #item_acces = indexes.CharField(model_attr='public_access', faceted=True)
+ #item_status = indexes.CharField(model_attr='document_status', faceted=True)
+ digitized = indexes.BooleanField(default=False, faceted=True)
+ #media_type = indexes.CharField(model_attr='media_type', null='None', faceted=True)
+ #recording_context = indexes.CharField(model_attr='recording_context', default='', faceted=True)
+ #physical_format = indexes.CharField(model_attr='physical_format', default='', faceted=True)
+ #content_auto = indexes.EdgeNgramField(model_attr='content')
+
+ #advance search
+ title = indexes.NgramField(model_attr='title')
+ code = indexes.NgramField(model_attr='code', default='')
+ #location_principal = indexes.CharField(default='', boost=1.05)
+ #location_relation = indexes.CharField()
+ #ethnic_group = indexes.CharField(default='')
+ #instruments = indexes.NgramField(default='')
+ #collectors = indexes.NgramField(model_attr='collector', default='')
+ #recorded_from_date = indexes.DateField(model_attr='recorded_from_year', null=True)
+ #recorded_to_date = indexes.DateField(model_attr='recorded_to_year', null=True)
+ #year_published = indexes.IntegerField(model_attr='year_published', default='')
+
+ def prepare_digitized(self, obj):
+ return obj.has_mediafile
+
+ def get_model(self):
+ return MediaFonds
+
</div>
<div class="fieldWrapper">
{{form.collectors.errors}}
- {{ form.collectors.label_tag }}</br>
+ {% trans form.collectors.label_tag %}</br>
{{form.collectors}}
</div>
<div class="fieldWrapper">
<div class="row" style="margin-left:-15px">
<div class="col-md-4">
{% ifequal type 'item' %}
- <p><b>Items ({{item_count}}) | <a href="{% url "haystack_advance_search_type" "collection" %}?{{request.GET.urlencode}}">Collections ({{collection_count}})</a></b></p>
- {% else %}
- {% ifequal type 'collection'%}
- <p><b><a href="{% url "haystack_advance_search_type" "item" %}?{{request.GET.urlencode}}">Items ({{item_count}}) </a>| Collections ({{collection_count}})</b></p>
+ <p><b>Items ({{item_count}}) | <a href="{% url "haystack_advance_search_type" "collection" %}?{{request.GET.urlencode}}">Collections ({{collection_count}})</a> | <a href="{% url "haystack_advance_search_type" "corpus" %}?{{request.GET.urlencode}}">Corpus ({{corpus_count}})</a> | <a href="{% url "haystack_advance_search_type" "fonds" %}?{{request.GET.urlencode}}">Fonds ({{fonds_count}})</a></b></p>
+ {% else %}
+ {% ifequal type 'corpus' %}
+ <p><b><a href="{% url "haystack_advance_search_type" "item" %}?{{request.GET.urlencode}}">Items ({{item_count}}) </a>| <a href="{% url "haystack_advance_search_type" "collection" %}?{{request.GET.urlencode}}">Collections ({{collection_count}})</a> | Corpus ({{corpus_count}})</a> | <a href="{% url "haystack_advance_search_type" "fonds" %}?{{request.GET.urlencode}}">Fonds ({{fonds_count}})</a></b></p>
+ {% else %}
+ {% ifequal type 'fonds' %}
+ <p><b><a href="{% url "haystack_advance_search_type" "item" %}?{{request.GET.urlencode}}">Items ({{item_count}}) </a>| <a href="{% url "haystack_advance_search_type" "collection" %}?{{request.GET.urlencode}}">Collections ({{collection_count}})</a> | <a href="{% url "haystack_advance_search_type" "corpus" %}?{{request.GET.urlencode}}">Corpus ({{corpus_count}})</a> | Fonds ({{fonds_count}})</b></p>
+ {% else %}
+ {% ifequal type 'collection'%}
+ <p><b><a href="{% url "haystack_advance_search_type" "item" %}?{{request.GET.urlencode}}">Items ({{item_count}}) </a>| Collections ({{collection_count}}) | <a href="{% url "haystack_advance_search_type" "corpus" %}?{{request.GET.urlencode}}">Corpus ({{corpus_count}})</a> | <a href="{% url "haystack_advance_search_type" "fonds" %}?{{request.GET.urlencode}}">Fonds ({{fonds_count}})</a></b></p>
+ {% endifequal %}
+ {% endifequal %}
{% endifequal %}
- {% endifequal %}
+ {% endifequal %}
</div>
<div class="col-md-4 col-md-offset-4" >
<div class="pull-right"">
{% ifequal type 'item' %}
{% include "search/mediaitem_listhaystack.html" %}
{% else %}
- {% ifequal type 'collection' %}
- {% include "search/mediacollection_listhaystack.html" %}
+ {% ifequal type 'corpus' %}
+ {% include "search/mediacorpus_listhaystack.html" %}
+ {% else %}
+ {% ifequal type 'fonds' %}
+ {% include "search/mediafonds_listhaystack.html" %}
+ {% else %}
+ {% ifequal type 'collection' %}
+ {% include "search/mediacollection_listhaystack.html" %}
+ {%endifequal%}
+ {%endifequal%}
{%endifequal%}
{%endifequal%}
</div>
{% ifequal type 'item' %}
{% include "search/mediaitem_listhaystack.html" %}
{% else %}
- {% ifequal type 'collection' %}
- {% include "search/mediacollection_listhaystack.html" %}
+ {% ifequal type 'corpus' %}
+ {% include "search/mediacorpus_listhaystack.html" %}
+ {% else %}
+ {% ifequal type 'fonds' %}
+ {% include "search/mediafonds_listhaystack.html" %}
+ {% else %}
+ {% ifequal type 'collection' %}
+ {% include "search/mediacollection_listhaystack.html" %}
+ {%endifequal%}
+ {%endifequal%}
{%endifequal%}
{%endifequal%}
</div>
{{ object.recorded_to_year }}
{{ object.description }}
{{ object.collector }}
+{{ object.publisher_id }}
+{{ object.publisher_collection_id }}
{{ object.publisher_serial }}
{{ object.booklet_author }}
{{ object.external_references }}
{{ object.items_done }}
{{ object.conservation_site }}
{{ object.location }}
+{{ object.code }}
+{{ object.countries }}
+{{ object.ethnic_groups }}
{{ object.body }}
{{ object.title }}
{{ object.alt_title }}
+{{ object.collector }}
{{ object.recorded_from_date }}
{{ object.recorded_to_date }}
{{ object.code }}
+{{ object.old_code }}
{{ object.location }}
{{ object.location.name }}
{{ object.comment }}
{{ object.external_references }}
{{ object.location_comment }}
{{ object.cultural_area }}
-{{ object.body }}
+{{ object.language }}
+{{ object.language_iso_id }}
+{{ object.ethnic_group_id }}
+{{ object.context_comment }}
+{{ object.moda_execut }}
+{{ object.vernacular_style_id }}
+{{ object.generic_style_id }}
+#{{ object.instrument_vernacular_names }}
+{{ object.body }}
\ No newline at end of file
</div>
<div class="col-md-0"> </div>
</div>
- <div class="row" style="margin-left:-15px">
+ <div class="row" style="margin-left:15px">
<div class="col-md-4">
- {% ifequal type 'item' %}
- <p><b>Items ({{item_count}}) | <a href="{% url "haystack_search_type" "collection" %}?{{request.GET.urlencode}}">Collections ({{collection_count}})</a></b></p>
- {% else %}
- {% ifequal type 'collection'%}
- <p><b><a href="{% url "haystack_search_type" "item" %}?{{request.GET.urlencode}}">Items ({{item_count}}) </a>| Collections ({{collection_count}})</b></p>
+ {% ifequal type 'collection'%}
+ <p><b><a href="{% url "haystack_search_type" "item" %}?{{request.GET.urlencode}}">Items ({{item_count}}) </a>| Collections ({{collection_count}}) | <a href="{% url "haystack_search_type" "corpus" %}?{{request.GET.urlencode}}">Corpus ({{corpus_count}})</a> | <a href="{% url "haystack_search_type" "fonds" %}?{{request.GET.urlencode}}">Fonds ({{corpus_count}})</a></b></p>
+ {% else %}
+ {% ifequal type 'corpus'%}
+ <p><b><a href="{% url "haystack_search_type" "item" %}?{{request.GET.urlencode}}">Items ({{item_count}}) </a>| <a href="{% url "haystack_search_type" "collection" %}?{{request.GET.urlencode}}">Collections ({{collection_count}})</a> | Corpus ({{corpus_count}}) | <a href="{% url "haystack_search_type" "fonds" %}?{{request.GET.urlencode}}">Fonds ({{corpus_count}})</a></b></p>
+ {% else %}
+ {% ifequal type 'fonds'%}
+ <p><b><a href="{% url "haystack_search_type" "item" %}?{{request.GET.urlencode}}">Items ({{item_count}}) </a>| <a href="{% url "haystack_search_type" "collection" %}?{{request.GET.urlencode}}">Collections ({{collection_count}})</a> | <a href="{% url "haystack_search_type" "corpus" %}?{{request.GET.urlencode}}">Corpus ({{corpus_count}})</a> | Fonds ({{corpus_count}})</b></p>
+ {% else %}
+ {% ifequal type 'item' %}
+ <p><b>Items ({{item_count}}) | <a href="{% url "haystack_search_type" "collection" %}?{{request.GET.urlencode}}">Collections ({{collection_count}})</a> | <a href="{% url "haystack_search_type" "corpus" %}?{{request.GET.urlencode}}">Corpus ({{corpus_count}})</a> | <a href="{% url "haystack_search_type" "fonds" %}?{{request.GET.urlencode}}">Fonds ({{corpus_count}})</a></b></p>
+ {% endifequal %}
+ {% endifequal %}
{% endifequal %}
- {% endifequal %}
+ {% endifequal %}
</div>
<div class="col-md-4 col-md-offset-4" >
<div class="pull-right"">
{% else %}
{% ifequal type 'collection' %}
{% include "search/mediacollection_listhaystack.html" %}
+ {% else %}
+ {% ifequal type 'corpus' %}
+ {% include "search/mediacorpus_listhaystack.html" %}
+ {% else %}
+ {% ifequal type 'fonds' %}
+ {% include "search/mediafonds_listhaystack.html" %}
+ {% else %}
+ {% ifequal type 'fonds' %}
+ {% include "search/mediafonds_listhaystack.html" %}
+ {%endifequal%}
+ {%endifequal%}
+ {%endifequal%}
{%endifequal%}
{%endifequal%}
</div>
<noscript>
<div class="fullpage">
- {% ifequal type 'item' %}
- {% include "search/mediaitem_listhaystack.html" %}
+ {% ifequal type 'item' %}
+ {% include "search/mediaitem_listhaystack.html" %}
+ {% else %}
+ {% ifequal type 'collection' %}
+ {% include "search/mediacollection_listhaystack.html" %}
{% else %}
- {% ifequal type 'collection' %}
- {% include "search/mediacollection_listhaystack.html" %}
+ {% ifequal type 'corpus' %}
+ {% include "search/mediacorpus_listhaystack.html" %}
+ {% else %}
+ {% ifequal type 'fonds' %}
+ {% include "search/mediafonds_listhaystack.html" %}
+ {% else %}
+ {% ifequal type 'fonds' %}
+ {% include "search/mediafonds_listhaystack.html" %}
+ {%endifequal%}
+ {%endifequal%}
{%endifequal%}
{%endifequal%}
+ {%endifequal%}
</div>
</noscript>
-
{% endwith %}
+
{% if user.is_authenticated %}
<input type="hidden" name="lastquerypath" value="{{request.get_full_path}}"/>
<button style="margin-top:10px" type="submit" id="btn" class="btn btn-default">{% trans "Add to playlist" %}</button>
# -*- coding: utf-8 -*-
from haystack.views import *
-#from haystack.query import SearchQuerySet
+from haystack.query import SearchQuerySet
from telemeta.models import *
from telemeta.forms.haystack_form import *
self.form_class = HaySearchForm
self.selected_facet = self.selected_facet_list(request.GET.getlist('selected_facets', ['a']))
if request.GET.get('results_page'):
- self.results_per_page=int(request.GET.get('results_page'))
+ self.results_per_page = int(request.GET.get('results_page'))
else:
self.results_per_page = 20
return super(HaystackSearch, self).__call__(request)
return super(HaystackSearch, self).get_query()
def get_results(self):
- if(self.type == 'collection'):
- return super(HaystackSearch, self).get_results().models(MediaCollection)
- else:
+ if(self.type == 'item'):
return super(HaystackSearch, self).get_results().models(MediaItem)
+ elif(self.type == 'corpus'):
+ return super(HaystackSearch, self).get_results().models(MediaCorpus)
+ elif(self.type == 'fonds'):
+ return super(HaystackSearch, self).get_results().models(MediaFonds)
+ else:
+ return super(HaystackSearch, self).get_results().models(MediaCollection)
- def selected_facet_list(self,selected_facets):
- facet_list=[]
+ def selected_facet_list(self, selected_facets):
+ facet_list = []
for facet in selected_facets:
if ":" not in facet:
continue
field, value = facet.split(":", 1)
if value and not value in facet_list:
- if field=='digitized_exact':
+ if field == 'digitized_exact':
facet_list.append('Sound')
else:
facet_list.append(value)
extra = super(HaystackSearch, self).extra_context()
extra['collection_count'] = super(HaystackSearch, self).get_results().models(MediaCollection).count()
extra['item_count'] = super(HaystackSearch, self).get_results().models(MediaItem).count()
+ extra['corpus_count'] = super(HaystackSearch, self).get_results().models(MediaCorpus).count()
+ extra['fonds_count'] = super(HaystackSearch, self).get_results().models(MediaFonds).count()
if extra['facets']:
viewable_total = 0
extra['Radio_count'] = self.get_results().narrow('recording_context:Radio').count()
extra['Video_count'] = self.get_results().narrow('media_type:Video').count()
extra['Audio_count'] = self.get_results().narrow('media_type:Audio').count()
- if self.type == 'collection':
- extra['type'] = 'collection'
- else:
+ if self.type == 'item':
extra['type'] = 'item'
+ elif self.type == 'fonds':
+ extra['type'] = 'fonds'
+ elif self.type == 'corpus':
+ extra['type'] = 'corpus'
+ else:
+ extra['type'] = 'collection'
extra['selected_facets'] = self.selected_facet
extra['selected_facets_url'] = self.request.GET.getlist('selected_facets')
extra['results_page'] = self.results_per_page
return extra
+ #def auto_complete(request):
+ #content = SearchQuerySet().autocomplete(content_auto=request.POST.get('seatch_text', ''))
+
+ #return render_to_response('', {'content' : content])
class HaystackAdvanceSearch(SearchView):
def __call__(self, request, type=None):
self.type = type
if request.GET.get('results_page'):
- self.results_per_page=int(request.GET.get('results_page'))
+ self.results_per_page = int(request.GET.get('results_page'))
else:
self.results_per_page = 20
return super(HaystackAdvanceSearch, self).__call__(request)
return ''
def get_results(self):
- if(self.type == 'collection'):
+ if(self.type == 'item'):
+ return self.form.search().models(MediaItem)
+ elif(self.type == 'collection'):
return self.form.search().models(MediaCollection)
+ elif(self.type == 'corpus'):
+ return self.form.search().models(MediaCorpus)
else:
- return self.form.search().models(MediaItem)
+ return self.form.search().models(MediaFonds)
def extra_context(self):
extra = super(HaystackAdvanceSearch, self).extra_context()
+ extra['fonds_count'] = self.form.search().models(MediaFonds).count()
+ extra['corpus_count'] = self.form.search().models(MediaCorpus).count()
extra['collection_count'] = self.form.search().models(MediaCollection).count()
extra['item_count'] = self.form.search().models(MediaItem).count()
- if self.type == 'collection':
+
+ if self.type == 'item':
+ extra['type'] = 'item'
+ elif self.type == 'collection':
extra['type'] = 'collection'
+ elif(self.type == 'corpus'):
+ extra['type'] = 'corpus'
else:
- extra['type'] = 'item'
+ extra['type'] = 'fonds'
+
extra['results_page'] = self.results_per_page
return extra