|
5
|
1 |
# Create your views here. |
|
|
2 |
from django.http import HttpResponse, HttpResponseRedirect |
|
13
|
3 |
from django.shortcuts import render_to_response, get_object_or_404 |
|
5
|
4 |
from django.core.urlresolvers import reverse |
|
|
5 |
from django.template import RequestContext, TemplateDoesNotExist |
|
|
6 |
from django.template.loader import get_template |
|
|
7 |
from django.core import serializers |
|
|
8 |
from django.core.serializers.json import DjangoJSONEncoder |
|
|
9 |
from django.utils import simplejson |
|
16
|
10 |
from django.conf import settings |
|
5
|
11 |
|
|
16
|
12 |
from blinkster.ldt.models import Segment |
|
|
13 |
from blinkster.ldt.utils import LdtSearch |
|
11
|
14 |
from blinkster.models import Roi, Poi |
|
5
|
15 |
import blinkster |
|
16
|
16 |
import re |
|
|
17 |
import urllib2 |
|
5
|
18 |
|
|
16
|
19 |
def serialize_queryset_to_json(response, obj_list, extra=None): |
|
5
|
20 |
objs = { |
|
|
21 |
"version" : blinkster.VERSION, |
|
13
|
22 |
"list" : obj_list, |
|
5
|
23 |
} |
|
16
|
24 |
if extra: |
|
|
25 |
objs = dict(objs, **extra) |
|
|
26 |
|
|
5
|
27 |
simplejson.dump(objs, response, cls=DjangoJSONEncoder,ensure_ascii=False, indent=4) |
|
|
28 |
return response |
|
11
|
29 |
|
|
|
30 |
def roi_list(request): |
|
13
|
31 |
|
|
|
32 |
content_type = request.GET.get("content-type", "application/json; charset=utf-8") |
|
|
33 |
|
|
|
34 |
response = HttpResponse(content_type=str(content_type)) |
|
16
|
35 |
results = [] |
|
|
36 |
for roi_dict in [roi.serialize_to_dict() for roi in Roi.objects.all()]: |
|
|
37 |
roi_dict["poi_list_url"] = unicode(settings.WEB_URL.rstrip('/') + reverse('blinkster.views.poi_list',args=[roi_dict["sid"]])) |
|
|
38 |
results.append(roi_dict) |
|
|
39 |
|
|
|
40 |
return serialize_queryset_to_json(response, results) |
|
11
|
41 |
|
|
|
42 |
def poi_list(request, roi_sid): |
|
13
|
43 |
content_type = request.GET.get("content-type", "application/json; charset=utf-8") |
|
|
44 |
response = HttpResponse(content_type=str(content_type)) |
|
|
45 |
roi = get_object_or_404(Roi, sid=roi_sid) |
|
16
|
46 |
results = [] |
|
|
47 |
for poi_dict in [poi.serialize_to_dict() for poi in Poi.objects.filter(roi=roi)]: |
|
|
48 |
poi_dict["segment_search_url"] = unicode(settings.WEB_URL.rstrip('/') + reverse('blinkster.views.segment_search_get',args=[u"tags",u"or",urllib2.quote(poi_dict["tags"].encode("utf-8"))])) |
|
|
49 |
results.append(poi_dict) |
|
|
50 |
return serialize_queryset_to_json(response, results) |
|
|
51 |
|
|
|
52 |
# Display segment detail. |
|
|
53 |
# This will have to be moved to ldt module |
|
|
54 |
def segment_detail(request, iri_id, ensemble_id, cutting_id, element_id, project_id = None): |
|
|
55 |
|
|
|
56 |
segment = get_object_or_404(Segment, project_id=project_id, iri_id=iri_id, ensemble_id=ensemble_id, cutting_id=cutting_id, element_id=element_id) |
|
|
57 |
return render_to_response("segment_detail.html",{'segment':segment}, context_instance=RequestContext(request)) |
|
|
58 |
|
|
|
59 |
def segment_search_post(request): |
|
|
60 |
query = request.POST["query"] |
|
|
61 |
field = request.POST["field"] |
|
|
62 |
operator = request.POST["operator"] |
|
|
63 |
return segment_search_get(request, query, field, operator) |
|
|
64 |
|
|
|
65 |
def segment_search_get(request, query, field = u"tags", operator=u"or"): |
|
|
66 |
|
|
|
67 |
|
|
|
68 |
content_type = request.GET.get("content-type", "application/json; charset=utf-8") |
|
|
69 |
|
|
|
70 |
response = HttpResponse(content_type=str(content_type)) |
|
|
71 |
|
|
|
72 |
# transform tag1, tag2, tag3 in "tag1" OR "tag2" OR "tag3" |
|
|
73 |
query_str = (u" " + operator.upper() + u" ").join(["\"" + t.strip() + "\"" for t in re.split("\,|\;",query)]) |
|
|
74 |
|
|
|
75 |
|
|
|
76 |
searcher = blinkster.ldt.utils.LdtSearch() |
|
|
77 |
index_results = searcher.query(field, query_str) |
|
|
78 |
|
|
|
79 |
results = [] |
|
|
80 |
|
|
|
81 |
for index_res in index_results: |
|
|
82 |
res = dict(index_res) |
|
|
83 |
segs = Segment.objects.filter(iri_id=index_res["iri_id"], element_id=index_res["element_id"], cutting_id=index_res["decoupage_id"], ensemble_id=index_res["ensemble_id"]).values() |
|
|
84 |
for seg in segs: |
|
|
85 |
del seg["project_obj_id"] |
|
|
86 |
del seg["content_id"] |
|
|
87 |
del seg["id"] |
|
|
88 |
res = dict(res, **seg) |
|
|
89 |
res["segment_detail_url"] = unicode(settings.WEB_URL.rstrip('/') + reverse('blinkster.views.segment_detail',args=[res["iri_id"], res["ensemble_id"], res["cutting_id"], res["element_id"]])) |
|
|
90 |
results.append(res) |
|
|
91 |
|
|
|
92 |
return serialize_queryset_to_json(response, results, {u"query" : query, u"field": field, u"operator":operator, u"final_query": query_str}) |