source: telemeta/views/base.py @ 47882c0

cremcrem2devdev2diademsdj1.6feature/breadcrumbsfeature/ts-0.5feature/ts-0.5.4feature/writecacheformagenericinstru_searchlamlam2mapsv3mergenlivemultiproductionrelease/1.4.4sabiodsecurityserversocialstoragetelecastertestvideo
Last change on this file since 47882c0 was 47882c0, checked in by olivier <>, 7 years ago

renaming web.py to base.py

  • Property mode set to 100644
File size: 8.7 KB
Line 
1# Copyright (C) 2007 Samalyse SARL
2# All rights reserved.
3#
4# This software is licensed as described in the file COPYING, which
5# you should have received as part of this distribution. The terms
6# are also available at http://svn.parisson.org/telemeta/TelemetaLicense.
7#
8# Author: Olivier Guilyardi <olivier@samalyse.com>
9
10import re
11import os
12
13from django.template import Context, loader
14from django import template
15from django.http import HttpResponse
16from django.http import Http404
17from django.shortcuts import render_to_response
18from django.views.generic import list_detail
19from django.conf import settings
20
21import telemeta
22from telemeta.models import MediaItem
23from telemeta.models import MediaCollection
24from telemeta.core import *
25from telemeta.export import *
26from telemeta.visualization import *
27
28class WebView(Component):
29    """Provide web UI methods"""
30
31    exporters = ExtensionPoint(IExporter)
32    visualizers = ExtensionPoint(IMediaItemVisualizer)
33
34    def index(self, request):
35        """Render the homepage"""
36
37        template = loader.get_template('index.html')
38        context = Context({})
39        return HttpResponse(template.render(context))
40
41    def item_detail(self, request, item_id, template='mediaitem_detail.html'):
42        """Show the details of a given item"""
43        item = MediaItem.objects.get(pk=item_id)
44        formats = []
45        for exporter in self.exporters:
46            formats.append(exporter.get_format())
47        visualizers = []
48        for visualizer in self.visualizers:
49            visualizers.append({'name':visualizer.get_name(), 'id': 
50                visualizer.get_id()})
51        if request.REQUEST.has_key('visualizer_id'):
52            visualizer_id = request.REQUEST['visualizer_id']
53        else:
54            visualizer_id = 'waveform'
55
56        return render_to_response(template, 
57                    {'item': item, 'export_formats': formats, 
58                    'visualizers': visualizers, 'visualizer_id': visualizer_id})
59                   
60    def item_visualize(self, request, item_id, visualizer_id):
61        for visualizer in self.visualizers:
62            if visualizer.get_id() == visualizer_id:
63                break
64
65        if visualizer.get_id() != visualizer_id:
66            raise Http404
67       
68        item = MediaItem.objects.get(pk=item_id)
69
70        stream = visualizer.render(item)
71        response = HttpResponse(stream, mimetype = 'image/png')
72        return response
73
74    def item_export(self, request, item_id, format):                   
75        """Export a given media item in the specified format (OGG, FLAC, ...)"""
76        for exporter in self.exporters:
77            if exporter.get_format() == format:
78                break
79
80        if exporter.get_format() != format:
81            raise Http404
82
83        mime_type = exporter.get_mime_type()
84
85        exporter.set_cache_dir(settings.TELEMETA_EXPORT_CACHE_DIR)
86
87        item = MediaItem.objects.get(pk=item_id)
88
89        infile = settings.MEDIA_ROOT + "/" + item.file
90        metadata = item.to_dublincore().flatten()
91        stream = exporter.process(item.id, infile, metadata)
92
93        response = HttpResponse(stream, mimetype = mime_type)
94        response['Content-Disposition'] = 'attachment; filename="download.' + \
95                    exporter.get_file_extension() + '"'
96        return response
97
98    def quick_search(self, request):
99        """Perform a simple search through collections and items core metadata"""
100        pattern = request.REQUEST["pattern"]
101        collections = MediaCollection.objects.quick_search(pattern)
102        items = MediaItem.objects.quick_search(pattern)
103        return render_to_response('search_results.html', 
104                    {'pattern': pattern, 'collections': collections, 
105                     'items': items})
106
107    def __get_enumerations_list(self):
108        from django.db.models import get_models
109        models = get_models(telemeta.models)
110
111        enumerations = []
112        for model in models:
113            if getattr(model, "is_enumeration", False):
114                enumerations.append({"name": model._meta.verbose_name_plural, 
115                    "id": model._meta.module_name})
116        return enumerations                   
117   
118    def __get_admin_context_vars(self):
119        return {"enumerations": self.__get_enumerations_list()}
120
121    def admin_index(self, request):
122        return render_to_response('admin.html', self. __get_admin_context_vars())
123
124    def __get_enumeration(self, id):
125        from django.db.models import get_models
126        models = get_models(telemeta.models)
127        for model in models:
128            if model._meta.module_name == id:
129                break
130
131        if model._meta.module_name != id:
132            return None
133
134        return model
135
136    def edit_enumeration(self, request, enumeration_id):       
137
138        enumeration  = self.__get_enumeration(enumeration_id)
139        if enumeration == None:
140            raise Http404
141
142        vars = self.__get_admin_context_vars()
143        vars["enumeration_id"] = enumeration._meta.module_name
144        vars["enumeration_name"] = enumeration._meta.verbose_name           
145        vars["enumeration_name_plural"] = enumeration._meta.verbose_name_plural
146        vars["enumeration_values"] = enumeration.objects.all()
147        return render_to_response('enumeration_edit.html', vars)
148
149    def add_to_enumeration(self, request, enumeration_id):       
150
151        enumeration  = self.__get_enumeration(enumeration_id)
152        if enumeration == None:
153            raise Http404
154
155        enumeration_value = enumeration(value=request.POST['value'])
156        enumeration_value.save()
157
158        return self.edit_enumeration(request, enumeration_id)
159
160    def update_enumeration(self, request, enumeration_id):       
161       
162        enumeration  = self.__get_enumeration(enumeration_id)
163        if enumeration == None:
164            raise Http404
165
166        if request.POST.has_key("remove"):
167            enumeration.objects.filter(id__in=request.POST.getlist('sel')).delete()
168
169        return self.edit_enumeration(request, enumeration_id)
170
171    def edit_enumeration_value(self, request, enumeration_id, value_id):       
172
173        enumeration  = self.__get_enumeration(enumeration_id)
174        if enumeration == None:
175            raise Http404
176       
177        vars = self.__get_admin_context_vars()
178        vars["enumeration_id"] = enumeration._meta.module_name
179        vars["enumeration_name"] = enumeration._meta.verbose_name           
180        vars["enumeration_name_plural"] = enumeration._meta.verbose_name_plural
181        vars["enumeration_record"] = enumeration.objects.get(id__exact=value_id)
182        return render_to_response('enumeration_edit_value.html', vars)
183
184    def update_enumeration_value(self, request, enumeration_id, value_id):       
185
186        if request.POST.has_key("save"):
187            enumeration  = self.__get_enumeration(enumeration_id)
188            if enumeration == None:
189                raise Http404
190       
191            record = enumeration.objects.get(id__exact=value_id)
192            record.value = request.POST["value"]
193            record.save()
194
195        return self.edit_enumeration(request, enumeration_id)
196 
197    def collection_playlist(self, request, collection_id, template, mimetype):
198        collection = MediaCollection.objects.get(id__exact=collection_id)
199        if not collection:
200            raise Http404
201
202        template = loader.get_template(template)
203        context = Context({'collection': collection, 'host': request.META['HTTP_HOST']})
204        return HttpResponse(template.render(context), mimetype=mimetype)
205
206    def item_playlist(self, request, item_id, template, mimetype):
207        item = MediaItem.objects.get(id__exact=item_id)
208        if not item:
209            raise Http404
210
211        template = loader.get_template(template)
212        context = Context({'item': item, 'host': request.META['HTTP_HOST']})
213        return HttpResponse(template.render(context), mimetype=mimetype)
214
215    def list_continents(self, request):
216        continents = MediaCollection.objects.stat_continents()
217        return render_to_response('geo_continents.html', 
218                    {'continents': continents })
219
220    def list_countries(self, request, continent):                   
221        continents = MediaCollection.objects.stat_continents()
222        for c in continents:
223            if c["name"] == continent:
224                break
225        if c["name"] != continent:
226            raise Http404
227
228        return render_to_response('geo_countries.html', {'continent': c })
229
230    def list_country_collections(self, request, continent, country):
231        objects = MediaCollection.objects.by_country(country)
232        return list_detail.object_list(request, objects, 
233            template_name='geo_country_collections.html', paginate_by=20,
234            extra_context={'country': country, 'continent': continent})
235
236       
237
238       
239   
240   
241
242   
Note: See TracBrowser for help on using the repository browser.