diff options
Diffstat (limited to 'chimere/views.py')
| -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 | 
