summaryrefslogtreecommitdiff
path: root/chimere
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2010-11-19 18:21:14 +0100
committerÉtienne Loks <etienne.loks@peacefrogs.net>2010-11-19 19:16:16 +0100
commit7211864b0d3212d1439f93ab2aa213b47827bf02 (patch)
tree96787a3eb85ecbe2f42400e043400352459c5072 /chimere
parentaef9c3d2a31c8fd191f663b36436ed2e30fd159a (diff)
downloadChimère-7211864b0d3212d1439f93ab2aa213b47827bf02.tar.bz2
Chimère-7211864b0d3212d1439f93ab2aa213b47827bf02.zip
Add a new application "rss". Add urls to manage RSS.
Rough integration of work of Pierre Clarenc and Samuel Renard (refs #65)
Diffstat (limited to 'chimere')
-rw-r--r--chimere/main/actions.py6
-rw-r--r--chimere/main/forms.py8
-rw-r--r--chimere/main/models.py3
-rw-r--r--chimere/rss/__init__.py1
-rw-r--r--chimere/rss/feeds.py253
-rw-r--r--chimere/rss/urls.py42
-rw-r--r--chimere/rss/views.py153
-rw-r--r--chimere/settings.py.example3
-rw-r--r--chimere/urls.py46
9 files changed, 493 insertions, 22 deletions
diff --git a/chimere/main/actions.py b/chimere/main/actions.py
index f86e954..c6d2060 100644
--- a/chimere/main/actions.py
+++ b/chimere/main/actions.py
@@ -23,7 +23,7 @@ Actions available in the main interface
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth import models
-from chimere.settings import EXTRA_URL, EMAIL_HOST
+from chimere.settings import EXTRA_URL, EMAIL_HOST, INSTALLED_APPS
class Action:
def __init__(self, id, path, label):
@@ -36,3 +36,7 @@ actions = [(Action('view', '', _('View')), []),
),]
if EMAIL_HOST:
actions.append((Action('contact', 'contact', _('Contact us')), []),)
+
+if 'chimere.rss' in INSTALLED_APPS:
+ actions.append(Action('rss', 'rss', _('Feeds')), [])
+
diff --git a/chimere/main/forms.py b/chimere/main/forms.py
index 76a2a17..e1e3168 100644
--- a/chimere/main/forms.py
+++ b/chimere/main/forms.py
@@ -288,3 +288,11 @@ class AreaAdminForm(forms.ModelForm):
if perm:
perm[0].delete()
return new_area
+
+class AreaForm(AreaAdminForm):
+ """
+ Form for the edit page
+ """
+ class Meta:
+ model = Area
+
diff --git a/chimere/main/models.py b/chimere/main/models.py
index 51e8693..093918b 100644
--- a/chimere/main/models.py
+++ b/chimere/main/models.py
@@ -206,6 +206,9 @@ Format YYYY-MM-DD"))
end_date = models.DateField(_("End date"), blank=True, null=True,
help_text=_("Not mandatory. Set it only if you have a multi-day event. \
Format YYYY-MM-DD"))
+ if 'chimere.rss' in settings.INSTALLED_APPS:
+ available_date = models.DateTimeField(_("Available Date"), blank=True,
+ null=True)
objects = models.GeoManager()
def __unicode__(self):
diff --git a/chimere/rss/__init__.py b/chimere/rss/__init__.py
new file mode 100644
index 0000000..792d600
--- /dev/null
+++ b/chimere/rss/__init__.py
@@ -0,0 +1 @@
+#
diff --git a/chimere/rss/feeds.py b/chimere/rss/feeds.py
new file mode 100644
index 0000000..c24281c
--- /dev/null
+++ b/chimere/rss/feeds.py
@@ -0,0 +1,253 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2010 Pierre Clarenc <pierre.crc_AT_gmailDOTcom>,
+# Samuel Renard <renard.samuel_AT_gmailDOTcom>,
+# Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# See the file COPYING for details.
+
+from django.contrib.syndication.feeds import Feed
+from django.contrib.syndication.feeds import FeedDoesNotExist
+from chimere.main.models import Category, SubCategory, Marker, Area
+from django.core.exceptions import ObjectDoesNotExist
+from django.contrib.gis.geos import *
+
+from chimere import settings
+
+
+class LatestPOIsByCategory(Feed):
+ '''
+ Last Points of interests by category in Feeds
+ '''
+
+ title_template = "rss_title.html"
+ description_template = "rss_descr.html"
+ # Get extra url, after rss/category/ -> bits[0]=id of category
+ def get_object(self, bits):
+ if len(bits) != 1:
+ raise ObjectDoesNotExist
+ return Category.objects.get(id__exact=bits[0])
+ # Define the title of the feed, here The name of the category
+ def title(self, obj):
+ return "Chimere - %s" % obj.name
+ # Define the link of the feed. Feeds agregators update at this link
+ def link(self, obj):
+ if not obj:
+ raise FeedDoesNotExist
+ return settings.BASE_URL + 'rss/category/' + str(obj.id)
+ # Description of the feed
+ def description(self, obj):
+ return obj.description
+ # Link of the item/POI. Here the link is the permalink of the marker/POI
+ def item_link(self, item):
+ # Return the permalink of the POI :
+ # Get thirst the attribute point of the marker
+ # Then we had to transform this to the good system metric. From srid=4326 to srid=900913
+ coord = item.point
+ coord.transform(settings.EPSG_PROJECTION)
+ return settings.BASE_URL + '?zoom=16&lat=' + str(coord.y) + '&lon=' + str(coord.x) + '&layers=BTT&checked_categories=1&display_submited=false'
+ # Date of the Marker when it has been available
+ def item_pubdate(self,item):
+ return item.avail_date
+ # Requests to marker where its category match the category is requested AND its status is available
+ # This returns a list of the 15 last markers/POIs ordering by date
+ def items(self, obj):
+ return Marker.objects.filter(subcategory__category__id__exact=obj.id, status__exact='A').order_by('-avail_date')[:15]
+
+class LatestPOIsBySubCategory(Feed):
+ '''
+ Last Points of interests by SubCategory in Feeds
+ '''
+ title_template = "rss_title.html"
+ description_template = "rss_descr.html"
+
+ def get_object(self, bits):
+ if len(bits) != 1:
+ raise ObjectDoesNotExist
+ return SubCategory.objects.get(id__exact=bits[0])
+
+ def title(self, obj):
+ return obj.category.name + "Chimere - %s" % obj.name
+
+ def link(self, obj):
+ if not obj:
+ raise FeedDoesNotExist
+ return settings.BASE_URL + 'rss/subcategory/' + str(obj.id)
+
+ def description(self, obj):
+ return ""
+
+ def item_link(self, item):
+ # Renvoyer le permalink du POI :
+ coord = item.point
+ coord.transform(settings.EPSG_PROJECTION)
+ return settings.BASE_URL + '?zoom=16&lat=' + str(coord.y) + '&lon=' + str(coord.x) + '&layers=BTT&checked_categories=1&display_submited=false'
+
+ def item_pubdate(self,item):
+ return item.avail_date
+
+ def items(self, obj):
+ return Marker.objects.filter(subcategory__id__exact=obj.id, status__exact='A').order_by('-avail_date')[:15]
+
+class LatestPOIs(Feed):
+ '''
+ Last Points of interests
+ '''
+ title_template = "rss_title.html"
+ description_template = "rss_descr.html"
+
+ def title(self):
+ return "Chimere - Last POIs"
+
+ def link(self):
+ return settings.BASE_URL + 'rss/categories/'
+
+ def description(self):
+ return "Latest POIs from Chimere"
+
+ def item_link(self, item):
+ # Renvoyer le permalink du POI :
+ coord = item.point
+ coord.transform(settings.EPSG_PROJECTION)
+ return settings.BASE_URL + '?zoom=16&lat=' + str(coord.y) + '&lon=' + str(coord.x) + '&layers=BTT&checked_categories=1&display_submited=false'
+
+ def item_pubdate(self,item):
+ return item.avail_date
+
+ def items(self):
+ return Marker.objects.filter(status__exact='A').order_by('-avail_date')[:15]
+
+
+class LatestPOIsByZone(Feed):
+ '''
+ Last Points of interests by zone by coordinates
+ '''
+ title_template = "rss_title.html"
+ description_template = "rss_descr.html"
+ # Attributes which store coordinates of the requested zone
+ upper_left_lat = 0
+ upper_left_lon = 0
+ lower_right_lat = 0
+ lower_right_lon = 0
+
+ def get_object(self, bits):
+ if len(bits) != 1:
+ raise ObjectDoesNotExist
+ # Get the extra url. Parameters are the coordinates of the zone (the upper left and lower right points)
+ # Then define the upper right and lower left points
+ coordinates = str(bits[0]).split(',')
+ upper_left_lat = float(coordinates[0])
+ upper_left_lon = float(coordinates[1])
+ lower_right_lat = float(coordinates[2])
+ lower_right_lon = float(coordinates[3])
+
+ upper_right_lat = upper_left_lat
+ upper_right_lon = lower_right_lon
+ lower_left_lat = lower_right_lat
+ lower_left_lon = upper_left_lon
+ # Define a Polygon with the 4 points of the zone.
+ # Cordinates are define with a srid=900913, use by google, yahoo but no OpenStreeMap
+ areaBox = Polygon(((upper_left_lon, upper_left_lat),
+ (upper_right_lon, upper_right_lat),
+ (lower_right_lon, lower_right_lat),
+ (lower_left_lon, lower_left_lat),
+ (upper_left_lon, upper_left_lat)),
+ srid=settings.EPSG_PROJECTION)
+ # OSM uses the standard srid=4326, wich uses the real pairs latitude/longitude in degrees.
+ areaBox.transform(settings.EPSG_DISPLAY_PROJECTION)
+
+ return areaBox
+
+ def title(self, obj):
+ return "Chimere - Last POIs by area"
+ # Define the link of the feed. It's the same url as we get in the method get_object
+ def link(self, obj):
+ if not obj:
+ raise FeedDoesNotExist
+ return settings.BASE_URL + 'rss/area/' + str(self.upper_left_lat) + ',' + str(self.upper_left_lon) + ',' + str(self.lower_right_lat) + ',' + str(self.lower_right_lon)
+
+ def description(self, obj):
+ return ""
+
+ # Link of the item/POI. Here the link is the permalink of the marker/POI
+ def item_link(self, item):
+ # Return the permalink of the POI :
+ # Get thirst the attribute point of the marker
+ # Then we had to transform this to the good system metric. From srid=4326 to srid=900913
+ coord = item.point
+ coord.transform(settings.EPSG_PROJECTION)
+ return settings.BASE_URL + '?zoom=16&lat=' + str(coord.y) + '&lon=' + str(coord.x) + '&layers=BTT&checked_categories=1&display_submited=false'
+ # Return the date of the Marker
+ def item_pubdate(self,item):
+ return item.avail_date
+ # Request to return Markers WHERE there points are containes in the zone which is requested.
+ # This returns a list of the 15 last markers/POIs ordering by date
+ def items(self, obj):
+ return Marker.objects.filter(point__contained=obj, status__exact='A').order_by('-avail_date')[:15]
+
+class LatestPOIsByZoneID(Feed):
+ '''
+ Last Points of interests by zone by id
+ '''
+ title_template = "rss_title.html"
+ description_template = "rss_descr.html"
+
+ def get_object(self, bits):
+ if len(bits) != 1:
+ raise ObjectDoesNotExist
+
+ return Area.objects.get(id__exact=bits[0])
+
+ def title(self, obj):
+ return "Chimere - Last POIs of %s" % obj.name
+
+ def link(self, obj):
+ if not obj:
+ raise FeedDoesNotExist
+ return settings.BASE_URL + 'rss/areaid/' + str(obj.id)
+
+ def description(self, obj):
+ return ""
+
+ def item_link(self, item):
+ coord = item.point
+ coord.transform(settings.EPSG_PROJECTION)
+ return settings.BASE_URL + '?zoom=16&lat=' + str(coord.y) + '&lon=' + str(coord.x) + '&layers=BTT&checked_categories=1&display_submited=false'
+
+ def item_pubdate(self,item):
+ return item.avail_date
+
+ def items(self, obj):
+ upper_left_lat = float(obj.upper_left_corner.x)
+ upper_left_lon = float(obj.upper_left_corner.y)
+ lower_right_lat = float(obj.lower_right_corner.x)
+ lower_right_lon = float(obj.lower_right_corner.y)
+
+ upper_right_lat = upper_left_lat
+ upper_right_lon = lower_right_lon
+ lower_left_lat = lower_right_lat
+ lower_left_lon = upper_left_lon
+
+ areaBox = Polygon(((upper_left_lon, upper_left_lat),
+ (upper_right_lon, upper_right_lat),
+ (lower_right_lon, lower_right_lat),
+ (lower_left_lon, lower_left_lat),
+ (upper_left_lon, upper_left_lat)),
+ srid=settings.EPSG_PROJECTION)
+
+ areaBox.transform(settings.EPSG_DISPLAY_PROJECTION)
+
+ return Marker.objects.filter(point__contained=areaBox)
diff --git a/chimere/rss/urls.py b/chimere/rss/urls.py
new file mode 100644
index 0000000..3b61969
--- /dev/null
+++ b/chimere/rss/urls.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2010 Pierre Clarenc <pierre.crc_AT_gmailDOTcom>,
+# Samuel Renard <renard.samuel_AT_gmailDOTcom>,
+# Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# See the file COPYING for details.
+
+
+from django.conf.urls.defaults import *
+
+from chimere.rss.feeds import LatestPOIsByCategory, LatestPOIsBySubCategory, \
+ LatestPOIs, LatestPOIsByZone, LatestPOIsByZoneID
+from chimere.urls import BASE, EXTRA
+
+feeds = {
+ 'category': LatestPOIsByCategory,
+ 'subcategory': LatestPOIsBySubCategory,
+ 'global': LatestPOIs,
+ 'area': LatestPOIsByZone,
+ 'areaid': LatestPOIsByZoneID
+}
+
+urlpatterns = patterns('',
+ (BASE + EXTRA + r'rss/$', 'chimere.rss.views.rss'),
+ (BASE + EXTRA + r'rss/(?P<url>.*)/$',
+ 'django.contrib.syndication.views.feed', {'feed_dict': feeds}),
+)
+
diff --git a/chimere/rss/views.py b/chimere/rss/views.py
new file mode 100644
index 0000000..12269cd
--- /dev/null
+++ b/chimere/rss/views.py
@@ -0,0 +1,153 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2010 Pierre Clarenc <pierre.crc_AT_gmailDOTcom>,
+# Samuel Renard <renard.samuel_AT_gmailDOTcom>,
+# Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# See the file COPYING for details.
+
+"""
+Views of the project
+"""
+
+import datetime
+
+from django.shortcuts import render_to_response
+from django.template import loader
+from django.http import HttpResponseRedirect, HttpResponse
+from django.core import serializers
+
+from chimere import settings
+from chimere.main.actions import actions
+
+from chimere.main.models import Category, SubCategory, PropertyModel, Marker, \
+ Route, News, Area, Color
+
+# Pierre CLARENC : 19/01/2010 : Add AreaWidget
+from chimere.main.widgets import getMapJS, PointChooserWidget, \
+ RouteChooserWidget, URL_OSM_JS, URL_OSM_CSS, AreaWidget
+# Pierre CLARENC : 19/01/2010 : End
+# Pierre CLARENC : 19/01/2010 : Add AreaAdminForm
+from chimere.main.forms import MarkerForm, RouteForm, AreaForm, notifyStaff
+# Pierre CLARENC : 19/01/2010 : End
+
+def rss(request):
+ '''
+ Redirect to RSS subscription page
+ '''
+ # If the form has been submited
+ if request.method == "POST":
+
+ # User has defined the kind of POI he is interested in : POI in a area (GET method is used for the link with RSS icon in the browser)
+ if 'rss_category' in request.POST:
+ #User wants to follow all the new POI
+ if request.POST['rss_category'] == 'global':
+ feeds_link = '/' + settings.EXTRA_URL + 'rss/global/'
+ return HttpResponseRedirect(feeds_link)
+ # User wants to follow all the new POI by category or subcategory
+ elif request.POST['rss_category'] == 'poi':
+ response_dct = {'actions':actions, 'action_selected':'rss',
+ 'media_path':settings.MEDIA_URL,
+ 'extra_url':settings.EXTRA_URL,
+ 'category_rss_feed':'category',
+ 'sub_categories':SubCategory.getAvailable(['M', 'B'])
+ }
+ return render_to_response('rss.html', response_dct)
+ # User wants to follow all the new POI situated in a defined area
+ elif request.POST['rss_category'] == 'area':
+ # An unbound form
+ form = AreaForm()
+ response_dct = {'actions':actions, 'action_selected':'rss',
+ 'media_path':settings.MEDIA_URL,
+ 'extra_url':settings.EXTRA_URL,
+ 'map_layer':settings.MAP_LAYER,
+ 'extra_head':form.media,
+ 'form':form,
+ 'category_rss_feed':'area',
+ 'area_id':Area.getAvailable(),
+ 'area_widget':AreaWidget().render('area', None)
+ }
+ return render_to_response('rss.html', response_dct)
+ # Error when submitting the form
+ else:
+ response_dct = {'actions':actions, 'action_selected':'rss',
+ 'media_path':settings.MEDIA_URL,
+ 'extra_url':settings.EXTRA_URL,
+ 'error_message':'Error - Please choose a correct choice in the list',
+ 'category_rss_feed':'category',
+ 'sub_categories':SubCategory.getAvailable(['M', 'B'])
+ }
+ return render_to_response('rss.html', response_dct)
+
+ # User has specified the category or subcategory he wants to follow => we redirect him towards the related rss feed
+ if 'subcategory' in request.POST and request.POST['subcategory'] != '':
+ idCat = request.POST['subcategory']
+ if idCat.find("cat_") != -1 :
+ list_Cat = idCat.split('_')
+ feeds_link = '/' + settings.EXTRA_URL + 'rss/category/' + list_Cat[1]
+ return HttpResponseRedirect(feeds_link)
+
+ else:
+ feeds_link = '/' + settings.EXTRA_URL + 'rss/subcategory/' + idCat
+ return HttpResponseRedirect(feeds_link)
+
+ # User has specified the ID of the area he wants to follow
+ if 'id_area' in request.POST and request.POST['id_area'] != '':
+ feeds_link = '/' + settings.EXTRA_URL + 'rss/areaid/' + request.POST['id_area']
+ return HttpResponseRedirect(feeds_link)
+
+ # User has specified the area he wants to follow => we redirect him towards the related rss feed (using upper left and lower right coordinates)
+ elif 'upper_left_lat' in request.POST and request.POST['upper_left_lat'] != '' and 'upper_left_lon' in request.POST and request.POST['upper_left_lon'] != '' and 'lower_right_lon' in request.POST and request.POST['lower_right_lon'] != '' and 'lower_right_lat' in request.POST and request.POST['lower_right_lat'] != '' :
+ feeds_link = '/' + settings.EXTRA_URL + 'rss/area/' + request.POST['upper_left_lat'] + ',' + request.POST['upper_left_lon'] + ',' + request.POST['lower_right_lat'] + ',' + request.POST['lower_right_lon']
+ return HttpResponseRedirect(feeds_link)
+
+
+ # GET method is used for linking with the RSS icon in the browser when user wants to choose a category to follow
+ elif request.method == "GET" and 'rss_category' in request.GET:
+ if request.GET['rss_category'] == 'global':
+ feeds_link = '/' + settings.EXTRA_URL + 'rss/global/'
+ return HttpResponseRedirect(feeds_link)
+ if request.GET['rss_category'] == 'poi':
+ response_dct = {'actions':actions, 'action_selected':'rss',
+ 'media_path':settings.MEDIA_URL,
+ 'extra_url':settings.EXTRA_URL,
+ 'category_rss_feed':'category',
+ 'sub_categories':SubCategory.getAvailable(['M', 'B'])
+ }
+ return render_to_response('rss.html', response_dct)
+ if request.GET['rss_category'] == 'area':
+ # An unbound form
+ form = AreaForm()
+ response_dct = {'actions':actions, 'action_selected':'rss',
+ 'media_path':settings.MEDIA_URL,
+ 'extra_url':settings.EXTRA_URL,
+ 'map_layer':settings.MAP_LAYER,
+ 'extra_head':form.media,
+ 'form':form,
+ 'category_rss_feed':'area',
+ 'area_id':Area.getAvailable(),
+ 'area_widget':AreaWidget().render('area', None)
+ }
+ return render_to_response('rss.html', response_dct)
+
+ # User access to the RSS tab
+ else:
+ response_dct = {'actions':actions, 'action_selected':'rss',
+ 'media_path':settings.MEDIA_URL,
+ 'category_rss_feed':'',
+ 'extra_url':settings.EXTRA_URL
+ }
+ return render_to_response('rss.html', response_dct)
diff --git a/chimere/settings.py.example b/chimere/settings.py.example
index d59d119..54118a9 100644
--- a/chimere/settings.py.example
+++ b/chimere/settings.py.example
@@ -142,5 +142,8 @@ INSTALLED_APPS = (
'django.contrib.sessions',
'django.contrib.sites',
'chimere.main',
+ # activate it if you want to use migration scripts
'chimere.scripts',
+ # activate it if you want to use RSS feeds
+ 'chimere.rss'
)
diff --git a/chimere/urls.py b/chimere/urls.py
index 5ba0630..d32b628 100644
--- a/chimere/urls.py
+++ b/chimere/urls.py
@@ -31,47 +31,51 @@ js_info_dict = {
'packages': 'chimere',
}
-base = '^' + EXTRA_URL
+BASE = '^' + EXTRA_URL
urlpatterns = patterns('',
- (base + r'admin/(.*)', admin.site.root),
- (base + r'static/(?P<path>.*)$', 'django.views.static.serve',
+ (BASE + r'admin/(.*)', admin.site.root),
+ (BASE + r'static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': ROOT_PATH + 'static/'}),
- (base + r'media/(?P<path>.*)$', 'django.views.static.serve',
+ (BASE + r'media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': ROOT_PATH + 'media/'}),
- (base + r'jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict),
+ (BASE + r'jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict),
)
urlpatterns += patterns('chimere.main.views',
)
url_areas = Area.objects.filter(urn__isnull=False)
-urlpatterns += patterns('chimere.main.views', (base + r'$', 'index'),
- (base + r'simple/?$', 'index', {'simple':True}) )
+urlpatterns += patterns('chimere.main.views', (BASE + r'$', 'index'),
+ (BASE + r'simple/?$', 'index', {'simple':True}) )
for area in url_areas:
urlpatterns += patterns('chimere.main.views',
- (base + '(' + area.urn + ')/?$', 'index', {'default_area':area}),
- (base + '(' + area.urn + ')/simple/?$', 'index', {'default_area':area,
+ (BASE + '(' + area.urn + ')/?$', 'index', {'default_area':area}),
+ (BASE + '(' + area.urn + ')/simple/?$', 'index', {'default_area':area,
'simple':True}),)
-extra = "|".join([area.urn for area in url_areas])
+EXTRA = "|".join([area.urn for area in url_areas])
default_dct = {}
-if extra:
- extra = "(?P<area_name>%s)?/?" % extra
+if EXTRA:
+ EXTRA = "(?P<area_name>%s)?/?" % EXTRA
else:
default_dct = {'area_name':''}
urlpatterns += patterns('chimere.main.views',
-(base + extra + r'contact/$', 'contactus', default_dct),
-(base + extra + r'edit/$', 'edit', default_dct),
-(base + extra + r'edit_route/$', 'editRoute', default_dct),
-(base + extra + r'submited/(?P<action>\w+)/$', 'submited', default_dct),
-(base + extra + r'getDetail/(?P<marker_id>\d+)/$', 'getDetail', default_dct),
-(base + extra + r'getDescriptionDetail/(?P<category_id>\d+)/$',
+(BASE + EXTRA + r'contact/$', 'contactus', default_dct),
+(BASE + EXTRA + r'edit/$', 'edit', default_dct),
+(BASE + EXTRA + r'edit_route/$', 'editRoute', default_dct),
+(BASE + EXTRA + r'submited/(?P<action>\w+)/$', 'submited', default_dct),
+(BASE + EXTRA + r'getDetail/(?P<marker_id>\d+)/$', 'getDetail', default_dct),
+(BASE + EXTRA + r'getDescriptionDetail/(?P<category_id>\d+)/$',
'getDescriptionDetail', default_dct),
-(base + extra + r'getGeoObjects/(?P<category_ids>\w+)(/(?P<status>\w+))?$',
+(BASE + EXTRA + r'getGeoObjects/(?P<category_ids>\w+)(/(?P<status>\w+))?$',
'getGeoObjects', default_dct),
-(base + extra + r'getAvailableCategories/((?P<area>\w+))?(/(?P<status>\w+))?(/(?P<force>\w+))?$',
+(BASE + EXTRA + r'getAvailableCategories/((?P<area>\w+))?(/(?P<status>\w+))?(/(?P<force>\w+))?$',
'getAvailableCategories', default_dct),
-(base + extra + r'ty/(?P<tiny_urn>\w+)$', 'redirectFromTinyURN', default_dct),
+(BASE + EXTRA + r'ty/(?P<tiny_urn>\w+)$', 'redirectFromTinyURN', default_dct),
)
+
+if 'chimere.rss' in settings.INSTALLED_APPS:
+ urlpatterns += patterns('',
+ (r'^' + EXTRA_URL, include('chimere.rss.urls')),)