diff options
| -rw-r--r-- | chimere/views.py | 133 |
1 files changed, 76 insertions, 57 deletions
diff --git a/chimere/views.py b/chimere/views.py index 55775f4..6cf16aa 100644 --- a/chimere/views.py +++ b/chimere/views.py @@ -613,6 +613,7 @@ def getDescriptionDetail(request, area_name, category_id): return render_to_response('chimere/category_detail.html', response_dct, context_instance=RequestContext(request)) + def checkDate(q): """ Filter a queryset to manage dates @@ -622,12 +623,12 @@ def checkDate(q): today = datetime.date.today() after = today + datetime.timedelta(settings.CHIMERE_DAYS_BEFORE_EVENT) - q = q & ( Q(start_date__isnull=True) - | Q(start_date__gte=today, start_date__lte=after) - | Q(start_date__lte=today, end_date__gte=today) - ) + q = q & (Q(start_date__isnull=True) | Q(start_date__gte=today, + start_date__lte=after) | Q( + start_date__lte=today, end_date__gte=today)) return q + def _getGeoObjects(area_name, category_ids, status='A', getjson=True, item_types=('Marker', 'Route')): ''' @@ -654,8 +655,9 @@ def _getGeoObjects(area_name, category_ids, status='A', getjson=True, # routes if 'Route' in item_types: - query = AggregatedRoute.objects.filter(status__in=status, - subcategory__in=category_ids).order_by('subcategory', '-pk') + query = AggregatedRoute.objects.filter( + status__in=status, subcategory__in=category_ids).order_by( + 'subcategory', '-pk') if getjson: for route in query.all(): c_cat = route.subcategory @@ -663,10 +665,11 @@ def _getGeoObjects(area_name, category_ids, status='A', getjson=True, idx = 0 current_cat = c_cat colors = list(Color.objects.filter( - color_theme=c_cat.color_theme)) + color_theme=c_cat.color_theme)) if colors: items.append(json.loads( - route.getGeoJSON(color=colors[idx % len(colors)].code))) + route.getGeoJSON(color=colors[idx % len(colors)].code)) + ) else: items.append(json.loads(route.getGeoJSON(color='000'))) idx += 1 @@ -677,6 +680,7 @@ def _getGeoObjects(area_name, category_ids, status='A', getjson=True, return empty return items + def getGeoObjects(request, area_name, category_ids, status): ''' Get the JSON for markers and routes @@ -688,10 +692,11 @@ def getGeoObjects(request, area_name, category_ids, status): jsons = _getGeoObjects(area_name, category_ids, status) if not jsons: - return HttpResponse('no results') - data = json.dumps({"type": "FeatureCollection", "features":jsons}) + return HttpResponse("[]", content_type="application/json") + data = json.dumps({"type": "FeatureCollection", "features": jsons}) return HttpResponse(data, content_type="application/json") + def getMarker(request, area_name, pk): q = Marker.objects.filter(pk=pk, status='A') if not q.count(): @@ -699,6 +704,7 @@ def getMarker(request, area_name, pk): data = q.all()[0].getGeoJSON() return HttpResponse(data, content_type="application/json") + def get_all_categories(request, area_name=None): ''' Get all available categories in JSON @@ -707,16 +713,17 @@ def get_all_categories(request, area_name=None): area = context_data["area"] subcategories = [] if area: - subcategories = list(area.getCategories('A', - area_name=context_data['area_name'])) + subcategories = list(area.getCategories( + 'A', area_name=context_data['area_name'])) else: categories = SubCategory.getAvailable() for cat, subcats in categories: subcategories += subcats subcats = [subcat.getJSONDict() for subcat in subcategories] - jsons = json.dumps({'categories':subcats}) + jsons = json.dumps({'categories': subcats}) return HttpResponse(jsons) + def get_available_categories(request, area_name=None, area=None, status='A', force=None): ''' @@ -727,21 +734,23 @@ def get_available_categories(request, area_name=None, area=None, status='A', if redir: return redir if area and area.dynamic_categories and \ - not "current_extent" in request.GET: + "current_extent" not in request.GET: context_data['sub_categories'] = [] - return render_to_response('chimere/blocks/categories.html', context_data, - context_instance=RequestContext(request)) + return render_to_response( + 'chimere/blocks/categories.html', context_data, + context_instance=RequestContext(request)) if not area or not area.dynamic_categories: # Categories are not updated dynamicaly when the user move the map # so we return ALL the categories subcategories = SubCategory.getAvailable( - area_name=context_data['area_name']) + area_name=context_data['area_name']) context_data['sub_categories'] = subcategories - return render_to_response('chimere/blocks/categories.html', context_data, - context_instance=RequestContext(request)) + return render_to_response( + 'chimere/blocks/categories.html', context_data, + context_instance=RequestContext(request)) default_message = "<p class='warning'>%s</p>" % \ - _("No category available in this area.") - if not "status" in request.GET: # there must be a status + _("No category available in this area.") + if "status" not in request.GET: # there must be a status status = 'A' try: status = status.split('_') @@ -752,18 +761,20 @@ def get_available_categories(request, area_name=None, area=None, status='A', # bad extent format return HttpResponse(default_message) # if not force and area.isIn(SimpleArea(cookie.AREA):return - categories = area.getCategories(status, area_name=context_data['area_name']) + categories = area.getCategories( + status, area_name=context_data['area_name']) if not categories: return HttpResponse(default_message) get_cat = lambda subcat: subcat.category get_cat_order = lambda subcat: (subcat.category.order, subcat.category.pk, subcat.order) categories = sorted(categories, key=get_cat_order) - subcategories = [(cat, list(subcats)) \ - for cat, subcats in groupby(categories, get_cat)] + subcategories = [(cat, list(subcats)) + for cat, subcats in groupby(categories, get_cat)] context_data['sub_categories'] = subcategories return render_to_response('chimere/blocks/categories.html', context_data, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) + def getCategory(request, area_name='', category_id=0): ''' @@ -772,14 +783,15 @@ def getCategory(request, area_name='', category_id=0): try: category = SubCategory.objects.get(pk=category_id) except ObjectDoesNotExist: - return HttpResponse('no results') - return HttpResponse(category.getJSON()) + return HttpResponse('[]', content_type="application/json") + return HttpResponse(category.getJSON(), content_type="application/json") + def getTinyfiedUrl(request, parameters, area_name=''): ''' Get the tinyfied version of parameters ''' - data = {"urn": "", "url":"", "text":""} + data = {"urn": "", "url": "", "text": ""} try: urn = TinyUrl.getUrnByParameters(parameters) except: @@ -787,8 +799,8 @@ def getTinyfiedUrl(request, parameters, area_name=''): response_dct, redir = get_base_response(request, area_name) if redir: return redir - url = reverse('chimere:tiny', args=[(response_dct['area_name'] \ - if response_dct['area_name'] else '') + '/', urn]) + url = reverse('chimere:tiny', args=[(response_dct['area_name'] + if response_dct['area_name'] else '') + '/', urn]) if not url.startswith('http'): url = get_base_uri(request) + url url = re.sub("([^:])\/\/", "\g<1>/", url) @@ -805,6 +817,7 @@ def getTinyfiedUrl(request, parameters, area_name=''): data["text"] = urlquote(text) return data + def redirectFromTinyURN(request, area_name='', tiny_urn=''): """ Redirect from a tiny Urn @@ -815,6 +828,7 @@ def redirectFromTinyURN(request, area_name='', tiny_urn=''): return redir return HttpResponseRedirect(response_dct['extra_url'] + parameters) + class CategoryDirectoryView(ListView): template_name = "chimere/category_directory.html" @@ -823,26 +837,27 @@ class CategoryDirectoryView(ListView): if self.area_name: self.area_name = self.area_name.split('/')[0] area = get_object_or_404(Area, urn=self.area_name, available=True) - q = area.subcategories.filter(available=True, - category__available=True - ).order_by('category__order', 'category__id', 'order') + q = area.subcategories.filter( + available=True, category__available=True).order_by( + 'category__order', 'category__id', 'order') if q.count(): return q - return SubCategory.objects.filter(available=True, - category__available=True - ).order_by('category__order', 'category__id', 'order') + return SubCategory.objects.filter( + available=True, category__available=True).order_by( + 'category__order', 'category__id', 'order') def get_context_data(self, *args, **kwargs): context = super(CategoryDirectoryView, self).get_context_data( - *args, **kwargs) + *args, **kwargs) new_context, redirect = get_base_response(self.request, self.area_name) context.update(new_context) context.update({ - 'actions':actions(self.area_name), - 'action_selected':('categories',), + 'actions': actions(self.area_name), + 'action_selected': ('categories',), }) return context + class CategoryView(TemplateView): template_name = "chimere/category_directory_detail.html" @@ -875,18 +890,19 @@ class CategoryView(TemplateView): def get_context_data(self, *args, **kwargs): context = super(CategoryView, self).get_context_data( - *args, **kwargs) + *args, **kwargs) self.items = self.get_geo_items() new_context, redirect = get_base_response(self.request, self.area_name) context.update(new_context) context.update({ - 'actions':actions(self.area_name), - 'action_selected':('categories',), - 'category':self.category, - 'items':self.items + 'actions': actions(self.area_name), + 'action_selected': ('categories',), + 'category': self.category, + 'items': self.items }) return context + def route(request, area_name, lon1, lat1, lonlat_steps, lon2, lat2, transport='foot', speed=''): ''' @@ -897,7 +913,8 @@ def route(request, area_name, lon1, lat1, lonlat_steps, lon2, lat2, lon2, lat2 = float(lon2), float(lat2) steps = [float(lonlat) for lonlat in lonlat_steps.split('_') if lonlat] # regroup by 2 - steps = [(steps[i*2], steps[i*2+1]) for i in range(len(steps)/2)] + steps = [(steps[i * 2], steps[i * 2 + 1]) + for i in range(len(steps) / 2)] except ValueError: return HttpResponse('no results') @@ -906,8 +923,9 @@ def route(request, area_name, lon1, lat1, lonlat_steps, lon2, lat2, transport = settings.CHIMERE_ROUTING_TRANSPORT[0][0] if speed: speed = unicode(speed) - available_speed = [unicode(sp) - for sp, lbl in settings.CHIMERE_ROUTING_SPEEDS[transport]] + available_speed = [ + unicode(sp) + for sp, lbl in settings.CHIMERE_ROUTING_SPEEDS[transport]] if speed not in available_speed: speed = None if not speed: @@ -930,12 +948,12 @@ def route(request, area_name, lon1, lat1, lonlat_steps, lon2, lat2, message = '' if cats.count(): st_string = '{"type":"Feature", "geometry":{ "type": "Point", '\ - '"coordinates": [ %f, %f ] }, "properties":{"icon_path":"%s",'\ - '"icon_width":%d, "icon_height":%d}}' + '"coordinates": [ %f, %f ] }, "properties":{"icon_path":"%s",'\ + '"icon_width":%d, "icon_height":%d}}' points = [(m.point, m.categories.all()[0].icon) - for m in list(Marker.objects.filter(status='A', - categories__in=cats, point__distance_lte=(route, D(m=15)) - ).all())] + for m in list(Marker.objects.filter( + status='A', categories__in=cats, + point__distance_lte=(route, D(m=15))).all())] for pt, icon in points: st = st_string % (pt.x, pt.y, icon.image.url, icon.image.width, icon.image.height) @@ -951,18 +969,19 @@ def route(request, area_name, lon1, lat1, lonlat_steps, lon2, lat2, if pts: pt = pts[0] st = st_string % (pt.x, pt.y, icon.image.url, icon.image.width, - icon.image.height) + icon.image.height) jsons.append(st) if points or intersect: message = getattr(settings, 'CHIMERE_ROUTING_WARN_MESSAGE', '') if message: message = ', "message":%s' % jsonencoder.encode( - "%s" % _(message)) + "%s" % _(message)) else: message = '' data = '{"properties":{"transport":%s, "total":%s, "description":%s}, '\ '"type": "FeatureCollection", "features":[%s]%s}' % ( - jsonencoder.encode(transport), total, desc, ",".join(jsons), message) + jsonencoder.encode(transport), total, desc, ",".join(jsons), + message) return HttpResponse(data) @@ -1012,7 +1031,7 @@ def rss(request, area_name=''): else: error = _("Incorrect choice in the list") response_dct.update({ - 'error_message':error, + 'error_message': error, 'category_rss_feed': '', 'sub_categories': SubCategory.getAvailable()}) return render_to_response( @@ -1089,7 +1108,7 @@ def rss(request, area_name=''): return render_to_response('chimere/feeds/rss.html', response_dct, context_instance=RequestContext(request)) -from django.core.paginator import Paginator, InvalidPage +# from django.core.paginator import Paginator, InvalidPage SearchView = None autocomplete = None |
