diff -r 91bc8521e3cb -r 7c3f54ce68af web/hdalab/views/ajax.py --- a/web/hdalab/views/ajax.py Thu Oct 04 12:25:12 2012 +0200 +++ b/web/hdalab/views/ajax.py Thu Oct 11 15:42:38 2012 +0200 @@ -423,72 +423,14 @@ return HttpResponse(content=outputstr, mimetype='application/json') -def contentsbytag(request): - - lang = request.GET.get('lang',request.LANGUAGE_CODE) - label = request.GET.get('label', None).strip().lower() - max_tag_order = int(request.GET.get('mto', '30')) - content_count = int(request.GET.get('contentcount', '30')) - - cache_key = fix_cache_key("contentsbytag-%s"%unicode(label).encode("utf-8")) - - outputstr = cache.get(cache_key) - - if outputstr is None: - - matchtagids = [] - - contentqs = Datasheet.objects.filter(validated=True) - - no_translate_langs = [ 'fr' ] - if lang in no_translate_langs: - tagsqs = Tag.objects.filter( label__iexact = label ) - else: - tagsqs = Tag.objects.select_related('dbpedia_fields').filter(dbpedia_fields__translations__label__iexact = label, dbpedia_fields__translations__language_code=lang) - - contentqs = contentqs.select_related('taggedsheet__tag').filter(taggedsheet__tag__in=tagsqs).distinct() - - cont_count = contentqs.count() - - contenus = dict([(content.id, {'score' : 0, 'tags' : [], 'id':content.id, 'title': content.title, 'description': content.description, 'url': content.url}) for content in contentqs[0:content_count]]) - contentids = contenus.keys() - - qs = DatasheetExtras.objects.select_related('insee').filter(datasheet__in = contentids) - for dse in qs: - contenus[dse.datasheet_id]['coords'] = {'city_name': dse.insee.city_name, 'latitude': dse.insee.latitude, 'longitude': dse.insee.longitude} - - qs = list(TaggedSheet.objects.select_related('tag', 'tag__dbpedia_fields').filter(datasheet__in = contentids).order_by('order')) - - if lang in no_translate_langs: - translations = {} - else: - transqs = DbpediaFieldsTranslation.objects.filter(master__in = [ts.tag.dbpedia_fields for ts in qs], language_code = lang) - translations = dict([(trans.master_id,trans.label) for trans in transqs]) - - for ts in qs: - translated_label = translations.get(ts.tag.dbpedia_fields.id, ts.tag.label) if ts.tag.dbpedia_fields is not None else ts.tag.label - match_tag = ( label == translated_label.lower() ) - contenus[ts.datasheet_id]['tags'].append({'id': ts.tag.id, 'label':ts.tag.label, 'order':ts.order, 'match': match_tag , 'translated_label': translated_label}) - - if match_tag: - contenus[ts.datasheet_id]['score'] += 2*max_tag_order - ts.order - - contenus = sorted(contenus.values(),key=lambda e: -e['score']) - - output = {'count': cont_count, 'contents': contenus} - outputstr = json.dumps(output) - cache.set(cache_key, outputstr) - - return HttpResponse(content=outputstr, mimetype='application/json') - def subtree(tree): - MAX_TAG_ORDER = 8 + MAX_TAG_ORDER = 16 label = tree['label'] sub = tree.get('contents',[]) datasheets = Datasheet.objects.filter(validated = True, taggedsheet__tag__label__iexact = label, taggedsheet__order__lte = MAX_TAG_ORDER).annotate(tagorder=Min('taggedsheet__order')).select_related('organisation').distinct() - contents = [{ 'description': ds.description, 'title': ds.title, 'url': ds.url, 'score': MAX_TAG_ORDER - ds.tagorder, 'id': ds.id, 'hda_id': ds.hda_id, 'organization': ds.organisation.name } for ds in datasheets] + contents = [{ 'description': ds.description, 'title': ds.title, 'url': ds.url, 'score': int((MAX_TAG_ORDER - ds.tagorder)/2), 'id': ds.id, 'hda_id': ds.hda_id, 'organization': ds.organisation.name } for ds in datasheets] contents = sorted(contents, key=lambda e: -e['score'])