| author | cavaliet |
| Mon, 27 Aug 2012 12:59:34 +0200 | |
| changeset 754 | 3efbab60855a |
| parent 730 | 38993be55b2b |
| child 886 | 3ccedd271e36 |
| permissions | -rw-r--r-- |
| 713 | 1 |
# -*- coding: utf-8 -*- |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
2 |
from django.conf import settings |
| 504 | 3 |
from django.http import HttpResponse, HttpResponseForbidden |
| 319 | 4 |
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
|
5 |
from django.utils import simplejson |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
6 |
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
|
7 |
from django.utils.translation import ugettext as _ |
| 713 | 8 |
from ldt.indexation import get_results_with_context |
| 319 | 9 |
from ldt.ldt_utils.models import Project |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
10 |
from ldt.ldt_utils.projectserializer import ProjectSerializer |
| 730 | 11 |
from ldt.ldt_utils.searchutils import search_generate_ldt |
| 713 | 12 |
from datetime import datetime |
| 504 | 13 |
import ldt.auth as ldt_auth |
| 713 | 14 |
import lxml.etree |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
15 |
|
| 386 | 16 |
|
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
17 |
def project_json_id(request, id): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
18 |
|
| 404 | 19 |
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
|
20 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
21 |
return project_json(request, project, False) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
22 |
|
| 366 | 23 |
def project_json_cutting_id(request, id, cutting_id): |
24 |
||
| 404 | 25 |
project = get_object_or_404(Project.safe_objects, ldt_id=id) |
| 366 | 26 |
|
27 |
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
|
28 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
29 |
def project_json_externalid(request, id): |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
30 |
|
| 404 | 31 |
res_proj = get_list_or_404(Project.safe_objects.order_by('-modification_date'), contents__external_id=id) #@UndefinedVariable |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
32 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
33 |
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
|
34 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
35 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
36 |
|
| 382 | 37 |
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
|
38 |
|
| 504 | 39 |
if not ldt_auth.check_access(request.user, project): |
40 |
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
|
41 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
42 |
mimetype = request.REQUEST.get("mimetype") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
43 |
if mimetype is None: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
44 |
mimetype = "application/json; charset=utf-8" |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
45 |
else: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
46 |
mimetype = mimetype.encode("utf-8") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
47 |
if "charset" not in mimetype: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
48 |
mimetype += "; charset=utf-8" |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
49 |
resp = HttpResponse(mimetype=mimetype) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
50 |
resp['Cache-Control'] = 'no-cache, must-revalidate' |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
51 |
resp['Pragma'] = 'no-cache' |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
52 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
53 |
indent = request.REQUEST.get("indent") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
54 |
if indent is None: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
55 |
indent = settings.LDT_JSON_DEFAULT_INDENT |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
56 |
else: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
57 |
indent = int(indent) |
|
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 |
callback = request.REQUEST.get("callback") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
60 |
escape_str = request.REQUEST.get("escape") |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
61 |
escape_bool = False |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
62 |
if escape_str: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
63 |
escape_bool = {'true': True, 'false': False, "0": False, "1": True}.get(escape_str.lower()) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
64 |
|
| 382 | 65 |
|
| 482 | 66 |
ps = ProjectSerializer(project, serialize_contents, first_cutting=first_cutting) |
|
315
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
67 |
project_dict = ps.serialize_to_cinelab() |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
68 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
69 |
json_str = simplejson.dumps(project_dict, ensure_ascii=False, indent=indent) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
70 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
71 |
if callback is not None: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
72 |
json_str = "%s(%s)" % (callback, json_str) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
73 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
74 |
if escape_bool: |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
75 |
json_str = escape(json_str) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
76 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
77 |
resp.write(json_str) |
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
78 |
|
|
877f89ec1efa
Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff
changeset
|
79 |
return resp |
| 713 | 80 |
|
81 |
||
82 |
||
83 |
def mashup_by_tag(request): |
|
84 |
# do we indent ? |
|
85 |
indent = request.REQUEST.get("indent") |
|
86 |
if indent is None: |
|
87 |
indent = settings.LDT_JSON_DEFAULT_INDENT |
|
88 |
else: |
|
89 |
indent = int(indent) |
|
90 |
# do we escape ? |
|
91 |
escape_str = request.REQUEST.get("escape") |
|
92 |
escape_bool = False |
|
93 |
if escape_str: |
|
94 |
escape_bool = {'true': True, 'false': False, "0": False, "1": True}.get(escape_str.lower()) |
|
95 |
||
96 |
# We search |
|
97 |
s = request.REQUEST.get("tag") |
|
98 |
if s: |
|
99 |
# We get the projects with all the segments |
|
| 730 | 100 |
project_xml, results = search_generate_ldt(request, "tags", s, False) |
| 713 | 101 |
project = Project() |
102 |
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
|
103 |
# Needed datas for jsonification |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
104 |
now = datetime.now() |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
105 |
project.modification_date = project.creation_date = now |
| 713 | 106 |
#return HttpResponse(lxml.etree.tostring(project_xml, pretty_print=True), mimetype="text/xml;charset=utf-8") |
107 |
ps = ProjectSerializer(project, from_contents=False) |
|
108 |
mashup_dict = ps.serialize_to_cinelab() |
|
|
714
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
109 |
# 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
|
110 |
if results: |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
111 |
tc_in = 0 |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
112 |
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
|
113 |
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
|
114 |
tc_out = float('inf') |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
115 |
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
|
116 |
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
|
117 |
# 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
|
118 |
mashup_list = { |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
119 |
"items": [], |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
120 |
"meta": { |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
121 |
"dc:contributor": "IRI", |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
122 |
"dc:creator": "IRI", |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
123 |
"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
|
124 |
"dc:modified": now.isoformat(), |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
125 |
"dc:created": now.isoformat(), |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
126 |
"listtype": "mashup", |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
127 |
"dc:description": "" |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
128 |
}, |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
129 |
"id": "generated_mashup_list" |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
130 |
} |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
131 |
#filtered_results = [] |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
132 |
for res in results: |
| 722 | 133 |
cur_in = float(res["start_ts"]) |
|
714
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
134 |
cur_out = cur_in + float(res["duration"]) |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
135 |
if tc_in<=cur_in and cur_out<=tc_out: |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
136 |
#filtered_results.append(res) |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
137 |
mashup_list["items"].append(res["element_id"]) |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
138 |
mashup_dict["lists"].append(mashup_list) |
| 713 | 139 |
|
|
714
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
140 |
#mashup_dict["escape_bool"] = escape_bool |
|
a25d344cb446
second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents:
713
diff
changeset
|
141 |
#mashup_dict["indent"] = indent |
| 713 | 142 |
|
143 |
json_str = simplejson.dumps(mashup_dict, ensure_ascii=False, indent=indent) |
|
144 |
if escape_bool: |
|
145 |
json_str = escape(json_str) |
|
146 |
||
| 754 | 147 |
# Callback to allo jsonp |
148 |
callback = request.REQUEST.get("callback") |
|
149 |
if callback is not None: |
|
150 |
json_str = "%s(%s)" % (callback, json_str) |
|
151 |
||
| 713 | 152 |
resp = HttpResponse(mimetype="application/json; charset=utf-8") |
153 |
resp['Cache-Control'] = 'no-cache, must-revalidate' |
|
154 |
resp['Pragma'] = 'no-cache' |
|
155 |
resp.write(json_str) |
|
156 |
||
157 |
return resp |