src/ldt/ldt/ldt_utils/views/json.py
author cavaliet
Fri, 14 Dec 2012 17:48:30 +0100
changeset 1030 581c7906ebb4
parent 1025 fc3d5e88cd45
child 1031 04f8cf193221
permissions -rw-r--r--
enable remove unused annotations in mashupbytag
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
713
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
     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
32a878a71a80 Users arrive in front pages by default + bugfixes
verrierj
parents: 482
diff changeset
     3
from django.http import HttpResponse, HttpResponseForbidden
319
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
     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 _
319
c45aed3c7a89 Remove unused imports in views
verrierj
parents: 315
diff changeset
     8
from ldt.ldt_utils.models import Project
886
3ccedd271e36 add to_cinelab serializer to api
cavaliet
parents: 754
diff changeset
     9
from ldt.ldt_utils.projectserializer import ProjectJsonSerializer
730
38993be55b2b search_ldt factorization and correct template.
cavaliet
parents: 722
diff changeset
    10
from ldt.ldt_utils.searchutils import search_generate_ldt
1025
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
    11
from operator import itemgetter
713
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    12
from datetime import datetime
504
32a878a71a80 Users arrive in front pages by default + bugfixes
verrierj
parents: 482
diff changeset
    13
import ldt.auth as ldt_auth
713
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    14
import lxml.etree
1025
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
    15
import logging
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    16
386
4539db96ec75 Merge issues
verrierj
parents: 382
diff changeset
    17
315
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    18
def project_json_id(request, id): 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    19
    
404
4adc42ab55fd Fix minor bugs
verrierj
parents: 392
diff changeset
    20
    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
    21
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    22
    return project_json(request, project, False)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    23
366
5bd7937ea1d7 Add view to select first cutting in json
verrierj
parents: 319
diff changeset
    24
def project_json_cutting_id(request, id, cutting_id):
5bd7937ea1d7 Add view to select first cutting in json
verrierj
parents: 319
diff changeset
    25
404
4adc42ab55fd Fix minor bugs
verrierj
parents: 392
diff changeset
    26
    project = get_object_or_404(Project.safe_objects, ldt_id=id)
366
5bd7937ea1d7 Add view to select first cutting in json
verrierj
parents: 319
diff changeset
    27
5bd7937ea1d7 Add view to select first cutting in json
verrierj
parents: 319
diff changeset
    28
    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
    29
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    30
def project_json_externalid(request, id): 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    31
        
404
4adc42ab55fd Fix minor bugs
verrierj
parents: 392
diff changeset
    32
    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
    33
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    34
    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
    35
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    36
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    37
382
123b89cf599e Search results are clickable
verrierj
parents: 366
diff changeset
    38
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
    39
    
504
32a878a71a80 Users arrive in front pages by default + bugfixes
verrierj
parents: 482
diff changeset
    40
    if not ldt_auth.check_access(request.user, project):
32a878a71a80 Users arrive in front pages by default + bugfixes
verrierj
parents: 482
diff changeset
    41
        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
    42
        
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    43
    mimetype = request.REQUEST.get("mimetype")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    44
    if mimetype is None:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    45
        mimetype = "application/json; charset=utf-8"
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    46
    else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    47
        mimetype = mimetype.encode("utf-8")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    48
    if "charset" not in mimetype:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    49
        mimetype += "; charset=utf-8" 
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    50
    resp = HttpResponse(mimetype=mimetype)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    51
    resp['Cache-Control'] = 'no-cache, must-revalidate'
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    52
    resp['Pragma'] = 'no-cache'
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    53
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    54
    indent = request.REQUEST.get("indent")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    55
    if indent is None:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    56
        indent = settings.LDT_JSON_DEFAULT_INDENT
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    57
    else:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    58
        indent = int(indent)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    59
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    60
    callback = request.REQUEST.get("callback")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    61
    escape_str = request.REQUEST.get("escape")
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    62
    escape_bool = False
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    63
    if escape_str:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    64
        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
    65
        
382
123b89cf599e Search results are clickable
verrierj
parents: 366
diff changeset
    66
        
886
3ccedd271e36 add to_cinelab serializer to api
cavaliet
parents: 754
diff changeset
    67
    ps = ProjectJsonSerializer(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
    68
    project_dict = ps.serialize_to_cinelab()
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    69
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    70
    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
    71
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    72
    if callback is not None:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    73
        json_str = "%s(%s)" % (callback, json_str)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    74
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    75
    if escape_bool:
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    76
        json_str = escape(json_str)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    77
    
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    78
    resp.write(json_str)
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    79
877f89ec1efa Split big views.py files into several views grouped by "make sense".
cavaliet
parents:
diff changeset
    80
    return resp
713
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    81
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    82
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    83
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    84
def mashup_by_tag(request):
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    85
    # do we indent ?
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    86
    indent = request.REQUEST.get("indent")
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    87
    if indent is None:
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    88
        indent = settings.LDT_JSON_DEFAULT_INDENT
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    89
    else:
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    90
        indent = int(indent)
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    91
    # do we escape ?
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    92
    escape_str = request.REQUEST.get("escape")
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    93
    escape_bool = False
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    94
    if escape_str:
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    95
        escape_bool = {'true': True, 'false': False, "0": False, "1": True}.get(escape_str.lower())
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    96
    
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    97
    # We search
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
    98
    s = request.REQUEST.get("tag")
1025
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
    99
    sort_type = request.REQUEST.get("sort", "")
713
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   100
    if s:
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   101
        # We get the projects with all the segments
730
38993be55b2b search_ldt factorization and correct template.
cavaliet
parents: 722
diff changeset
   102
        project_xml, results = search_generate_ldt(request, "tags", s, False)
713
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   103
        project = Project()
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   104
        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
   105
        # Needed datas for jsonification
a25d344cb446 second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents: 713
diff changeset
   106
        now = datetime.now()
a25d344cb446 second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents: 713
diff changeset
   107
        project.modification_date = project.creation_date = now
713
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   108
        #return HttpResponse(lxml.etree.tostring(project_xml, pretty_print=True), mimetype="text/xml;charset=utf-8")
886
3ccedd271e36 add to_cinelab serializer to api
cavaliet
parents: 754
diff changeset
   109
        ps = ProjectJsonSerializer(project, from_contents=False)
713
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   110
        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
   111
        # 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
   112
        if results:
a25d344cb446 second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents: 713
diff changeset
   113
            tc_in = 0
a25d344cb446 second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents: 713
diff changeset
   114
            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
   115
                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
   116
            tc_out = float('inf')
a25d344cb446 second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents: 713
diff changeset
   117
            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
   118
                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
   119
            # 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
   120
            mashup_list = {
a25d344cb446 second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents: 713
diff changeset
   121
                "items": [],
a25d344cb446 second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents: 713
diff changeset
   122
                "meta": {
a25d344cb446 second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents: 713
diff changeset
   123
                    "dc:contributor": "IRI",
a25d344cb446 second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents: 713
diff changeset
   124
                    "dc:creator": "IRI",
a25d344cb446 second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents: 713
diff changeset
   125
                    "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
   126
                    "dc:modified": now.isoformat(),
a25d344cb446 second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents: 713
diff changeset
   127
                    "dc:created": now.isoformat(),
a25d344cb446 second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents: 713
diff changeset
   128
                    "listtype": "mashup",
a25d344cb446 second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents: 713
diff changeset
   129
                    "dc:description": ""
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
                "id": "generated_mashup_list"
a25d344cb446 second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents: 713
diff changeset
   132
            }
1025
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   133
            # If sort_type = weight, we sort the result by the tag's weight
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   134
            if sort_type.lower() == "weight":
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   135
                # First we turn each string timecode to a float
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   136
                for res in results:
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   137
                    res["start_ts"] = float(res["start_ts"])
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   138
                    res["duration"] = float(res["duration"])
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   139
                # We sort to group by start_ts for each media/iri_id
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   140
                sorted_results = sorted(results, key=itemgetter("iri_id", "start_ts", "duration"))
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   141
                highest_weighted = []
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   142
                current_weight = 1
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   143
                nb_res = len(sorted_results)
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   144
                for i, res in enumerate(sorted_results):
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   145
                    # Explanation : we calculate the weight, which is the number of segments 
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   146
                    # tagged with the searched tag for the same iri_id at the same start_ts.
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   147
                    # Thanks to the previous sort, the last segment is the one with the longest duration and the one we finally keep
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   148
                    next_res = None
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   149
                    if i<(nb_res-1):
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   150
                        next_res = sorted_results[i+1]
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   151
                    if next_res and next_res["iri_id"]==res["iri_id"] and next_res["start_ts"]==res["start_ts"]:
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   152
                        current_weight += 1
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   153
                        continue
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   154
                    res["weight"] = current_weight
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   155
                    highest_weighted.append(res)
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   156
                    current_weight = 1
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   157
                
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   158
                # Now that we have the weight for all temporal segments, we just have to sort the array.
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   159
                highest_weighted = sorted(highest_weighted, key=itemgetter("weight"), reverse=True)
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   160
                for res in highest_weighted:
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   161
                    cur_in = res["start_ts"]
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   162
                    cur_out = cur_in + res["duration"]
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   163
                    if tc_in<=cur_in and cur_out<=tc_out:
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   164
                        #mashup_list["items"].append(res["iri_id"] + ", " + res["element_id"] + ", " + str(res["start_ts"]) + ", " + str(res["duration"]) + ", " + str(res["weight"]))
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   165
                        mashup_list["items"].append(res["element_id"])
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   166
            else:
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   167
                # no particular sorting
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   168
                for res in results:
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   169
                    cur_in = float(res["start_ts"])
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   170
                    cur_out = cur_in + float(res["duration"])
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   171
                    if tc_in<=cur_in and cur_out<=tc_out:
fc3d5e88cd45 sort by weight for mashupbytag
cavaliet
parents: 886
diff changeset
   172
                        mashup_list["items"].append(res["element_id"])
714
a25d344cb446 second step for mashup json (works fine but does not sort mashup by weight).
cavaliet
parents: 713
diff changeset
   173
            mashup_dict["lists"].append(mashup_list)
713
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   174
    
1030
581c7906ebb4 enable remove unused annotations in mashupbytag
cavaliet
parents: 1025
diff changeset
   175
            # If asked, we remove the annotations not used in the mashup.
581c7906ebb4 enable remove unused annotations in mashupbytag
cavaliet
parents: 1025
diff changeset
   176
            # It enabled a lighter response 
581c7906ebb4 enable remove unused annotations in mashupbytag
cavaliet
parents: 1025
diff changeset
   177
            remove_not_used_str = request.REQUEST.get("removenotused")
581c7906ebb4 enable remove unused annotations in mashupbytag
cavaliet
parents: 1025
diff changeset
   178
            remove_not_used = False
581c7906ebb4 enable remove unused annotations in mashupbytag
cavaliet
parents: 1025
diff changeset
   179
            if remove_not_used_str:
581c7906ebb4 enable remove unused annotations in mashupbytag
cavaliet
parents: 1025
diff changeset
   180
                remove_not_used = {'true': True, 'false': False, "0": False, "1": True}.get(remove_not_used_str.lower())
581c7906ebb4 enable remove unused annotations in mashupbytag
cavaliet
parents: 1025
diff changeset
   181
            if remove_not_used:
581c7906ebb4 enable remove unused annotations in mashupbytag
cavaliet
parents: 1025
diff changeset
   182
                for a in mashup_dict["annotations"]:
581c7906ebb4 enable remove unused annotations in mashupbytag
cavaliet
parents: 1025
diff changeset
   183
                    if a["id"] not in mashup_list["items"]:
581c7906ebb4 enable remove unused annotations in mashupbytag
cavaliet
parents: 1025
diff changeset
   184
                        mashup_dict["annotations"].remove(a)
581c7906ebb4 enable remove unused annotations in mashupbytag
cavaliet
parents: 1025
diff changeset
   185
    
581c7906ebb4 enable remove unused annotations in mashupbytag
cavaliet
parents: 1025
diff changeset
   186
    
713
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   187
    json_str = simplejson.dumps(mashup_dict, ensure_ascii=False, indent=indent)
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   188
    if escape_bool:
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   189
        json_str = escape(json_str)
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   190
    
754
3efbab60855a allow jsonp on mashupbytag.
cavaliet
parents: 730
diff changeset
   191
    # Callback to allo jsonp
3efbab60855a allow jsonp on mashupbytag.
cavaliet
parents: 730
diff changeset
   192
    callback = request.REQUEST.get("callback")
3efbab60855a allow jsonp on mashupbytag.
cavaliet
parents: 730
diff changeset
   193
    if callback is not None:
3efbab60855a allow jsonp on mashupbytag.
cavaliet
parents: 730
diff changeset
   194
        json_str = "%s(%s)" % (callback, json_str)
3efbab60855a allow jsonp on mashupbytag.
cavaliet
parents: 730
diff changeset
   195
    
713
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   196
    resp = HttpResponse(mimetype="application/json; charset=utf-8")
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   197
    resp['Cache-Control'] = 'no-cache, must-revalidate'
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   198
    resp['Pragma'] = 'no-cache'
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   199
    resp.write(json_str)
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   200
    
202fb1255d8b first step for mashup json.
cavaliet
parents: 691
diff changeset
   201
    return resp