| author | ndurand |
| Thu, 02 Apr 2015 17:29:54 +0200 | |
| changeset 1361 | 5087560b51b6 |
| parent 1316 | 94e317204c4a |
| permissions | -rw-r--r-- |
| 713 | 1 |
# -*- coding: utf-8 -*- |
|
1361
5087560b51b6
Upgrade to Django 1.6: reworked and fixed tests and deprecations
ndurand
parents:
1316
diff
changeset
|
2 |
from datetime import datetime |
|
5087560b51b6
Upgrade to Django 1.6: reworked and fixed tests and deprecations
ndurand
parents:
1316
diff
changeset
|
3 |
import json |
|
5087560b51b6
Upgrade to Django 1.6: reworked and fixed tests and deprecations
ndurand
parents:
1316
diff
changeset
|
4 |
import logging |
|
5087560b51b6
Upgrade to Django 1.6: reworked and fixed tests and deprecations
ndurand
parents:
1316
diff
changeset
|
5 |
import lxml.etree |
|
5087560b51b6
Upgrade to Django 1.6: reworked and fixed tests and deprecations
ndurand
parents:
1316
diff
changeset
|
6 |
from operator import itemgetter |
|
5087560b51b6
Upgrade to Django 1.6: reworked and fixed tests and deprecations
ndurand
parents:
1316
diff
changeset
|
7 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
8 |
from django.conf import settings |
| 504 | 9 |
from django.http import HttpResponse, HttpResponseForbidden |
| 319 | 10 |
from django.shortcuts import get_object_or_404, get_list_or_404 |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
11 |
from django.utils.html import escape |
|
691
ff0b66633807
update project serializer for it to serialize the first bout à bout of a ldt project.
cavaliet
parents:
504
diff
changeset
|
12 |
from django.utils.translation import ugettext as _ |
|
1361
5087560b51b6
Upgrade to Django 1.6: reworked and fixed tests and deprecations
ndurand
parents:
1316
diff
changeset
|
13 |
|
|
5087560b51b6
Upgrade to Django 1.6: reworked and fixed tests and deprecations
ndurand
parents:
1316
diff
changeset
|
14 |
import ldt.auth as ldt_auth |
| 319 | 15 |
from ldt.ldt_utils.models import Project |
| 886 | 16 |
from ldt.ldt_utils.projectserializer import ProjectJsonSerializer |
| 730 | 17 |
from ldt.ldt_utils.searchutils import search_generate_ldt |
|
1361
5087560b51b6
Upgrade to Django 1.6: reworked and fixed tests and deprecations
ndurand
parents:
1316
diff
changeset
|
18 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
19 |
|
| 1093 | 20 |
logger = logging.getLogger(__name__) |
21 |
||
| 386 | 22 |
|
|
1190
129d45eec68c
Clean warning and errors for Django 1.5
ymh <ymh.work@gmail.com>
parents:
1093
diff
changeset
|
23 |
def project_json_id(request, id): # @ReservedAssignment |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
24 |
|
|
1215
125ea12cce61
temporary modif removed and version number to 1.50.4
cavaliet
parents:
1209
diff
changeset
|
25 |
project = get_object_or_404(Project.safe_objects, ldt_id=id) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
26 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
27 |
return project_json(request, project, False) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
28 |
|
|
1190
129d45eec68c
Clean warning and errors for Django 1.5
ymh <ymh.work@gmail.com>
parents:
1093
diff
changeset
|
29 |
def project_json_cutting_id(request, id, cutting_id): # @ReservedAssignment |
| 366 | 30 |
|
| 404 | 31 |
project = get_object_or_404(Project.safe_objects, ldt_id=id) |
| 366 | 32 |
|
33 |
return project_json(request, project, first_cutting=cutting_id) |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
34 |
|
|
1190
129d45eec68c
Clean warning and errors for Django 1.5
ymh <ymh.work@gmail.com>
parents:
1093
diff
changeset
|
35 |
def project_json_externalid(request, id): # @ReservedAssignment |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
36 |
|
|
1190
129d45eec68c
Clean warning and errors for Django 1.5
ymh <ymh.work@gmail.com>
parents:
1093
diff
changeset
|
37 |
res_proj = get_list_or_404(Project.safe_objects.order_by('-modification_date'), contents__external_id=id) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
38 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
39 |
return project_json(request, res_proj[0], False) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
40 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
41 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
42 |
|
| 382 | 43 |
def project_json(request, project, serialize_contents=True, first_cutting=None): |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
44 |
|
| 504 | 45 |
if not ldt_auth.check_access(request.user, project): |
46 |
return HttpResponseForbidden(_("You can not access this project")) |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
47 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
48 |
mimetype = request.REQUEST.get("mimetype") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
49 |
if mimetype is None: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
50 |
mimetype = "application/json; charset=utf-8" |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
51 |
else: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
52 |
mimetype = mimetype.encode("utf-8") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
53 |
if "charset" not in mimetype: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
54 |
mimetype += "; charset=utf-8" |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
55 |
resp = HttpResponse(mimetype=mimetype) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
56 |
resp['Cache-Control'] = 'no-cache, must-revalidate' |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
57 |
resp['Pragma'] = 'no-cache' |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
58 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
59 |
indent = request.REQUEST.get("indent") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
60 |
if indent is None: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
61 |
indent = settings.LDT_JSON_DEFAULT_INDENT |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
62 |
else: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
63 |
indent = int(indent) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
64 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
65 |
callback = request.REQUEST.get("callback") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
66 |
escape_str = request.REQUEST.get("escape") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
67 |
escape_bool = False |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
68 |
if escape_str: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
69 |
escape_bool = {'true': True, 'false': False, "0": False, "1": True}.get(escape_str.lower()) |
|
1316
94e317204c4a
v1.53.8 : enhance json generation when for one media
cavaliet
parents:
1215
diff
changeset
|
70 |
|
|
94e317204c4a
v1.53.8 : enhance json generation when for one media
cavaliet
parents:
1215
diff
changeset
|
71 |
one_content_str = request.REQUEST.get("onecontent") |
|
94e317204c4a
v1.53.8 : enhance json generation when for one media
cavaliet
parents:
1215
diff
changeset
|
72 |
one_content_bool = False |
|
94e317204c4a
v1.53.8 : enhance json generation when for one media
cavaliet
parents:
1215
diff
changeset
|
73 |
if one_content_str: |
|
94e317204c4a
v1.53.8 : enhance json generation when for one media
cavaliet
parents:
1215
diff
changeset
|
74 |
one_content_bool = {'true': True, 'false': False, "0": False, "1": True}.get(one_content_str.lower()) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
75 |
|
| 382 | 76 |
|
| 886 | 77 |
ps = ProjectJsonSerializer(project, serialize_contents, first_cutting=first_cutting) |
|
1316
94e317204c4a
v1.53.8 : enhance json generation when for one media
cavaliet
parents:
1215
diff
changeset
|
78 |
project_dict = ps.serialize_to_cinelab(one_content_bool) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
79 |
|
|
1361
5087560b51b6
Upgrade to Django 1.6: reworked and fixed tests and deprecations
ndurand
parents:
1316
diff
changeset
|
80 |
json_str = json.dumps(project_dict, ensure_ascii=False, indent=indent) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
81 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
82 |
if callback is not None: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
83 |
json_str = "%s(%s)" % (callback, json_str) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
84 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
85 |
if escape_bool: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
86 |
json_str = escape(json_str) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
87 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
88 |
resp.write(json_str) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
89 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
90 |
return resp |
| 713 | 91 |
|
92 |
||
93 |
||
94 |
def mashup_by_tag(request): |
|
95 |
# do we indent ? |
|
96 |
indent = request.REQUEST.get("indent") |
|
97 |
if indent is None: |
|
98 |
indent = settings.LDT_JSON_DEFAULT_INDENT |
|
99 |
else: |
|
100 |
indent = int(indent) |
|
101 |
# do we escape ? |
|
102 |
escape_str = request.REQUEST.get("escape") |
|
103 |
escape_bool = False |
|
104 |
if escape_str: |
|
105 |
escape_bool = {'true': True, 'false': False, "0": False, "1": True}.get(escape_str.lower()) |
|
|
1031
04f8cf193221
remove zero duration annotations parameter added in mashupbytag.
cavaliet
parents:
1030
diff
changeset
|
106 |
# do we remove annotations from mashup if the have duration=0 ? (yes by default) |
|
04f8cf193221
remove zero duration annotations parameter added in mashupbytag.
cavaliet
parents:
1030
diff
changeset
|
107 |
remove_zero_dur_str = request.REQUEST.get("removezeroduration") |
|
04f8cf193221
remove zero duration annotations parameter added in mashupbytag.
cavaliet
parents:
1030
diff
changeset
|
108 |
remove_zero_dur = True |
|
04f8cf193221
remove zero duration annotations parameter added in mashupbytag.
cavaliet
parents:
1030
diff
changeset
|
109 |
if remove_zero_dur_str: |
|
04f8cf193221
remove zero duration annotations parameter added in mashupbytag.
cavaliet
parents:
1030
diff
changeset
|
110 |
remove_zero_dur = {'true': True, 'false': False, "0": False, "1": True}.get(remove_zero_dur_str.lower()) |
| 713 | 111 |
|
112 |
# We search |
|
113 |
s = request.REQUEST.get("tag") |
|
| 1025 | 114 |
sort_type = request.REQUEST.get("sort", "") |
| 713 | 115 |
if s: |
116 |
# We get the projects with all the segments |
|
| 730 | 117 |
project_xml, results = search_generate_ldt(request, "tags", s, False) |
| 1093 | 118 |
|
119 |
logger.debug("mashup_by_tag : search_generate_ldt done") |
|
120 |
||
| 713 | 121 |
project = Project() |
122 |
project.ldt = lxml.etree.tostring(project_xml, pretty_print=True) |
|
|
714
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
123 |
# Needed datas for jsonification |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
124 |
now = datetime.now() |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
125 |
project.modification_date = project.creation_date = now |
| 713 | 126 |
#return HttpResponse(lxml.etree.tostring(project_xml, pretty_print=True), mimetype="text/xml;charset=utf-8") |
| 1093 | 127 |
logger.debug("mashup_by_tag : serialize_to_cinelab prepare") |
128 |
||
| 886 | 129 |
ps = ProjectJsonSerializer(project, from_contents=False) |
| 1093 | 130 |
logger.debug("mashup_by_tag : serialize_to_cinelab serializer ready") |
| 713 | 131 |
mashup_dict = ps.serialize_to_cinelab() |
| 1093 | 132 |
|
133 |
logger.debug("mashup_by_tag : serialize_to_cinelab done") |
|
134 |
||
|
714
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
135 |
# Now we build the mashup with the good segments (the ones between in and out) |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
136 |
if results: |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
137 |
tc_in = 0 |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
138 |
if request.REQUEST.get("in") : |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
139 |
tc_in = float(request.REQUEST.get("in")) |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
140 |
tc_out = float('inf') |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
141 |
if request.REQUEST.get("out") : |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
142 |
tc_out = float(request.REQUEST.get("out")) |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
143 |
# Since the timecodes are saved as strings, we filter after calculating float in and out. Timecodes are in milliseconds |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
144 |
mashup_list = { |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
145 |
"items": [], |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
146 |
"meta": { |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
147 |
"dc:contributor": "IRI", |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
148 |
"dc:creator": "IRI", |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
149 |
"dc:title": "Generated mashup with tag '"+s+"'", |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
150 |
"dc:modified": now.isoformat(), |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
151 |
"dc:created": now.isoformat(), |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
152 |
"listtype": "mashup", |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
153 |
"dc:description": "" |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
154 |
}, |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
155 |
"id": "generated_mashup_list" |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
156 |
} |
| 1025 | 157 |
# If sort_type = weight, we sort the result by the tag's weight |
158 |
if sort_type.lower() == "weight": |
|
159 |
# First we turn each string timecode to a float |
|
160 |
for res in results: |
|
161 |
res["start_ts"] = float(res["start_ts"]) |
|
162 |
res["duration"] = float(res["duration"]) |
|
163 |
# We sort to group by start_ts for each media/iri_id |
|
164 |
sorted_results = sorted(results, key=itemgetter("iri_id", "start_ts", "duration")) |
|
165 |
highest_weighted = [] |
|
166 |
current_weight = 1 |
|
167 |
nb_res = len(sorted_results) |
|
168 |
for i, res in enumerate(sorted_results): |
|
169 |
# Explanation : we calculate the weight, which is the number of segments |
|
170 |
# tagged with the searched tag for the same iri_id at the same start_ts. |
|
171 |
# Thanks to the previous sort, the last segment is the one with the longest duration and the one we finally keep |
|
172 |
next_res = None |
|
173 |
if i<(nb_res-1): |
|
174 |
next_res = sorted_results[i+1] |
|
175 |
if next_res and next_res["iri_id"]==res["iri_id"] and next_res["start_ts"]==res["start_ts"]: |
|
176 |
current_weight += 1 |
|
177 |
continue |
|
178 |
res["weight"] = current_weight |
|
179 |
highest_weighted.append(res) |
|
180 |
current_weight = 1 |
|
181 |
||
182 |
# Now that we have the weight for all temporal segments, we just have to sort the array. |
|
| 1055 | 183 |
highest_weighted = sorted(highest_weighted, key=itemgetter("weight"), reverse=True) |
| 1025 | 184 |
for res in highest_weighted: |
185 |
cur_in = res["start_ts"] |
|
186 |
cur_out = cur_in + res["duration"] |
|
| 1054 | 187 |
if tc_in<=cur_in and cur_out<=tc_out and ((not remove_zero_dur) or (remove_zero_dur and res["duration"]>0.0)) and (res["element_id"] not in mashup_list["items"]): |
| 1025 | 188 |
#mashup_list["items"].append(res["iri_id"] + ", " + res["element_id"] + ", " + str(res["start_ts"]) + ", " + str(res["duration"]) + ", " + str(res["weight"])) |
| 1050 | 189 |
#mashup_list["items"].append(res["element_id"] + ", " + str(res["weight"]) + ", " + res["title"]) |
| 1025 | 190 |
mashup_list["items"].append(res["element_id"]) |
191 |
else: |
|
192 |
# no particular sorting |
|
193 |
for res in results: |
|
194 |
cur_in = float(res["start_ts"]) |
|
|
1031
04f8cf193221
remove zero duration annotations parameter added in mashupbytag.
cavaliet
parents:
1030
diff
changeset
|
195 |
dur = float(res["duration"]) |
|
04f8cf193221
remove zero duration annotations parameter added in mashupbytag.
cavaliet
parents:
1030
diff
changeset
|
196 |
cur_out = cur_in + dur |
|
04f8cf193221
remove zero duration annotations parameter added in mashupbytag.
cavaliet
parents:
1030
diff
changeset
|
197 |
if tc_in<=cur_in and cur_out<=tc_out and ((not remove_zero_dur) or (remove_zero_dur and dur>0.0)): |
| 1025 | 198 |
mashup_list["items"].append(res["element_id"]) |
|
1076
a11c8dba822e
correct add_segment in annotation api. version number upgraded to 1.46.
cavaliet
parents:
1056
diff
changeset
|
199 |
if mashup_dict["lists"] is None: |
|
a11c8dba822e
correct add_segment in annotation api. version number upgraded to 1.46.
cavaliet
parents:
1056
diff
changeset
|
200 |
mashup_dict["lists"] = [] |
|
714
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
201 |
mashup_dict["lists"].append(mashup_list) |
| 713 | 202 |
|
| 1030 | 203 |
# If asked, we remove the annotations not used in the mashup. |
204 |
# It enabled a lighter response |
|
205 |
remove_not_used_str = request.REQUEST.get("removenotused") |
|
206 |
remove_not_used = False |
|
207 |
if remove_not_used_str: |
|
208 |
remove_not_used = {'true': True, 'false': False, "0": False, "1": True}.get(remove_not_used_str.lower()) |
|
209 |
if remove_not_used: |
|
210 |
for a in mashup_dict["annotations"]: |
|
211 |
if a["id"] not in mashup_list["items"]: |
|
212 |
mashup_dict["annotations"].remove(a) |
|
213 |
||
214 |
||
|
1361
5087560b51b6
Upgrade to Django 1.6: reworked and fixed tests and deprecations
ndurand
parents:
1316
diff
changeset
|
215 |
json_str = json.dumps(mashup_dict, ensure_ascii=False, indent=indent) |
| 713 | 216 |
if escape_bool: |
217 |
json_str = escape(json_str) |
|
218 |
||
| 754 | 219 |
# Callback to allo jsonp |
220 |
callback = request.REQUEST.get("callback") |
|
221 |
if callback is not None: |
|
222 |
json_str = "%s(%s)" % (callback, json_str) |
|
223 |
||
| 713 | 224 |
resp = HttpResponse(mimetype="application/json; charset=utf-8") |
225 |
resp.write(json_str) |
|
226 |
||
227 |
return resp |