src/spel/views.py
author cavaliet
Thu, 02 Oct 2014 10:37:44 +0200
changeset 142 34ad53eecb18
parent 137 02e81a3fc99b
child 148 62e750c7ef85
permissions -rwxr-xr-x
v0.6.2 : enhance libadvene export
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
bafbf72652b9 virtualenv first commit and structure for spel app
cavaliet
parents:
diff changeset
     1
'''
3
2581135217f2 first templates
cavaliet
parents: 2
diff changeset
     2
Created on 2014-02-21
2
bafbf72652b9 virtualenv first commit and structure for spel app
cavaliet
parents:
diff changeset
     3
3
2581135217f2 first templates
cavaliet
parents: 2
diff changeset
     4
@author: tcavalie
2
bafbf72652b9 virtualenv first commit and structure for spel app
cavaliet
parents:
diff changeset
     5
'''
106
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
     6
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
     7
from django.conf import settings
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
     8
from django.contrib.contenttypes.models import ContentType
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
     9
from django.db.models import Q
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
    10
from django.db.models.aggregates import Count
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
    11
from django.db.models.query import RawQuerySet
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
    12
from django.http.response import HttpResponse
137
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
    13
from django.shortcuts import get_object_or_404
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
    14
from django.views.generic import TemplateView, View
106
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
    15
from itertools import groupby
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
    16
from ldt.indexation import get_results_with_context
137
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
    17
from ldt.ldt_utils.models import Segment, Content, Project
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
    18
from ldt.ldt_utils.projectserializer import ProjectJsonSerializer
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
    19
from ldt.ldt_utils.views.json import project_json_id
106
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
    20
from ldt.ldt_utils.views.workspace import get_search_results
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
    21
from operator import itemgetter
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
    22
from taggit.models import Tag, TaggedItem
23
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
    23
import json
31
df2ca7a612ac enhance ref_text filter and update venv with ldt
cavaliet
parents: 30
diff changeset
    24
import re
11
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    25
import time
137
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
    26
import uuid
2
bafbf72652b9 virtualenv first commit and structure for spel app
cavaliet
parents:
diff changeset
    27
bafbf72652b9 virtualenv first commit and structure for spel app
cavaliet
parents:
diff changeset
    28
9
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    29
import logging
2
bafbf72652b9 virtualenv first commit and structure for spel app
cavaliet
parents:
diff changeset
    30
logger = logging.getLogger(__name__)
bafbf72652b9 virtualenv first commit and structure for spel app
cavaliet
parents:
diff changeset
    31
3
2581135217f2 first templates
cavaliet
parents: 2
diff changeset
    32
2
bafbf72652b9 virtualenv first commit and structure for spel app
cavaliet
parents:
diff changeset
    33
3
2581135217f2 first templates
cavaliet
parents: 2
diff changeset
    34
class Home(TemplateView):
2581135217f2 first templates
cavaliet
parents: 2
diff changeset
    35
    template_name = "spel_home.html"
11
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    36
    def get(self, request):
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    37
        context = {}
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    38
        return self.render_to_response(context)
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    39
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    40
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    41
68
4f871f986f31 v0.5.1 spectacle becomes theatre
cavaliet
parents: 65
diff changeset
    42
class Theatre(TemplateView):
4f871f986f31 v0.5.1 spectacle becomes theatre
cavaliet
parents: 65
diff changeset
    43
    template_name = "spel_theatre.html"
2
bafbf72652b9 virtualenv first commit and structure for spel app
cavaliet
parents:
diff changeset
    44
    def get(self, request):
11
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    45
        # Get start and end for date bounds (earliest is available only on django 1.6)
84
d58673e1dc90 first step for opera
cavaliet
parents: 74
diff changeset
    46
        start_date = Content.objects.filter(tags__name__in=["content_theatre"]).order_by("content_creation_date")[0].content_creation_date
d58673e1dc90 first step for opera
cavaliet
parents: 74
diff changeset
    47
        end_date = Content.objects.filter(tags__name__in=["content_theatre"]).latest("content_creation_date").content_creation_date
d58673e1dc90 first step for opera
cavaliet
parents: 74
diff changeset
    48
        context = {"start_date":start_date, "end_date":end_date }
d58673e1dc90 first step for opera
cavaliet
parents: 74
diff changeset
    49
        return self.render_to_response(context)
d58673e1dc90 first step for opera
cavaliet
parents: 74
diff changeset
    50
d58673e1dc90 first step for opera
cavaliet
parents: 74
diff changeset
    51
d58673e1dc90 first step for opera
cavaliet
parents: 74
diff changeset
    52
d58673e1dc90 first step for opera
cavaliet
parents: 74
diff changeset
    53
class Opera(TemplateView):
d58673e1dc90 first step for opera
cavaliet
parents: 74
diff changeset
    54
    template_name = "spel_opera.html"
d58673e1dc90 first step for opera
cavaliet
parents: 74
diff changeset
    55
    def get(self, request):
d58673e1dc90 first step for opera
cavaliet
parents: 74
diff changeset
    56
        # Get start and end for date bounds (earliest is available only on django 1.6)
d58673e1dc90 first step for opera
cavaliet
parents: 74
diff changeset
    57
        start_date = Content.objects.filter(tags__name__in=["content_opera"]).order_by("content_creation_date")[0].content_creation_date
d58673e1dc90 first step for opera
cavaliet
parents: 74
diff changeset
    58
        end_date = Content.objects.filter(tags__name__in=["content_opera"]).latest("content_creation_date").content_creation_date
30
301c88e40e6c enhance ref_text filter
cavaliet
parents: 29
diff changeset
    59
        context = {"start_date":start_date, "end_date":end_date }
2
bafbf72652b9 virtualenv first commit and structure for spel app
cavaliet
parents:
diff changeset
    60
        return self.render_to_response(context)
bafbf72652b9 virtualenv first commit and structure for spel app
cavaliet
parents:
diff changeset
    61
9
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    62
11
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    63
9
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    64
class ChapterRequest(TemplateView):
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    65
    
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    66
    template_name = "partial/spel_chapters.html"
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    67
    
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    68
    def get(self, request):
11
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    69
        # Filter content by date if necessary
86
ac44ba54cdeb correct theatre contents filter
cavaliet
parents: 84
diff changeset
    70
        content_qs = Content.objects.filter(tags__name__in=["content_theatre"])
11
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    71
        start_date_param = request.GET.get("start_date", "")
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    72
        if start_date_param!="":
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    73
            content_qs = content_qs.filter(content_creation_date__gt=start_date_param)
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    74
        end_date_param = request.GET.get("end_date", "")
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    75
        if end_date_param!="":
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    76
            content_qs = content_qs.filter(content_creation_date__lt=end_date_param + " 23:59:59")
e7597b102896 date limits
cavaliet
parents: 10
diff changeset
    77
        iri_ids = content_qs.values_list("iri_id", flat=True)
12
8b0cd46a0870 search chapters with dates
cavaliet
parents: 11
diff changeset
    78
        #logger.debug("iri_ids")
8b0cd46a0870 search chapters with dates
cavaliet
parents: 11
diff changeset
    79
        #logger.debug(iri_ids)
10
fbd6bb9b186a chapter annot type management
cavaliet
parents: 9
diff changeset
    80
        # Filter segment if necessary
fbd6bb9b186a chapter annot type management
cavaliet
parents: 9
diff changeset
    81
        annot_types_param = request.GET.get("annotation_types", "")
65
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
    82
        seg_queryset = Segment.objects.filter(iri_id__in=iri_ids).select_related("content__title")#.prefetch_related("tags")
22
68746521df51 chapters : remove tag by click
cavaliet
parents: 21
diff changeset
    83
        annot_types = []
10
fbd6bb9b186a chapter annot type management
cavaliet
parents: 9
diff changeset
    84
        if annot_types_param!="":
fbd6bb9b186a chapter annot type management
cavaliet
parents: 9
diff changeset
    85
            annot_types = annot_types_param.split(",")
12
8b0cd46a0870 search chapters with dates
cavaliet
parents: 11
diff changeset
    86
            seg_queryset = seg_queryset.filter(cutting_id__in=annot_types)
9
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    87
        
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    88
        # First we look at modalites_sceniques and personnages tags.
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    89
        mod_scen_param = request.GET.get("modalites_sceniques", "")
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    90
        mod_scen = []
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    91
        if mod_scen_param!="":
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    92
            mod_scen = mod_scen_param.split(",")
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    93
        perso_param = request.GET.get("personnages", "")
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    94
        perso = []
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    95
        if perso_param!="":
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    96
            perso = perso_param.split(",")
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
    97
        
29
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
    98
        # Tags from start text and end text
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
    99
        start_text = request.GET.get("start_text", "")
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   100
        end_text = request.GET.get("end_text", "")
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   101
        ref_text = None
36
db864df8fe66 v0.4 better chapter filters
cavaliet
parents: 31
diff changeset
   102
        searched_ref_text = None
29
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   103
        if (start_text!="" and start_text!="start") or (end_text!="" and end_text!="end"):
31
df2ca7a612ac enhance ref_text filter and update venv with ldt
cavaliet
parents: 30
diff changeset
   104
            # First get all ref_text values
df2ca7a612ac enhance ref_text filter and update venv with ldt
cavaliet
parents: 30
diff changeset
   105
            rt_tags = Tag.objects.filter(name__startswith="ref_text:")
df2ca7a612ac enhance ref_text filter and update venv with ldt
cavaliet
parents: 30
diff changeset
   106
            ref_text_int = []
df2ca7a612ac enhance ref_text filter and update venv with ldt
cavaliet
parents: 30
diff changeset
   107
            for rt in rt_tags:
df2ca7a612ac enhance ref_text filter and update venv with ldt
cavaliet
parents: 30
diff changeset
   108
                m = re.match(r"^(\d+)-(\d+)$", rt.name[10:])
df2ca7a612ac enhance ref_text filter and update venv with ldt
cavaliet
parents: 30
diff changeset
   109
                if m and len(m.groups())==2:
df2ca7a612ac enhance ref_text filter and update venv with ldt
cavaliet
parents: 30
diff changeset
   110
                    ref_text_int.append((int(m.group(1)), int(m.group(2))))
df2ca7a612ac enhance ref_text filter and update venv with ldt
cavaliet
parents: 30
diff changeset
   111
            ref_text_int.sort()
df2ca7a612ac enhance ref_text filter and update venv with ldt
cavaliet
parents: 30
diff changeset
   112
            all_ref_text = [(str(one) + "-" + str(two)) for (one,two) in ref_text_int]
df2ca7a612ac enhance ref_text filter and update venv with ldt
cavaliet
parents: 30
diff changeset
   113
            
29
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   114
            # At least start or end have been defined, so we search for the concerned chapter ids.
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   115
            start_index = 0
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   116
            if start_text!="start":
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   117
                try:
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   118
                    start_index = all_ref_text.index(start_text)
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   119
                except:
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   120
                    pass
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   121
            end_index = len(all_ref_text)
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   122
            if end_text!="end":
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   123
                try:
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   124
                    end_index = all_ref_text.index(end_text) + 1
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   125
                except:
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   126
                    pass
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   127
            searched_ref_text = all_ref_text[start_index:end_index]
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   128
            ref_text = Tag.objects.filter(name__in=[ ("ref_text: " + rt) for rt in searched_ref_text ])
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   129
        
9
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
   130
        # Get tags from orm
31
df2ca7a612ac enhance ref_text filter and update venv with ldt
cavaliet
parents: 30
diff changeset
   131
        all_tags = mod_scen + perso
9
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
   132
        tags = Tag.objects.filter(name__in=all_tags)
65
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   133
        # seg_queryset.filter(tags__in=tags) doesn't work because taggit finds segments with one of the tags and not ALL tags
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   134
        # So we make a correct request through TaggedItem first
29
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   135
        # Ref text filter if possible
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   136
        if ref_text and len(ref_text)>0:
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   137
            # a chapter can only have on ref_text, and the search on ref_text is a OR.
31
df2ca7a612ac enhance ref_text filter and update venv with ldt
cavaliet
parents: 30
diff changeset
   138
            # That's many requests (with the orm) but it seems the only thing possible with tagging
29
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   139
            s = []
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   140
            for rt in ref_text:
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   141
                current_tags = list(tags)
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   142
                current_tags.append(rt)
65
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   143
                #s += list(TaggedItem.objects.get_by_model(seg_queryset, current_tags))
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   144
                seg_ids = list(TaggedItem.objects\
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   145
                            .values_list("object_id", flat=True)\
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   146
                            .filter(content_type=ContentType.objects.get_for_model(Segment))\
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   147
                            .filter(tag__in=current_tags)\
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   148
                            .annotate(count_status=Count('object_id'))\
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   149
                            .filter(count_status=len(current_tags)))
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   150
                s += list(seg_queryset.filter(pk__in=seg_ids))
29
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   151
        else:
c806a643b9d7 filter by ref_text first step
cavaliet
parents: 24
diff changeset
   152
            # Get segments from tagged items
65
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   153
            #s = TaggedItem.objects.get_by_model(seg_queryset, tags)
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   154
            tags = list(tags)
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   155
            seg_ids = list(TaggedItem.objects\
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   156
                        .values_list("object_id", flat=True)\
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   157
                        .filter(content_type=ContentType.objects.get_for_model(Segment))\
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   158
                        .filter(tag__in=tags)\
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   159
                        .annotate(count_status=Count('object_id'))\
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   160
                        .filter(count_status=len(tags)))
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   161
            s = list(seg_queryset.filter(pk__in=seg_ids))
9
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
   162
        
36
db864df8fe66 v0.4 better chapter filters
cavaliet
parents: 31
diff changeset
   163
        context = {"annot_types":annot_types, "start_date":start_date_param, "end_date":end_date_param, 
db864df8fe66 v0.4 better chapter filters
cavaliet
parents: 31
diff changeset
   164
                   "mod_scen":mod_scen, "perso":perso, "searched_ref_text":searched_ref_text, "segments": s}
9
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
   165
        
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
   166
        return self.render_to_response(context)
23
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   167
    
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   168
    def post(self, request):
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   169
        annotations_param = request.POST.get("annotations", "[]")
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   170
        grouped_annotations = []
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   171
        for iri_id, items in groupby(json.loads(annotations_param), itemgetter('iri_id')):
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   172
            # Get segments timecodes
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   173
            s = [ int(i["data"]) for i in items ]
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   174
            grouped_annotations.append({ 'content': iri_id, 'list': s })
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   175
        if len(grouped_annotations)==0:
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   176
            return HttpResponse("")
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   177
        # Request segment : we make a complex query impossible (?) to do with orm, even with Q, Sum and other stuffs.
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   178
        # Here is a SQL example of what we want :
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   179
        # select ldt_utils_segment.id, ldt_utils_segment.cutting_id, ldt_utils_segment.tags, ldt_utils_segment.start_ts, ldt_utils_segment.duration, ldt_utils_content.title AS ct
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   180
        # from ldt_utils_segment 
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   181
        # INNER JOIN ldt_utils_content ON (ldt_utils_segment.content_id = ldt_utils_content.id)
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   182
        # where cutting_id IN ('performance','discussion') 
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   183
        # AND (
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   184
        #   ( ldt_utils_segment.iri_id='CONTENT_ID_1' AND (
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   185
        #     ( ldt_utils_segment.start_ts < TIMECODE_1 AND TIMECODE_1 < (ldt_utils_segment.start_ts + ldt_utils_segment.duration) )
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   186
        #      OR 
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   187
        #     ( ldt_utils_segment.start_ts < TIMECODE_2 AND TIMECODE_2 < (ldt_utils_segment.start_ts + ldt_utils_segment.duration) )
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   188
        #   )) 
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   189
        #   OR 
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   190
        #   ( ldt_utils_segment.iri_id='CONTENT_ID_2' AND (
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   191
        #     ( ldt_utils_segment.start_ts < TIMECODE_3 AND TIMECODE_3 < (ldt_utils_segment.start_ts + ldt_utils_segment.duration) )
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   192
        #   )) 
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   193
        # )
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   194
        
65
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   195
        raw_query = "select ldt_utils_segment.id, ldt_utils_segment.cutting_id, ldt_utils_segment.start_ts, ldt_utils_segment.duration, ldt_utils_content.title AS ct \nfrom ldt_utils_segment \nINNER JOIN ldt_utils_content ON (ldt_utils_segment.content_id = ldt_utils_content.id) \nwhere cutting_id IN ('performance','discussion') \nAND ("
23
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   196
        for i, ga in enumerate(grouped_annotations):
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   197
            if i>0:
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   198
                raw_query += "\n  OR "
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   199
            raw_query += "\n  ( ldt_utils_segment.iri_id='" + ga["content"] + "' AND ("
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   200
            for j, tc in enumerate(ga["list"]):
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   201
                if j>0:
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   202
                    raw_query += "\n     OR "
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   203
                raw_query += "\n    ( ldt_utils_segment.start_ts < " + str(tc) + " AND " + str(tc) + " < (ldt_utils_segment.start_ts + ldt_utils_segment.duration) )"
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   204
            raw_query += "\n  )) "
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   205
        raw_query += "\n) "
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   206
        
36
db864df8fe66 v0.4 better chapter filters
cavaliet
parents: 31
diff changeset
   207
        context = {"annot_chapters": True, "start_date":"", "end_date":"", "annot_types": [], "mod_scen":[], "perso":[], "segments": list(Segment.objects.raw(raw_query)) }
23
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   208
        return self.render_to_response(context)
9
b62e3c1565d0 search chapters begins to work
cavaliet
parents: 3
diff changeset
   209
13
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   210
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   211
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   212
class AnnotationRequest(TemplateView):
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   213
    
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   214
    template_name = "partial/spel_annotations.html"
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   215
    
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   216
    def get(self, request):
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   217
        q = request.GET.get("q", "")
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   218
        page = 1
86
ac44ba54cdeb correct theatre contents filter
cavaliet
parents: 84
diff changeset
   219
        content_list = Content.objects.filter(tags__name__in=["content_theatre"])
15
acf4460a8074 annotation tag search
cavaliet
parents: 13
diff changeset
   220
        if q!="":
acf4460a8074 annotation tag search
cavaliet
parents: 13
diff changeset
   221
            field = "abstract"
acf4460a8074 annotation tag search
cavaliet
parents: 13
diff changeset
   222
            results, nb_contents, nb_segments = get_search_results(request, q, field, page, content_list)
acf4460a8074 annotation tag search
cavaliet
parents: 13
diff changeset
   223
            results = results.object_list
21
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   224
            type_inter_param = ""
15
acf4460a8074 annotation tag search
cavaliet
parents: 13
diff changeset
   225
        else:
21
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   226
            type_inter_param = request.GET.get("type_inter", "")
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   227
            seg_queryset = []
15
acf4460a8074 annotation tag search
cavaliet
parents: 13
diff changeset
   228
            results = []
21
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   229
            tagged_segs = []
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   230
            if type_inter_param!="":
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   231
                type_inter = [("type_inter: " + t) for t in type_inter_param.split(",")]
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   232
                tags = Tag.objects.filter(name__in=type_inter)
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   233
                # Get segments from tagged items
65
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   234
                #tagged_segs = TaggedItem.objects.get_by_model(Segment, tags).values()
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   235
                tags = list(tags)
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   236
                seg_ids = list(TaggedItem.objects\
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   237
                            .values_list("object_id", flat=True)\
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   238
                            .filter(content_type=ContentType.objects.get_for_model(Segment))\
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   239
                            .filter(tag__in=tags)\
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   240
                            .annotate(count_status=Count('object_id'))\
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   241
                            .filter(count_status=len(tags)))
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   242
                tagged_segs = Segment.objects.filter(pk__in=seg_ids).prefetch_related("tags__name").values("pk", "tags__name", "project_id", "iri_id", "ensemble_id", "cutting_id", "element_id", "title", "duration", "start_ts", "author", "date", "abstract", "polemics", "id_hash", "audio_src", "audio_href")
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   243
                
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   244
                # Because of prefetch and values, we have to parse all items in order to create a list of tags for all items
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   245
                tagged_segs_dict = {}
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   246
                for s in tagged_segs:
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   247
                    if s['pk'] not in tagged_segs_dict:
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   248
                        tagged_segs_dict[s['pk']] = s
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   249
                        tagged_segs_dict[s['pk']]["tags"] = []
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   250
                    tagged_segs_dict[s['pk']]["tags"].append(s['tags__name'])
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   251
                tagged_segs = tagged_segs_dict.values()
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   252
                
23
1d61b91b0b46 chapters from annotations
cavaliet
parents: 22
diff changeset
   253
                all_contents = list(Content.objects.filter(iri_id__in=[s['iri_id'] for s in tagged_segs]))
21
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   254
                for iri_id, items in groupby(tagged_segs, itemgetter('iri_id')):
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   255
                    # Get good content
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   256
                    content = None
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   257
                    content_filter = filter(lambda e: e.iri_id == iri_id, all_contents)
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   258
                    if len(content_filter)>0:
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   259
                        content = content_filter[0]
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   260
                    if content is None:
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   261
                        continue
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   262
                    # Get segments
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   263
                    s = list(items)
3fdccf07adaf annotations : remove tag by click
cavaliet
parents: 20
diff changeset
   264
                    results.append({ 'content': content, 'list': s })
15
acf4460a8074 annotation tag search
cavaliet
parents: 13
diff changeset
   265
            nb_contents = len(results)
acf4460a8074 annotation tag search
cavaliet
parents: 13
diff changeset
   266
            nb_segments = len(tagged_segs)
13
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   267
        
20
0c292c3abf64 save a not optimised annotation search
cavaliet
parents: 16
diff changeset
   268
        context = {"q":q, "searched_tags": type_inter_param.split(","), "results": results, "nb_contents": nb_contents, "nb_annotations": nb_segments}
13
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   269
        
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   270
        return self.render_to_response(context)
24
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   271
    
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   272
    def post(self, request):
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   273
        chapters_param = request.POST.get("chapters", "[]")
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   274
        grouped_chapters = []
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   275
        for iri_id, items in groupby(json.loads(chapters_param), itemgetter('iri_id')):
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   276
            # Get segments timecodes
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   277
            s = [ {"start": int(i["start"]), "end": int(i["end"])} for i in items ]
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   278
            grouped_chapters.append({ 'content': iri_id, 'list': s })
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   279
        if len(grouped_chapters)==0:
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   280
            return HttpResponse("")
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   281
        
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   282
        
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   283
        # Request segment : we make a complex query impossible (?) to do with orm, even with Q, Sum and other stuffs.
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   284
        # Here is a SQL example of what we want :
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   285
        # select *
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   286
        # from ldt_utils_segment 
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   287
        # where cutting_id IN ('performance','discussion') 
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   288
        # AND (
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   289
        #   ( ldt_utils_segment.iri_id='CONTENT_ID_1' AND (
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   290
        #     ( TIMECODE_START_1 < ldt_utils_segment.start_ts AND ldt_utils_segment.start_ts < TIMECODE_END_1 )
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   291
        #      OR 
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   292
        #     ( TIMECODE_START_2 < ldt_utils_segment.start_ts AND ldt_utils_segment.start_ts < TIMECODE_END_2 )
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   293
        #   )) 
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   294
        #   OR 
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   295
        #   ( ldt_utils_segment.iri_id='CONTENT_ID_2' AND (
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   296
        #     ( TIMECODE_START_3 < ldt_utils_segment.start_ts AND ldt_utils_segment.start_ts < TIMECODE_END_3 )
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   297
        #   )) 
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   298
        # )
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   299
        
74
ca3207a1c6e3 v0.5.4 add play button for each chapter and annotation
cavaliet
parents: 68
diff changeset
   300
        raw_query = "SELECT ldt_utils_segment.id, taggit_tag.name AS tags__name, ldt_utils_segment.iri_id, ldt_utils_segment.cutting_id, ldt_utils_segment.element_id, ldt_utils_segment.title, ldt_utils_segment.duration, ldt_utils_segment.start_ts, ldt_utils_segment.abstract \nFROM ldt_utils_segment \nLEFT OUTER JOIN taggit_taggeditem \nON (ldt_utils_segment.id = taggit_taggeditem.object_id) \nLEFT OUTER JOIN taggit_tag \nON (taggit_taggeditem.tag_id = taggit_tag.id) \nwhere cutting_id NOT IN ('performance','discussion') \nAND ("
65
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   301
        #raw_query = "select id, iri_id, cutting_id, start_ts, duration, title, abstract \nfrom ldt_utils_segment \nwhere cutting_id NOT IN ('performance','discussion') \nAND ("
24
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   302
        for i, ga in enumerate(grouped_chapters):
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   303
            if i>0:
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   304
                raw_query += "\n  OR "
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   305
            raw_query += "\n  ( ldt_utils_segment.iri_id='" + ga["content"] + "' AND ("
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   306
            for j, tc in enumerate(ga["list"]):
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   307
                if j>0:
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   308
                    raw_query += "\n     OR "
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   309
                raw_query += "\n    ( " + str(tc["start"]) + " < ldt_utils_segment.start_ts AND ldt_utils_segment.start_ts < " + str(tc["end"]) + " )"
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   310
            raw_query += "\n  )) "
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   311
        raw_query += "\n)"
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   312
        
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   313
        # Dict because of itemgetter for groupby
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   314
        tagged_segs = [ dict(s.__dict__) for s in Segment.objects.raw(raw_query) ]
65
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   315
        # Because of taggit_tag.name JOIN, we have to parse all items in order to create a list of tags for all items
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   316
        tagged_segs_dict = {}
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   317
        for s in tagged_segs:
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   318
            if s['id'] not in tagged_segs_dict:
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   319
                tagged_segs_dict[s['id']] = s
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   320
                tagged_segs_dict[s['id']]["tags"] = []
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   321
            tagged_segs_dict[s['id']]["tags"].append(s['tags__name'])
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   322
        tagged_segs = tagged_segs_dict.values()
ac0c11fc869e update ldt, remove tagging for taggit
cavaliet
parents: 36
diff changeset
   323
        
24
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   324
        # Prefetch all contents
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   325
        all_contents = list(Content.objects.filter(iri_id__in=[s['iri_id'] for s in tagged_segs]))
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   326
        results = []
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   327
        for iri_id, items in groupby(tagged_segs, itemgetter('iri_id')):
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   328
            # Get good content
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   329
            content = None
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   330
            content_filter = filter(lambda e: e.iri_id == iri_id, all_contents)
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   331
            if len(content_filter)>0:
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   332
                content = content_filter[0]
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   333
            if content is None:
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   334
                continue
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   335
            # Get segments
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   336
            s = list(items)
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   337
            results.append({ 'content': content, 'list': s })
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   338
        nb_contents = len(results)
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   339
        nb_segments = len(tagged_segs)
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   340
        
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   341
        context = {"chapter_annots":True, "q":"", "searched_tags": [], "results": results, "nb_contents": nb_contents, "nb_annotations": nb_segments}
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   342
        
dda5c321379a chapters to annotations first step
cavaliet
parents: 23
diff changeset
   343
        return self.render_to_response(context)
13
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   344
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   345
91
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   346
class OperaRequest(TemplateView):
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   347
    
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   348
    template_name = "partial/spel_opera_annotations.html"
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   349
    
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   350
    def get(self, request):
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   351
        # Filter content by date if necessary
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   352
        content_qs = Content.objects.filter(tags__name__in=["content_opera"])
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   353
        start_date_param = request.GET.get("start_date", "")
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   354
        if start_date_param!="":
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   355
            content_qs = content_qs.filter(content_creation_date__gt=start_date_param)
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   356
        end_date_param = request.GET.get("end_date", "")
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   357
        if end_date_param!="":
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   358
            content_qs = content_qs.filter(content_creation_date__lt=end_date_param + " 23:59:59")
106
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   359
        
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   360
        # Query on abstract management
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   361
        q = request.GET.get("q", "").strip()
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   362
        if q!="":
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   363
            # Query case : we get segments by the search engine
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   364
            field = "abstract"
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   365
            results = get_results_with_context(Segment, field, q, content_qs)
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   366
            seg_queryset = Segment.objects.filter(pk__in=[e['indexation_id'] for e in results]).select_related("content__title")
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   367
        else:
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   368
            # Filter segment if necessary
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   369
            iri_ids = content_qs.values_list("iri_id", flat=True)
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   370
            seg_queryset = Segment.objects.filter(iri_id__in=iri_ids).select_related("content__title")
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   371
        
91
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   372
        annot_types_param = request.GET.get("annotation_types", "")
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   373
        annot_types = []
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   374
        if annot_types_param!="":
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   375
            annot_types = annot_types_param.split(",")
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   376
            seg_queryset = seg_queryset.filter(cutting_id__in=annot_types)
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   377
        
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   378
        # First we look at modalites_sceniques and personnages tags.
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   379
        mod_scen_param = request.GET.get("modalites_sceniques", "")
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   380
        mod_scen = []
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   381
        if mod_scen_param!="":
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   382
            mod_scen = mod_scen_param.split(",")
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   383
        perso_param = request.GET.get("personnages", "")
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   384
        perso = []
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   385
        if perso_param!="":
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   386
            perso = perso_param.split(",")
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   387
        type_travail_param = request.GET.get("type_travail", "")
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   388
        type_travail = []
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   389
        if type_travail_param!="":
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   390
            type_travail = type_travail_param.split(",")
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   391
        acte_param = request.GET.get("acte", "")
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   392
        acte = []
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   393
        if acte_param!="":
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   394
            acte = acte_param.split(",")
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   395
        scene_param = request.GET.get("scene", "")
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   396
        scene = []
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   397
        if scene_param!="":
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   398
            scene = scene_param.split(",")
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   399
        
106
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   400
        # Mesure management
99
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   401
        start_mesure = request.GET.get("start_mesure", "")
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   402
        end_mesure = request.GET.get("end_mesure", "")
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   403
        mesure = None
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   404
        mesure_int = None
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   405
        if start_mesure=="start" and end_mesure=="":
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   406
            mesure = []
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   407
            mesure_int = []
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   408
        elif start_mesure!="start" and end_mesure=="":
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   409
            # Only one mesure has been defined
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   410
            mesure = [Tag.objects.get(name="opera_mesure: " + start_mesure)]
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   411
            mesure_int = [start_mesure]
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   412
        elif end_mesure!="":
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   413
            # First get all ref_text values
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   414
            m_tags = Tag.objects.filter(name__startswith="opera_mesure:")
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   415
            mesure_int = []
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   416
            for m in m_tags:
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   417
                tested = re.match(r"^(\d+)$", m.name[14:])
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   418
                if tested and len(tested.groups())==1:
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   419
                    mesure_int.append(int(tested.group(1)))
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   420
            mesure_int.sort()
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   421
            
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   422
            # At least start or end have been defined, so we search for the concerned chapter ids.
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   423
            start_index = 0
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   424
            if start_mesure!="start":
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   425
                try:
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   426
                    start_index = mesure_int.index(int(start_mesure))
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   427
                except:
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   428
                    pass
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   429
            end_index = len(mesure_int)
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   430
            if end_mesure!="end":
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   431
                try:
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   432
                    end_index = mesure_int.index(int(end_mesure)) + 1
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   433
                except:
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   434
                    pass
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   435
            mesure_int = mesure_int[start_index:end_index]
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   436
            mesure = Tag.objects.filter(name__in=[ ("opera_mesure: " + str(m)) for m in mesure_int ])
91
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   437
        
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   438
        # Get tags from orm
99
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   439
        all_tags = mod_scen + perso + type_travail + acte + scene
91
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   440
        tags = Tag.objects.filter(name__in=all_tags)
99
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   441
        
91
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   442
        # seg_queryset.filter(tags__in=tags) doesn't work because taggit finds segments with one of the tags and not ALL tags
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   443
        # So we make a correct request through TaggedItem first
99
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   444
        # Mesure filter if possible
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   445
        if mesure and len(mesure)>0:
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   446
            # a chapter can only have on ref_text, and the search on ref_text is a OR.
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   447
            # That's many requests (with the orm) but it seems the only thing possible with tagging
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   448
            s = []
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   449
            for m in mesure:
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   450
                current_tags = list(tags)
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   451
                current_tags.append(m)
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   452
                #s += list(TaggedItem.objects.get_by_model(seg_queryset, current_tags))
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   453
                seg_ids = list(TaggedItem.objects\
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   454
                            .values_list("object_id", flat=True)\
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   455
                            .filter(content_type=ContentType.objects.get_for_model(Segment))\
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   456
                            .filter(tag__in=current_tags)\
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   457
                            .annotate(count_status=Count('object_id'))\
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   458
                            .filter(count_status=len(current_tags)))
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   459
                s += list(seg_queryset.filter(pk__in=seg_ids))
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   460
        else:
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   461
            # Get segments from tagged items
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   462
            #s = TaggedItem.objects.get_by_model(seg_queryset, tags)
0eab4a2257a7 v0.5.15 management of range for mesure
cavaliet
parents: 91
diff changeset
   463
            tags = list(tags)
106
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   464
            if len(tags)>0:
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   465
                seg_ids = list(TaggedItem.objects\
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   466
                            .values_list("object_id", flat=True)\
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   467
                            .filter(content_type=ContentType.objects.get_for_model(Segment))\
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   468
                            .filter(tag__in=tags)\
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   469
                            .annotate(count_status=Count('object_id'))\
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   470
                            .filter(count_status=len(tags)))
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   471
                s = list(seg_queryset.filter(pk__in=seg_ids))
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   472
            else:
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   473
                s = list(seg_queryset)
91
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   474
        
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   475
        context = {"annot_types":annot_types, "start_date":start_date_param, "end_date":end_date_param, 
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   476
                   "mod_scen":mod_scen, "perso":perso, "type_travail":type_travail, "acte":acte, 
106
ef4095059d92 v0.5.18 query on abstract
cavaliet
parents: 99
diff changeset
   477
                   "scene":scene, "mesure":mesure_int, "q":q, "segments": s}
91
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   478
        
1f24f33b41e1 v0.5.11 opera requests work
cavaliet
parents: 86
diff changeset
   479
        return self.render_to_response(context)
13
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   480
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   481
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   482
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   483
137
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   484
class JsonRdfExport(View):
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   485
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   486
    def get(self, request, id):
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   487
        
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   488
        """
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   489
        This helper module allows to convert advene 2packages from one format to another
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   490
        without having to depend on the whole advene2 library.
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   491
        It does so by invoking advene-convert as a subprocess.
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   492
        """
13
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   493
b425f929987d search and filter annotations.
cavaliet
parents: 12
diff changeset
   494
137
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   495
        format = request.GET.get("format","")
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   496
        if format == "rdf" or format == "ttl":
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   497
            from libadvene.model.cam.package import Package
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   498
            from libadvene.model.parsers.cinelab_json import Parser
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   499
            from libadvene.model.serializers.cinelab_rdf import serialize_to as serialize_to_rdf
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   500
            from libadvene.model.serializers.cinelab_ttl import serialize_to as serialize_to_ttl
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   501
            
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   502
            project = get_object_or_404(Project, ldt_id=id)
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   503
            ps = ProjectJsonSerializer(project)
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   504
            project_dict = ps.serialize_to_cinelab()
142
34ad53eecb18 v0.6.2 : enhance libadvene export
cavaliet
parents: 137
diff changeset
   505
            p = Package("http://spectacleenlignes.fr" + request.path, create=True)
137
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   506
            Parser.parse_into(project_dict, p)
142
34ad53eecb18 v0.6.2 : enhance libadvene export
cavaliet
parents: 137
diff changeset
   507
            
34ad53eecb18 v0.6.2 : enhance libadvene export
cavaliet
parents: 137
diff changeset
   508
            if format=="rdf":
34ad53eecb18 v0.6.2 : enhance libadvene export
cavaliet
parents: 137
diff changeset
   509
                content_type = "application/rdf+xml"
34ad53eecb18 v0.6.2 : enhance libadvene export
cavaliet
parents: 137
diff changeset
   510
                serialize_method= serialize_to_rdf
34ad53eecb18 v0.6.2 : enhance libadvene export
cavaliet
parents: 137
diff changeset
   511
            elif format=="ttl":
34ad53eecb18 v0.6.2 : enhance libadvene export
cavaliet
parents: 137
diff changeset
   512
                content_type = "text/turtle"
34ad53eecb18 v0.6.2 : enhance libadvene export
cavaliet
parents: 137
diff changeset
   513
                serialize_method= serialize_to_ttl
34ad53eecb18 v0.6.2 : enhance libadvene export
cavaliet
parents: 137
diff changeset
   514
            resp = HttpResponse(content_type=content_type)
34ad53eecb18 v0.6.2 : enhance libadvene export
cavaliet
parents: 137
diff changeset
   515
            serialize_method(p, resp)
34ad53eecb18 v0.6.2 : enhance libadvene export
cavaliet
parents: 137
diff changeset
   516
            return resp
137
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   517
        return project_json_id(request, id)
02e81a3fc99b update venv to allow turtle and rdf export thanks to libadvene
cavaliet
parents: 106
diff changeset
   518
2
bafbf72652b9 virtualenv first commit and structure for spel app
cavaliet
parents:
diff changeset
   519