summaryrefslogtreecommitdiff
path: root/chimere
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-02-15 16:59:28 +0100
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-02-15 16:59:28 +0100
commitf88541bedcffdfaff485ef71287be88a58c745c2 (patch)
tree87e9fcd59da5d687d2954ae99d9f511df55058f2 /chimere
parent8ccdaf23128fbe563658ca0d9d74d2ffd831b68d (diff)
downloadChimère-f88541bedcffdfaff485ef71287be88a58c745c2.tar.bz2
Chimère-f88541bedcffdfaff485ef71287be88a58c745c2.zip
Large reorganization (refs #316), south migration script to new model names (refs #319)
Diffstat (limited to 'chimere')
-rw-r--r--chimere/actions.py (renamed from chimere/main/actions.py)0
-rw-r--r--chimere/admin.py (renamed from chimere/main/admin.py)14
-rw-r--r--chimere/default_settings.py160
-rw-r--r--chimere/forms.py (renamed from chimere/main/forms.py)8
-rwxr-xr-xchimere/manage.py11
-rw-r--r--chimere/migrations/0001_initial.py341
-rw-r--r--chimere/migrations/0002_rename_models.py154
-rw-r--r--chimere/migrations/__init__.py (renamed from chimere/main/__init__.py)0
-rw-r--r--chimere/models.py (renamed from chimere/main/models.py)179
-rw-r--r--chimere/rss/__init__.py1
-rw-r--r--chimere/rss/feeds.py230
-rw-r--r--chimere/rss/templates/rss.html73
-rw-r--r--chimere/rss/templates/rss_descr.html8
-rw-r--r--chimere/rss/templates/rss_title.html2
-rw-r--r--chimere/rss/urls.py42
-rw-r--r--chimere/rss/views.py140
-rw-r--r--chimere/templatetags/__init__.py (renamed from chimere/main/templatetags/__init__.py)0
-rw-r--r--chimere/templatetags/sanitize.py (renamed from chimere/main/templatetags/sanitize.py)0
-rw-r--r--chimere/templatetags/unlocalize_point.py (renamed from chimere/main/templatetags/unlocalize_point.py)0
-rw-r--r--chimere/urls.py82
-rw-r--r--chimere/views.py (renamed from chimere/main/views.py)8
-rw-r--r--chimere/widgets.py (renamed from chimere/main/widgets.py)11
22 files changed, 661 insertions, 803 deletions
diff --git a/chimere/main/actions.py b/chimere/actions.py
index 6f82028..6f82028 100644
--- a/chimere/main/actions.py
+++ b/chimere/actions.py
diff --git a/chimere/main/admin.py b/chimere/admin.py
index c3333c7..2ad749c 100644
--- a/chimere/main/admin.py
+++ b/chimere/admin.py
@@ -22,11 +22,11 @@ Settings for administration pages
"""
from chimere import settings
-from chimere.main.models import Category, Icon, SubCategory, Marker, \
- PropertyModel, News, Route, Area, ColorTheme, Color, RouteFile
-from chimere.main.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\
- NewsAdminForm, CategoryAdminForm
-from chimere.main.widgets import TextareaWidget
+from chimere.models import Category, Icon, SubCategory, Marker, \
+ PropertyModel, News, Route, Area, ColorTheme, Color, RouteFile
+from chimere.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\
+ NewsAdminForm, CategoryAdminForm
+from chimere.widgets import TextareaWidget
from django.contrib import admin
@@ -36,7 +36,7 @@ def get_areas_for_user(user):
"""
perms = user.get_all_permissions()
areas = set()
- prefix = 'main.change_area_'
+ prefix = 'chimere.change_area_'
for perm in perms:
if perm.startswith(prefix):
area = Area.objects.get(urn=perm[len(prefix):])
@@ -84,7 +84,7 @@ class RouteAdmin(admin.ModelAdmin):
areas = get_areas_for_user(request.user)
if areas:
in_areas = " or ".join([area.getIncludeSql(
- geometry='"main_route".route') for area in areas])
+ geometry='"chimere_route".route') for area in areas])
qs = qs.extra(where=[in_areas])
ordering = self.ordering or ()
if ordering:
diff --git a/chimere/default_settings.py b/chimere/default_settings.py
index 5a1d1fe..fc5177a 100644
--- a/chimere/default_settings.py
+++ b/chimere/default_settings.py
@@ -1,158 +1,46 @@
-#!/usr/bin/env python
# -*- coding: utf-8 -*-
-
-# Django settings for chimere project.
-PROJECT_NAME = u'Chimère'
-
-ROOT_PATH = '/var/local/django/chimere/'
-
-SERVER_URL = "http://www.peacefrogs.net/"
-EXTRA_URL = 'chimere/'
-BASE_URL = SERVER_URL + EXTRA_URL
-EMAIL_HOST = 'localhost'
-
-TINYMCE_URL = SERVER_URL + 'tinymce/'
-JQUERY_URL = SERVER_URL + 'jquery/jquery-1.4.4.min.js'
-GPSBABEL = '/usr/bin/gpsbabel'
-GPSBABEL_OPTIONS = 'simplify,crosstrack,error=0.005k' # simplify with an
- # error of 5 meters
-#GPSBABEL_OPTIONS = 'simplify,count=100'
-
-## chimere specific ##
-# center of the map
-DEFAULT_CENTER = (-1.679444, 48.114722)
+"""
+Here are the default settings for the Chimere app.
+Feel free to set these settings in your project, they will override these defaults.
+"""
+# The height and width of the POI icons
+CHIMERE_ICON_HEIGHT = 20
+CHIMERE_ICON_WIDTH = 20
+# The offset of the POI icons
+CHIMERE_ICON_OFFSET_X = 0
+CHIMERE_ICON_OFFSET_Y = 0
+
+# default center of the map
+CHIMERE_DEFAULT_CENTER = (2.49, 48.7)
+# Default zoom level
+CHIMERE_DEFAULT_ZOOM = 10
# projection used by the main map
# most public map providers use spherical mercator : 900913
-EPSG_PROJECTION = 900913
+CHIMERE_EPSG_PROJECTION = 900913
# projection displayed to the end user by openlayers
# chimere use the same projection to save its data in the database
-EPSG_DISPLAY_PROJECTION = 4326
+CHIMERE_EPSG_DISPLAY_PROJECTION = 4326
# to restrict the map to a defined bounding box set it here
# (left, bottom, right, top)
-RESTRICTED_EXTENT = None
+CHIMERE_RESTRICTED_EXTENT = None
# dynamic load of categories on the main map
-DYNAMIC_CATEGORIES = False
+CHIMERE_DYNAMIC_CATEGORIES = False
# display of shortcuts for areas
-DISPLAY_AREAS = True
+CHIMERE_DISPLAY_AREAS = True
# specific css for areas
-CSS_AREAS = True
+CHIMERE_CSS_AREAS = False
# number of day before an event to display
# if equal to 0: disable event management
# if you change this value from 0 to a value in a production environnement
# don't forget to run the upgrade.py script to create appropriate fields in
# the database
-DAYS_BEFORE_EVENT = 30
+CHIMERE_DAYS_BEFORE_EVENT = 30
# default id category to check on the map
-DEFAULT_CATEGORIES = [1]
+CHIMERE_DEFAULT_CATEGORIES = [1]
# JS definition of the main map cf. OpenLayers documentation for more details
#MAP_LAYER = '''new OpenLayers.Layer.OSM.CycleMap("Cycle map", {
#displayOutsideMaxExtent: true, wrapDateLine: true})''' # OSM cyclemap
-MAP_LAYER = "new OpenLayers.Layer.OSM.Mapnik('Mapnik')" # OSM mapnik map
-
-DEBUG = True
-TEMPLATE_DEBUG = DEBUG
-
-ADMINS = (
- # ('Your Name', 'your_email@domain.com'),
-)
-
-MANAGERS = ADMINS
-
-DATABASES = {
- 'default': {
- 'NAME': 'ratatouille',
- 'ENGINE': 'django.contrib.gis.db.backends.postgis',
- 'HOST': 'localhost',
- 'PORT': '5432',
- 'USER': 'ratatouille',
- 'PASSWORD': 'wiki',
- },
-}
-
-# Local time zone for this installation. Choices can be found here:
-# http://www.postgresql.org/docs/8.1/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE
-# although not all variations may be possible on all operating systems.
-# If running in a Windows environment this must be set to the same as your
-# system time zone.
-TIME_ZONE = 'Europe/Paris'
-
-# Language code for this installation. All choices can be found here:
-# http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes
-# http://blogs.law.harvard.edu/tech/stories/storyReader$15
-LANGUAGE_CODE = 'fr-fr'
-
-SITE_ID = 1
-
-# If you set this to False, Django will make some optimizations so as not
-# to load the internationalization machinery.
-USE_I18N = True
-USE_L10N = True
-
-# Absolute path to the directory that holds media.
-# Example: "/home/media/media.lawrence.com/"
-MEDIA_ROOT = ROOT_PATH + 'static/'
-
-# URL that handles the media served from MEDIA_ROOT.
-# Example: "http://media.lawrence.com"
-MEDIA_URL = '/' + EXTRA_URL + 'static/'
-
-# share with
-SHARE_NETWORKS = (
-("Email", 'mailto:?subject=%(text)s&body=%(url)s',
- MEDIA_URL + 'icons/email.png'),
-("Facebook", 'http://www.facebook.com/sharer.php?t=%(text)s&u=%(url)s',
- MEDIA_URL + 'icons/facebook.png'),
-("Twitter", 'http://twitter.com/home?status=%(text)s %(url)s',
- MEDIA_URL + 'icons/twitter.png'),
-("Identi.ca", 'http://identi.ca/index.php?action=newnotice&status_textarea=%(text)s %(url)s',
- MEDIA_URL + 'icons/identica.png'),
-)
-
-# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
-# trailing slash.
-# Examples: "http://foo.com/media/", "/media/".
-ADMIN_MEDIA_PREFIX = '/' + EXTRA_URL + 'media/'
-
-# Make this unique, and don't share it with anybody.
-SECRET_KEY = 'achanger_!ToChange!'
-
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
- 'django.template.loaders.filesystem.load_template_source',
- 'django.template.loaders.app_directories.load_template_source',
-# 'django.template.loaders.eggs.load_template_source',
-)
-
-MIDDLEWARE_CLASSES = (
- 'django.middleware.common.CommonMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.middleware.doc.XViewMiddleware',
-)
-
-ROOT_URLCONF = 'chimere.urls'
-
-TEMPLATE_DIRS = [
- # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
- # Always use forward slashes, even on Windows.
- # Don't forget to use absolute paths, not relative paths.
- ROOT_PATH + 'templates',
-]
-
-INSTALLED_APPS = (
- 'django.contrib.auth',
- 'django.contrib.admin',
- 'django.contrib.contenttypes',
- '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'
-)
+CHIMERE_MAP_LAYER = "new OpenLayers.Layer.OSM.Mapnik('Mapnik')" # OSM mapnik map
-if 'chimere.rss' in INSTALLED_APPS:
- TEMPLATE_DIRS.append(ROOT_PATH + 'rss/templates')
diff --git a/chimere/main/forms.py b/chimere/forms.py
index 20027ee..3691408 100644
--- a/chimere/main/forms.py
+++ b/chimere/forms.py
@@ -29,9 +29,9 @@ from django.core.mail import EmailMessage, BadHeaderError
from chimere import settings
-from chimere.main.models import Marker, Route, PropertyModel, Property, Area,\
+from chimere.models import Marker, Route, PropertyModel, Property, Area,\
News, Category, SubCategory, RouteFile
-from chimere.main.widgets import AreaField, PointField, TextareaWidget
+from chimere.widgets import AreaField, PointField, TextareaWidget
from datetime import timedelta, datetime, tzinfo
@@ -305,8 +305,8 @@ class AreaAdminForm(forms.ModelForm):
new_area.upper_left_corner = 'POINT(%s %s)' % (area[0][0], area[0][1])
new_area.lower_right_corner = 'POINT(%s %s)' % (area[1][0],
area[1][1])
- content_type = ContentType.objects.get(app_label="main",
- model="area")
+ content_type = ContentType.objects.get(app_label="chimere",
+ model="area")
if new_area.urn:
mnemo = 'change_area_' + new_area.urn
perm = Permission.objects.filter(codename=mnemo)
diff --git a/chimere/manage.py b/chimere/manage.py
deleted file mode 100755
index bcdd55e..0000000
--- a/chimere/manage.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/python
-from django.core.management import execute_manager
-try:
- import settings # Assumed to be in the same directory.
-except ImportError:
- import sys
- sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
- sys.exit(1)
-
-if __name__ == "__main__":
- execute_manager(settings)
diff --git a/chimere/migrations/0001_initial.py b/chimere/migrations/0001_initial.py
new file mode 100644
index 0000000..3ba693f
--- /dev/null
+++ b/chimere/migrations/0001_initial.py
@@ -0,0 +1,341 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding model 'News'
+ db.create_table('main_news', (
+ ('available', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)),
+ ('date', self.gf('django.db.models.fields.DateField')(auto_now_add=True, blank=True)),
+ ('content', self.gf('django.db.models.fields.TextField')()),
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('title', self.gf('django.db.models.fields.CharField')(max_length=150)),
+ ))
+ db.send_create_signal('chimere', ['News'])
+
+ # Adding model 'TinyUrl'
+ db.create_table('main_tinyurl', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('parameters', self.gf('django.db.models.fields.CharField')(max_length=500)),
+ ))
+ db.send_create_signal('chimere', ['TinyUrl'])
+
+ # Adding model 'ColorTheme'
+ db.create_table('main_colortheme', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=150)),
+ ))
+ db.send_create_signal('chimere', ['ColorTheme'])
+
+ # Adding model 'Color'
+ db.create_table('main_color', (
+ ('code', self.gf('django.db.models.fields.CharField')(max_length=6)),
+ ('color_theme', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.ColorTheme'])),
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('order', self.gf('django.db.models.fields.IntegerField')()),
+ ))
+ db.send_create_signal('chimere', ['Color'])
+
+ # Adding model 'Category'
+ db.create_table('main_category', (
+ ('available', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)),
+ ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+ ('order', self.gf('django.db.models.fields.IntegerField')()),
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=150)),
+ ))
+ db.send_create_signal('chimere', ['Category'])
+
+ # Adding model 'Icon'
+ db.create_table('main_icon', (
+ ('width', self.gf('django.db.models.fields.IntegerField')()),
+ ('image', self.gf('django.db.models.fields.files.ImageField')(max_length=100)),
+ ('height', self.gf('django.db.models.fields.IntegerField')()),
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=150)),
+ ))
+ db.send_create_signal('chimere', ['Icon'])
+
+ # Adding model 'SubCategory'
+ db.create_table('main_subcategory', (
+ ('category', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.Category'])),
+ ('available', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=150)),
+ ('order', self.gf('django.db.models.fields.IntegerField')()),
+ ('item_type', self.gf('django.db.models.fields.CharField')(max_length=1)),
+ ('color_theme', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.ColorTheme'], null=True, blank=True)),
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('icon', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.Icon'])),
+ ))
+ db.send_create_signal('chimere', ['SubCategory'])
+
+ # Adding M2M table for field areas on 'SubCategory'
+ db.create_table('main_subcategory_areas', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('subcategory', models.ForeignKey(orm['chimere.subcategory'], null=False)),
+ ('area', models.ForeignKey(orm['chimere.area'], null=False))
+ ))
+ db.create_unique('main_subcategory_areas', ['subcategory_id', 'area_id'])
+
+ # Adding model 'Marker'
+ db.create_table('main_marker', (
+ ('status', self.gf('django.db.models.fields.CharField')(max_length=1)),
+ ('picture', self.gf('django.db.models.fields.files.ImageField')(max_length=100, null=True, blank=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=150)),
+ ('end_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)),
+ ('point', self.gf('chimere.widgets.PointField')()),
+ ('route', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.Route'], null=True, blank=True)),
+ ('height', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)),
+ ('width', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)),
+ ('start_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)),
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ))
+ db.send_create_signal('chimere', ['Marker'])
+
+ # Adding M2M table for field categories on 'Marker'
+ db.create_table('main_marker_categories', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('marker', models.ForeignKey(orm['chimere.marker'], null=False)),
+ ('subcategory', models.ForeignKey(orm['chimere.subcategory'], null=False))
+ ))
+ db.create_unique('main_marker_categories', ['marker_id', 'subcategory_id'])
+
+ # Adding model 'RouteFile'
+ db.create_table('main_routefile', (
+ ('file_type', self.gf('django.db.models.fields.CharField')(max_length=1)),
+ ('raw_file', self.gf('django.db.models.fields.files.FileField')(max_length=100)),
+ ('simplified_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, null=True, blank=True)),
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=150)),
+ ))
+ db.send_create_signal('chimere', ['RouteFile'])
+
+ # Adding model 'Route'
+ db.create_table('main_route', (
+ ('status', self.gf('django.db.models.fields.CharField')(max_length=1)),
+ ('picture', self.gf('django.db.models.fields.files.ImageField')(max_length=100, null=True, blank=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=150)),
+ ('end_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)),
+ ('route', self.gf('chimere.widgets.RouteField')()),
+ ('height', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)),
+ ('width', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)),
+ ('associated_file', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.RouteFile'], null=True, blank=True)),
+ ('start_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)),
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ))
+ db.send_create_signal('chimere', ['Route'])
+
+ # Adding M2M table for field categories on 'Route'
+ db.create_table('main_route_categories', (
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+ ('route', models.ForeignKey(orm['chimere.route'], null=False)),
+ ('subcategory', models.ForeignKey(orm['chimere.subcategory'], null=False))
+ ))
+ db.create_unique('main_route_categories', ['route_id', 'subcategory_id'])
+
+ # Adding model 'Area'
+ db.create_table('chimere_area', (
+ ('available', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=150)),
+ ('urn', self.gf('django.db.models.fields.SlugField')(db_index=True, unique=True, max_length=50, blank=True)),
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('upper_left_corner', self.gf('django.contrib.gis.db.models.fields.PointField')(default='POINT(0 0)')),
+ ('order', self.gf('django.db.models.fields.IntegerField')()),
+ ('lower_right_corner', self.gf('django.contrib.gis.db.models.fields.PointField')(default='POINT(0 0)')),
+ ))
+ db.send_create_signal('chimere', ['Area'])
+
+ # Adding model 'PropertyModel'
+ db.create_table('main_propertymodel', (
+ ('available', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)),
+ ('order', self.gf('django.db.models.fields.IntegerField')()),
+ ('type', self.gf('django.db.models.fields.CharField')(max_length=1)),
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('name', self.gf('django.db.models.fields.CharField')(max_length=150)),
+ ))
+ db.send_create_signal('chimere', ['PropertyModel'])
+
+ # Adding model 'Property'
+ db.create_table('main_property', (
+ ('marker', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.Marker'])),
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('value', self.gf('django.db.models.fields.TextField')()),
+ ('propertymodel', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.PropertyModel'])),
+ ))
+ db.send_create_signal('chimere', ['Property'])
+
+
+ def backwards(self, orm):
+
+ # Deleting model 'News'
+ db.delete_table('main_news')
+
+ # Deleting model 'TinyUrl'
+ db.delete_table('main_tinyurl')
+
+ # Deleting model 'ColorTheme'
+ db.delete_table('main_colortheme')
+
+ # Deleting model 'Color'
+ db.delete_table('main_color')
+
+ # Deleting model 'Category'
+ db.delete_table('main_category')
+
+ # Deleting model 'Icon'
+ db.delete_table('main_icon')
+
+ # Deleting model 'SubCategory'
+ db.delete_table('main_subcategory')
+
+ # Removing M2M table for field areas on 'SubCategory'
+ db.delete_table('main_subcategory_areas')
+
+ # Deleting model 'Marker'
+ db.delete_table('main_marker')
+
+ # Removing M2M table for field categories on 'Marker'
+ db.delete_table('main_marker_categories')
+
+ # Deleting model 'RouteFile'
+ db.delete_table('main_routefile')
+
+ # Deleting model 'Route'
+ db.delete_table('main_route')
+
+ # Removing M2M table for field categories on 'Route'
+ db.delete_table('main_route_categories')
+
+ # Deleting model 'Area'
+ db.delete_table('chimere_area')
+
+ # Deleting model 'PropertyModel'
+ db.delete_table('main_propertymodel')
+
+ # Deleting model 'Property'
+ db.delete_table('main_property')
+
+
+ models = {
+ 'chimere.area': {
+ 'Meta': {'object_name': 'Area'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lower_right_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'urn': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'unique': 'True', 'max_length': '50', 'blank': 'True'})
+ },
+ 'chimere.category': {
+ 'Meta': {'object_name': 'Category', 'db_table': "'main_category'"},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.color': {
+ 'Meta': {'object_name': 'Color', 'db_table': "'main_color'"},
+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '6'}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.colortheme': {
+ 'Meta': {'object_name': 'ColorTheme', 'db_table': "'main_colortheme'"},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.icon': {
+ 'Meta': {'object_name': 'Icon', 'db_table': "'main_icon'"},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.marker': {
+ 'Meta': {'object_name': 'Marker', 'db_table': "'main_marker'"},
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'point': ('chimere.widgets.PointField', [], {}),
+ 'route': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Route']", 'null': 'True', 'blank': 'True'}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.news': {
+ 'Meta': {'object_name': 'News', 'db_table': "'main_news'"},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'content': ('django.db.models.fields.TextField', [], {}),
+ 'date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.property': {
+ 'Meta': {'object_name': 'Property', 'db_table': "'main_property'"},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Marker']"}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.TextField', [], {})
+ },
+ 'chimere.propertymodel': {
+ 'Meta': {'object_name': 'PropertyModel', 'db_table': "'main_propertymodel'"},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+ },
+ 'chimere.route': {
+ 'Meta': {'object_name': 'Route', 'db_table': "'main_route'"},
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'route': ('chimere.widgets.RouteField', [], {}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.routefile': {
+ 'Meta': {'object_name': 'RouteFile', 'db_table': "'main_routefile'"},
+ 'file_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'raw_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'simplified_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.subcategory': {
+ 'Meta': {'object_name': 'SubCategory', 'db_table': "'main_subcategory'"},
+ 'areas': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'to': "orm['chimere.Area']"}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Category']"}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']", 'null': 'True', 'blank': 'True'}),
+ 'icon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Icon']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'item_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.tinyurl': {
+ 'Meta': {'object_name': 'TinyUrl', 'db_table': "'main_tinyurl'"},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ }
+ }
+
+ complete_apps = ['chimere']
diff --git a/chimere/migrations/0002_rename_models.py b/chimere/migrations/0002_rename_models.py
new file mode 100644
index 0000000..84a91b8
--- /dev/null
+++ b/chimere/migrations/0002_rename_models.py
@@ -0,0 +1,154 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ db.rename_table('main_news', 'chimere_news')
+ db.rename_table('main_tinyurl', 'chimere_tinyurl')
+ db.rename_table('main_colortheme', 'chimere_colortheme')
+ db.rename_table('main_color', 'chimere_color')
+ db.rename_table('main_category', 'chimere_category')
+ db.rename_table('main_icon', 'chimere_icon')
+ db.rename_table('main_subcategory', 'chimere_subcategory')
+ db.rename_table('main_marker', 'chimere_marker')
+ db.rename_table('main_routefile', 'chimere_routefile')
+ db.rename_table('main_route', 'chimere_route')
+ db.rename_table('main_propertymodel', 'chimere_propertymodel')
+ db.rename_table('main_property', 'chimere_property')
+
+ def backwards(self, orm):
+ db.rename_table('chimere_news', 'main_news')
+ db.rename_table('chimere_tinyurl', 'main_tinyurl')
+ db.rename_table('chimere_colortheme', 'main_colortheme')
+ db.rename_table('chimere_color', '_color')
+ db.rename_table('chimere_category', 'main_category')
+ db.rename_table('chimere_icon', 'main_icon')
+ db.rename_table('chimere_subcategory', 'main_subcategory')
+ db.rename_table('chimere_marker', 'main_marker')
+ db.rename_table('chimere_routefile', 'main_routefile')
+ db.rename_table('chimere_route', 'main_route')
+ db.rename_table('chimere_propertymodel', 'main_propertymodel')
+ db.rename_table('chimere_property', 'main_property')
+
+ models = {
+ 'chimere.area': {
+ 'Meta': {'object_name': 'Area'},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lower_right_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}),
+ 'urn': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'unique': 'True', 'max_length': '50', 'blank': 'True'})
+ },
+ 'chimere.category': {
+ 'Meta': {'object_name': 'Category', 'db_table': "'main_category'"},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.color': {
+ 'Meta': {'object_name': 'Color', 'db_table': "'main_color'"},
+ 'code': ('django.db.models.fields.CharField', [], {'max_length': '6'}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.colortheme': {
+ 'Meta': {'object_name': 'ColorTheme', 'db_table': "'main_colortheme'"},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.icon': {
+ 'Meta': {'object_name': 'Icon', 'db_table': "'main_icon'"},
+ 'height': ('django.db.models.fields.IntegerField', [], {}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.marker': {
+ 'Meta': {'object_name': 'Marker', 'db_table': "'main_marker'"},
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'point': ('chimere.widgets.PointField', [], {}),
+ 'route': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Route']", 'null': 'True', 'blank': 'True'}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.news': {
+ 'Meta': {'object_name': 'News', 'db_table': "'main_news'"},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'content': ('django.db.models.fields.TextField', [], {}),
+ 'date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '150'})
+ },
+ 'chimere.property': {
+ 'Meta': {'object_name': 'Property', 'db_table': "'main_property'"},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'marker': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Marker']"}),
+ 'propertymodel': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.PropertyModel']"}),
+ 'value': ('django.db.models.fields.TextField', [], {})
+ },
+ 'chimere.propertymodel': {
+ 'Meta': {'object_name': 'PropertyModel', 'db_table': "'main_propertymodel'"},
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {}),
+ 'type': ('django.db.models.fields.CharField', [], {'max_length': '1'})
+ },
+ 'chimere.route': {
+ 'Meta': {'object_name': 'Route', 'db_table': "'main_route'"},
+ 'associated_file': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.RouteFile']", 'null': 'True', 'blank': 'True'}),
+ 'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}),
+ 'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+ 'route': ('chimere.widgets.RouteField', [], {}),
+ 'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.routefile': {
+ 'Meta': {'object_name': 'RouteFile', 'db_table': "'main_routefile'"},
+ 'file_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'raw_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
+ 'simplified_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'})
+ },
+ 'chimere.subcategory': {
+ 'Meta': {'object_name': 'SubCategory', 'db_table': "'main_subcategory'"},
+ 'areas': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'to': "orm['chimere.Area']"}),
+ 'available': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
+ 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Category']"}),
+ 'color_theme': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.ColorTheme']", 'null': 'True', 'blank': 'True'}),
+ 'icon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Icon']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'item_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
+ 'order': ('django.db.models.fields.IntegerField', [], {})
+ },
+ 'chimere.tinyurl': {
+ 'Meta': {'object_name': 'TinyUrl', 'db_table': "'main_tinyurl'"},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'parameters': ('django.db.models.fields.CharField', [], {'max_length': '500'})
+ }
+ }
+
+ complete_apps = ['chimere']
diff --git a/chimere/main/__init__.py b/chimere/migrations/__init__.py
index e69de29..e69de29 100644
--- a/chimere/main/__init__.py
+++ b/chimere/migrations/__init__.py
diff --git a/chimere/main/models.py b/chimere/models.py
index 144b49d..8c80fab 100644
--- a/chimere/main/models.py
+++ b/chimere/models.py
@@ -25,39 +25,37 @@ import lxml.etree as ElementTree
from datetime import datetime, timedelta
from subprocess import Popen, PIPE
-from django.core.files import File
-
-from django.utils.translation import ugettext_lazy as _
-
+from django.conf import settings
from django.contrib.gis.db import models
from django.contrib.gis.gdal import SpatialReference
from django.contrib import admin
+from django.core.files import File
+from django.utils.translation import ugettext_lazy as _
-from chimere import settings
-from chimere.main.widgets import PointField, RouteField, SelectMultipleField
+from chimere.widgets import PointField, RouteField, SelectMultipleField
class News(models.Model):
"""News of the site
"""
- title = models.CharField(_("Name"), max_length=150)
- available = models.BooleanField(_("Available"))
- date = models.DateField(_("Date"), auto_now_add=True)
+ title = models.CharField(_(u"Name"), max_length=150)
+ available = models.BooleanField(_(u"Available"))
+ date = models.DateField(_(u"Date"), auto_now_add=True)
content = models.TextField()
def __unicode__(self):
ordering = ["-date"]
return self.title
class Meta:
- verbose_name = _("News")
- verbose_name_plural = _("News")
+ verbose_name = _(u"News")
+ verbose_name_plural = _(u"News")
class TinyUrl(models.Model):
"""Tinyfied version of permalink parameters
"""
- parameters = models.CharField(_("Parameters"), max_length=500)
+ parameters = models.CharField(_("uParameters"), max_length=500)
def __unicode__(self):
return self.parameters
class Meta:
- verbose_name = _("TinyUrl")
+ verbose_name = _(u"TinyUrl")
digits = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
base = len(digits)
@@ -92,70 +90,70 @@ class TinyUrl(models.Model):
class ColorTheme(models.Model):
"""Color theme
"""
- name = models.CharField(_("Name"), max_length=150)
+ name = models.CharField(_(u"Name"), max_length=150)
def __unicode__(self):
return self.name
class Meta:
- verbose_name = _("Color theme")
+ verbose_name = _(u"Color theme")
class Color(models.Model):
"""Color
"""
- code = models.CharField(_("Code"), max_length=6)
- order = models.IntegerField(_("Order"))
- color_theme = models.ForeignKey(ColorTheme, verbose_name=_("Color theme"))
+ code = models.CharField(_(u"Code"), max_length=6)
+ order = models.IntegerField(_(u"Order"))
+ color_theme = models.ForeignKey(ColorTheme, verbose_name=_(u"Color theme"))
def __unicode__(self):
return self.code
class Meta:
ordering = ["order"]
- verbose_name = _("Color")
+ verbose_name = _(u"Color")
class Category(models.Model):
"""Category of Point Of Interest (POI)
"""
- name = models.CharField(_("Name"), max_length=150)
- available = models.BooleanField(_("Available"))
- order = models.IntegerField(_("Order"))
+ name = models.CharField(_(u"Name"), max_length=150)
+ available = models.BooleanField(_(u"Available"))
+ order = models.IntegerField(_(u"Order"))
description = models.TextField(blank=True, null=True)
def __unicode__(self):
return self.name
class Meta:
ordering = ["order"]
- verbose_name = _("Category")
+ verbose_name = _(u"Category")
class Icon(models.Model):
'''Icon
'''
- name = models.CharField(_("Name"), max_length=150)
- image = models.ImageField(_("Image"), upload_to='icons',
+ name = models.CharField(_(u"Name"), max_length=150)
+ image = models.ImageField(_(u"Image"), upload_to='icons',
height_field='height', width_field='width')
- height = models.IntegerField(_("Height"))
- width = models.IntegerField(_("Width"))
+ height = models.IntegerField(_(u"Height"))
+ width = models.IntegerField(_(u"Width"))
def __unicode__(self):
return self.name
class Meta:
- verbose_name = _("Icon")
+ verbose_name = _(u"Icon")
class SubCategory(models.Model):
'''Sub-category
'''
- category = models.ForeignKey(Category, verbose_name=_("Category"))
- name = models.CharField(_("Name"), max_length=150)
- available = models.BooleanField(_("Available"))
+ category = models.ForeignKey(Category, verbose_name=_(u"Category"))
+ name = models.CharField(_(u"Name"), max_length=150)
+ available = models.BooleanField(_(u"Available"))
areas = SelectMultipleField('Area', related_name='areas', blank=True)
- icon = models.ForeignKey(Icon, verbose_name=_("Icon"))
- color_theme = models.ForeignKey(ColorTheme, verbose_name=_("Color theme"),
+ icon = models.ForeignKey(Icon, verbose_name=_(u"Icon"))
+ color_theme = models.ForeignKey(ColorTheme, verbose_name=_(u"Color theme"),
blank=True, null=True)
- order = models.IntegerField(_("Order"))
- TYPE = (('M', _('Marker')),
- ('R', _('Route')),
- ('B', _('Both')),)
- item_type = models.CharField(_("Item type"), max_length=1, choices=TYPE)
+ order = models.IntegerField(_(u"Order"))
+ TYPE = (('M', _(u'Marker')),
+ ('R', _(u'Route')),
+ ('B', _(u'Both')),)
+ item_type = models.CharField(_(u"Item type"), max_length=1, choices=TYPE)
def __unicode__(self):
return u"%s / %s" % (self.category.name, self.name)
class Meta:
ordering = ["category", "order"]
- verbose_name = _("Subcategory")
+ verbose_name = _(u"Subcategory")
@classmethod
def getAvailable(cls, item_types=None, area_name=None):
@@ -190,31 +188,32 @@ class SubCategory(models.Model):
class Marker(models.Model):
'''Marker for a POI
'''
- name = models.CharField(_("Name"), max_length=150)
+ name = models.CharField(_(u"Name"), max_length=150)
categories = SelectMultipleField(SubCategory)
- point = PointField(_("Localisation"), srid=settings.EPSG_DISPLAY_PROJECTION)
- picture = models.ImageField(_("Image"), upload_to='upload', blank=True,
+ point = PointField(_(u"Localisation"),
+ srid=settings.EPSG_DISPLAY_PROJECTION)
+ picture = models.ImageField(_(u"Image"), upload_to='upload', blank=True,
null=True, height_field='height', width_field='width')
- height = models.IntegerField(_("Height"), blank=True, null=True)
- width = models.IntegerField(_("Width"), blank=True, null=True)
- STATUS = (('S', _('Submited')),
- ('A', _('Available')),
- ('D', _('Disabled')),)
+ height = models.IntegerField(_(u"Height"), blank=True, null=True)
+ width = models.IntegerField(_(u"Width"), blank=True, null=True)
+ STATUS = (('S', _(u'Submited')),
+ ('A', _(u'Available')),
+ ('D', _(u'Disabled')),)
STATUS_DCT = {}
for key, label in STATUS:
STATUS_DCT[key] = label
- status = models.CharField(_("Status"), max_length=1, choices=STATUS)
+ status = models.CharField(_(u"Status"), max_length=1, choices=STATUS)
if settings.DAYS_BEFORE_EVENT:
- start_date = models.DateField(_("Start date"), blank=True, null=True,
+ start_date = models.DateField(_(u"Start date"), blank=True, null=True,
help_text=_(u"Not mandatory. Set it for dated item such as event. "\
u"Format YYYY-MM-DD"))
- end_date = models.DateField(_("End date"), blank=True, null=True,
+ end_date = models.DateField(_(u"End date"), blank=True, null=True,
help_text=_(u"Not mandatory. Set it only if you have a multi-day "\
- u"event. Format YYYY-MM-DD"))
+ u"event. Format YYYY-MM-DD"))
if 'chimere.rss' in settings.INSTALLED_APPS:
- available_date = models.DateTimeField(_("Available Date"), blank=True,
- null=True)
- route = models.ForeignKey("Route", blank=True, null=True)
+ available_date = models.DateTimeField(_(u"Available Date"), blank=True,
+ null=True)
+ route = models.ForeignKey(u"Route", blank=True, null=True)
objects = models.GeoManager()
def __unicode__(self):
@@ -227,7 +226,7 @@ class Marker(models.Model):
class Meta:
ordering = ('status', 'name')
- verbose_name = _("Point of interest")
+ verbose_name = _(u"Point of interest")
def getLatitude(self):
'''Return the latitude
@@ -319,6 +318,10 @@ class RouteFile(models.Model):
TYPE = (('K', _(u'KML')), ('G', _(u'GPX')))
file_type = models.CharField(max_length=1, choices=TYPE)
+ class Meta:
+ ordering = ('name',)
+ verbose_name = _(u"Route file")
+
def __unicode__(self):
return self.name
@@ -365,29 +368,29 @@ class RouteFile(models.Model):
class Route(models.Model):
'''Route on the map
'''
- name = models.CharField(_("Name"), max_length=150)
+ name = models.CharField(_(u"Name"), max_length=150)
categories = SelectMultipleField(SubCategory)
- route = RouteField(_("Route"), srid=settings.EPSG_DISPLAY_PROJECTION)
+ route = RouteField(_(u"Route"), srid=settings.EPSG_DISPLAY_PROJECTION)
associated_file = models.ForeignKey(RouteFile, blank=True, null=True,
verbose_name=_(u"Associated file"))
- picture = models.ImageField(_("Image"), upload_to='upload', blank=True,
+ picture = models.ImageField(_(u"Image"), upload_to='upload', blank=True,
null=True, height_field='height', width_field='width')
- height = models.IntegerField(_("Height"), blank=True, null=True)
- width = models.IntegerField(_("Width"), blank=True, null=True)
- STATUS = (('S', _('Submited')),
- ('A', _('Available')),
- ('D', _('Disabled')),)
+ height = models.IntegerField(_(u"Height"), blank=True, null=True)
+ width = models.IntegerField(_(u"Width"), blank=True, null=True)
+ STATUS = (('S', _(u'Submited')),
+ ('A', _(u'Available')),
+ ('D', _(u'Disabled')),)
STATUS_DCT = {}
for key, label in STATUS:
STATUS_DCT[key] = label
if settings.DAYS_BEFORE_EVENT:
- start_date = models.DateField(_("Start date"), blank=True, null=True,
+ start_date = models.DateField(_(u"Start date"), blank=True, null=True,
help_text=_(u"Not mandatory. Set it for dated item such as event. "\
u"Format YYYY-MM-DD"))
- end_date = models.DateField(_("End date"), blank=True, null=True,
+ end_date = models.DateField(_(u"End date"), blank=True, null=True,
help_text=_(u"Not mandatory. Set it only if you have a multi-day "\
u"event. Format YYYY-MM-DD"))
- status = models.CharField(_("Status"), max_length=1, choices=STATUS)
+ status = models.CharField(_(u"Status"), max_length=1, choices=STATUS)
objects = models.GeoManager()
def __unicode__(self):
@@ -395,7 +398,7 @@ class Route(models.Model):
class Meta:
ordering = ('status', 'name')
- verbose_name = _("Route")
+ verbose_name = _(u"Route")
def getProperty(self, propertymodel, safe=None):
"""Get the property of an associated property model.
@@ -505,27 +508,27 @@ class SimpleArea:
subcat.name as name, subcat.available as available,
subcat.icon_id as icon_id, subcat.color_theme_id as color_theme_id,
subcat.order as order, subcat.item_type as item_type
- from main_subcategory subcat
- inner join main_category cat on cat.id=subcat.category_id'''
+ from chimere_subcategory subcat
+ inner join chimere_category cat on cat.id=subcat.category_id'''
sql = sql_main + '''
- inner join main_marker mark on ST_Contains(%s, mark.point)''' % area
+ inner join chimere_marker mark on ST_Contains(%s, mark.point)''' % area
if equal_status:
sql += ' and mark.status' + equal_status
sql += date_condition % {'alias':'mark'}
sql += '''
- inner join main_marker_categories mc on mc.subcategory_id=subcat.id and
+ inner join chimere_marker_categories mc on mc.subcategory_id=subcat.id and
mc.marker_id=mark.id'''
if filter_available:
sql += ' where subcat.available = TRUE and cat.available = TRUE'
subcats = set(SubCategory.objects.raw(sql))
sql = sql_main + '''
- inner join main_route rt on (ST_Intersects(%s, rt.route) or
+ inner join chimere_route rt on (ST_Intersects(%s, rt.route) or
ST_Contains(%s, rt.route))''' % (area, area)
if equal_status:
sql += ' and rt.status' + equal_status
sql += date_condition % {'alias':'rt'}
sql += '''
- inner join main_route_categories rc on rc.subcategory_id=subcat.id and
+ inner join chimere_route_categories rc on rc.subcategory_id=subcat.id and
rc.route_id=rt.id'''
if filter_available:
sql += ' where subcat.available = TRUE and cat.available = TRUE'
@@ -535,14 +538,14 @@ class SimpleArea:
class Area(models.Model, SimpleArea):
"""Rectangular area of the map
"""
- name = models.CharField(_("Name"), max_length=150)
- urn = models.SlugField(_("Area urn"), max_length=50, blank=True,
+ name = models.CharField(_(u"Name"), max_length=150)
+ urn = models.SlugField(_(u"Area urn"), max_length=50, blank=True,
unique=True)
- order = models.IntegerField(_("Order"))
- available = models.BooleanField(_("Available"))
- upper_left_corner = models.PointField(_("Upper left corner"),
+ order = models.IntegerField(_(u"Order"))
+ available = models.BooleanField(_(u"Available"))
+ upper_left_corner = models.PointField(_(u"Upper left corner"),
default='POINT(0 0)', srid=settings.EPSG_DISPLAY_PROJECTION)
- lower_right_corner = models.PointField(_("Lower right corner"),
+ lower_right_corner = models.PointField(_(u"Lower right corner"),
default='POINT(0 0)', srid=settings.EPSG_DISPLAY_PROJECTION)
objects = models.GeoManager()
@@ -559,7 +562,7 @@ class Area(models.Model, SimpleArea):
'''
return cls.objects.filter(available=True)
- def getIncludeSql(self, geometry='"main_marker".point'):
+ def getIncludeSql(self, geometry='"chimere_marker".point'):
"""
Get the sql statement for the test if the point is included in the area
"""
@@ -577,16 +580,16 @@ class Area(models.Model, SimpleArea):
class PropertyModel(models.Model):
'''Model for a property
'''
- name = models.CharField(_("Name"), max_length=150)
- order = models.IntegerField(_("Order"))
- available = models.BooleanField(_("Available"))
+ name = models.CharField(_(u"Name"), max_length=150)
+ order = models.IntegerField(_(u"Order"))
+ available = models.BooleanField(_(u"Available"))
TYPE = (('T', _('Text')),
('L', _('Long text')),
('P', _('Password')))
TYPE_WIDGET = {'T':'forms.TextInput',
'L':'TextareaWidget',
'P':'forms.PasswordInput'}
- type = models.CharField(_("Type"), max_length=1, choices=TYPE)
+ type = models.CharField(_(u"Type"), max_length=1, choices=TYPE)
def __unicode__(self):
return self.name
class Meta:
@@ -601,12 +604,12 @@ class PropertyModel(models.Model):
class Property(models.Model):
'''Property for a POI
'''
- marker = models.ForeignKey(Marker, verbose_name=_("Point of interest"))
+ marker = models.ForeignKey(Marker, verbose_name=_(u"Point of interest"))
propertymodel = models.ForeignKey(PropertyModel,
- verbose_name=_("Property model"))
- value = models.TextField(_("Value"))
+ verbose_name=_(u"Property model"))
+ value = models.TextField(_(u"Value"))
def __unicode__(self):
return "%s : %s" % (str(self.propertymodel), self.value)
class Meta:
- verbose_name = _("Property")
+ verbose_name = _(u"Property")
diff --git a/chimere/rss/__init__.py b/chimere/rss/__init__.py
deleted file mode 100644
index 792d600..0000000
--- a/chimere/rss/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-#
diff --git a/chimere/rss/feeds.py b/chimere/rss/feeds.py
deleted file mode 100644
index 18a4259..0000000
--- a/chimere/rss/feeds.py
+++ /dev/null
@@ -1,230 +0,0 @@
-#!/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.utils.translation import ugettext as _
-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 BaseFeed(Feed):
- """
- Base feed for Chimere objects
- """
- def item_link(self, item):
- ''' Return POI permalink '''
- coord = item.point
- cat = 0
- if item.categories.all() and item.categories.all()[0]:
- cat = item.categories.all()[0].pk
- return settings.BASE_URL + '?zoom=16&lat=%d&lon=%d&current_feature=%d&\
-checked_categories=%d' % (coord.y, coord.x, item.id, cat)
-
- def item_pubdate(self, item):
- """
- Date of the Marker when it has been available
- """
- return item.available_date
-
- def description(self, obj):
- return ""
-
-class LatestPOIsByCategory(BaseFeed):
- '''
- Last Points of interests by category in Feeds
- '''
- title_template = "rss_title.html"
- description_template = "rss_descr.html"
-
- def get_object(self, bits):
- """
- Get extra url, after rss/category/ id of category
- """
- if len(bits) != 1:
- raise ObjectDoesNotExist
- return Category.objects.get(id__exact=bits[0])
-
- def title(self, obj):
- """
- Define the title of the feed
- """
- return u"%s - %s" % (settings.PROJECT_NAME, obj.name)
-
- def link(self, obj):
- """
- Define the link of the feed.
- """
- if not obj:
- raise FeedDoesNotExist
- return settings.BASE_URL + 'rss/category/' + str(obj.id)
-
- def items(self, obj):
- """
- 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
- """
- q = Marker.objects.filter(status__exact='A',
- categories__category__id__exact=obj.id,
- available_date__isnull=False).order_by('-available_date')[:15]
- return q
-
-class LatestPOIsBySubCategory(BaseFeed):
- '''
- 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 u"%s - %s - %s" % (settings.PROJECT_NAME, obj.category.name,
- obj.name)
-
- def link(self, obj):
- if not obj:
- raise FeedDoesNotExist
- return settings.BASE_URL + 'rss/subcategory/' + str(obj.id)
-
- def items(self, obj):
- q = Marker.objects.filter(categories__id__exact=obj.id,
- available_date__isnull=False, status__exact='A').order_by(
- '-available_date')[:15]
- return q
-
-class LatestPOIs(BaseFeed):
- '''
- Last Points of interests
- '''
- title_template = "rss_title.html"
- description_template = "rss_descr.html"
-
- def title(self):
- return settings.PROJECT_NAME + u" - " + _(u"Last points of interest")
-
- def link(self):
- return settings.BASE_URL + 'rss/categories/'
-
- def description(self):
- return _("Latest points of interest from ") + settings.PROJECT_NAME
-
- def items(self):
- q = Marker.objects.filter(status__exact='A',
- available_date__isnull=False).order_by('-available_date')[:15]
- return q
-
-class LatestPOIsByZone(BaseFeed):
- '''
- Last Points of interests by zone by coordinates
- '''
- title_template = "rss_title.html"
- description_template = "rss_descr.html"
- upper_left_lat = 0
- upper_left_lon = 0
- lower_right_lat = 0
- lower_right_lon = 0
-
- def get_object(self, bits):
- """
- Get the extra url. Parameters are the coordinates of the zone (the
- upper left and lower right points)
- """
- if len(bits) != 1:
- raise ObjectDoesNotExist
- # 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.
- 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_DISPLAY_PROJECTION)
- return areaBox
-
- def title(self, obj):
- return settings.PROJECT_NAME + u" - " +\
- _(u"Last points of interest by area")
-
- def link(self, obj):
- """
- Define the link of the feed. It's the same url as we get in the method
- get_object
- """
- 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 items(self, obj):
- """
- 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
- """
- q = Marker.objects.filter(point__contained=obj, status__exact='A',
- available_date__isnull=False).order_by('-available_date')[:15]
- return q
-
-class LatestPOIsByZoneID(BaseFeed):
- '''
- 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 settings.PROJECT_NAME + u" - " + \
- _(u"Last points of interest") + u" - " + obj.name
-
- def link(self, obj):
- if not obj:
- raise FeedDoesNotExist
- return settings.BASE_URL + 'rss/areaid/' + str(obj.id)
-
- def items(self, obj):
- sql = 'select * from "main_marker" where ' + obj.getIncludeSql()
- sql += ' and "main_marker".available_date is not null'
- sql += ' and "main_marker".status=\'A\''
- sql += ' order by "main_marker".available_date desc limit 15'
- q = Marker.objects.raw(sql)
- return q
diff --git a/chimere/rss/templates/rss.html b/chimere/rss/templates/rss.html
deleted file mode 100644
index 0c895ed..0000000
--- a/chimere/rss/templates/rss.html
+++ /dev/null
@@ -1,73 +0,0 @@
-{% extends "base.html" %}
-{% load i18n %}
-
-{% block sidebar %}
-{% endblock %}
-
-{% block content %}
-<div id='content'>
-<fieldset class='edit'>
-<legend>{% trans "Subscribe to RSS feed" %}</legend>
-
-<p><font color='red'> {{ error_message }} </font></p>
-
-<form method='post' id='rss_form' name='rss_form' action=''>
-{%if not category_rss_feed %}
-<div class="fieldWrapper">
- <label for="rss_category">{% trans "Type of RSS feed" %}</label>
- <select name='rss_category' id='rss_category' onchange='document.forms["rss_form"].submit();'>
- <option value=""> ---- </option>
- <option value="global">{% trans "All new points of interest" %}</option>
- <option value="poi">{% trans "New points of interest by category" %}</option>
- <option value="area">{% trans "New points of interest by area" %}</option>
- </select>
-</div>
-{% endif %}
-
-{%ifequal category_rss_feed "category" %}
-<h3>{% trans "New points of interest by category" %}</h3>
-<div class="fieldWrapper">
- <label for="id_subcategory">{% trans "Choose a category" %}</label>
- <select name='subcategory' id='subcategory' onchange='document.forms["rss_form"].submit();'>
- {% for cat_subcat in sub_categories %}
- <option value ="cat_{{cat_subcat.0.id}}"> ---- {{cat_subcat.0.name}} ----
- {% for sub_category in cat_subcat.1 %}
- <option value='{{sub_category.id}}'{% ifequal sub_category.id current_category %} selected='selected'{% endifequal %}>
- {% trans sub_category.name %}
- </option>{% endfor %}
- </option>{% endfor %}
- </select>
-</div>
-{% endifequal %}
-
-{%ifequal category_rss_feed "area" %}
-<h3>{% trans "New points of interest by area" %}</h3>
-{% if area_id %}
-<div class="fieldWrapper">
- <label for="id_area">{% trans "Choose a pre-defined areas" %}</label>
- <select name='id_area' id='id_area' onchange='document.forms["rss_form"].submit();'>
- <option value="" selected="selected"> ---- </option>
- {% for areaID in area_id %}
- <option value ={{areaID.id}}>{{areaID.name}}</option>
- {% endfor %}
- </select>
-</div>
-
-</form>
-
-<form method='post' action=''>
-{% endif %}
-<div class='fieldWrapper'>
-<label>{% trans "Or select the area by zooming and panning this map" %}</label>
-<div class="map">
- {{form.area}}
-</div>
-</div>
-<p><input type="submit" value="{% trans "Validate" %}" /></p>
-{% endifequal %}
-
-</form>
-
-</fieldset>
-</div>
-{% endblock %}
diff --git a/chimere/rss/templates/rss_descr.html b/chimere/rss/templates/rss_descr.html
deleted file mode 100644
index 4f75ac6..0000000
--- a/chimere/rss/templates/rss_descr.html
+++ /dev/null
@@ -1,8 +0,0 @@
-{% load i18n %}
-{% load sanitize %}
-<div id='detail_content'>
-{% if obj.picture %}<img src='{{obj.picture.url}}' alt="{{obj.name}}"/>{%endif%}
-<div>{% for property in obj.getProperties %}
-<p id='{{property.propertymodel.getNamedId}}'>{{ property.value|sanitize:"p b i br hr strong em span:style a:href:target ul li ol h1 h2 h3 h4"|safe }}</p>
-{% endfor %}</div>
-</div>
diff --git a/chimere/rss/templates/rss_title.html b/chimere/rss/templates/rss_title.html
deleted file mode 100644
index 5b379e7..0000000
--- a/chimere/rss/templates/rss_title.html
+++ /dev/null
@@ -1,2 +0,0 @@
-{% load i18n %}
-{{ obj.name }}
diff --git a/chimere/rss/urls.py b/chimere/rss/urls.py
deleted file mode 100644
index e5e9a24..0000000
--- a/chimere/rss/urls.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/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 EXTRA_NO_AREA as EXTRA
-
-feeds = {
- 'category': LatestPOIsByCategory,
- 'subcategory': LatestPOIsBySubCategory,
- 'global': LatestPOIs,
- 'area': LatestPOIsByZone,
- 'areaid': LatestPOIsByZoneID
-}
-
-urlpatterns = patterns('',
- (EXTRA + r'rss/$', 'chimere.rss.views.rss'),
- (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
deleted file mode 100644
index 1d6381d..0000000
--- a/chimere/rss/views.py
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/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
-"""
-
-from django.shortcuts import render_to_response
-from django.http import HttpResponseRedirect
-from django.utils.translation import ugettext as _
-
-from chimere import settings
-from chimere.main.views import get_base_response
-from chimere.main.actions import actions
-from chimere.main.models import SubCategory,Area
-from chimere.main.forms import AreaForm
-from chimere.main.widgets import AreaWidget
-
-def rss(request, area_name=''):
- '''
- Redirect to RSS subscription page
- '''
- response_dct = get_base_response()
- response_dct.update({'actions':actions, 'action_selected':('rss',),
- 'category_rss_feed':'',})
- # 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['category_rss_feed'] = 'category'
- response_dct['sub_categories'] = SubCategory.getAvailable()
- 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()
- area_widget = AreaWidget().render('area', None)
- response_dct.update({'map_layer':settings.MAP_LAYER,
- 'extra_head':form.media,
- 'form':form,
- 'category_rss_feed':'area',
- 'area_id':Area.getAvailable(),
- 'area_widget':area_widget
- })
- return render_to_response('rss.html', response_dct)
- # Error when submitting the form
- else:
- error = _("Incorrect choice in the list")
- response_dct.update({'error_message':error,
- 'category_rss_feed':'',
- 'sub_categories':SubCategory.getAvailable()})
- 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/'
- feeds_link += 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['category_rss_feed'] = 'category'
- response_dct['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.update({'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:
- return render_to_response('rss.html', response_dct)
diff --git a/chimere/main/templatetags/__init__.py b/chimere/templatetags/__init__.py
index 792d600..792d600 100644
--- a/chimere/main/templatetags/__init__.py
+++ b/chimere/templatetags/__init__.py
diff --git a/chimere/main/templatetags/sanitize.py b/chimere/templatetags/sanitize.py
index ccb936c..ccb936c 100644
--- a/chimere/main/templatetags/sanitize.py
+++ b/chimere/templatetags/sanitize.py
diff --git a/chimere/main/templatetags/unlocalize_point.py b/chimere/templatetags/unlocalize_point.py
index f52a90a..f52a90a 100644
--- a/chimere/main/templatetags/unlocalize_point.py
+++ b/chimere/templatetags/unlocalize_point.py
diff --git a/chimere/urls.py b/chimere/urls.py
index 41a3729..6aebf72 100644
--- a/chimere/urls.py
+++ b/chimere/urls.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2008-2011 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2008-2012 É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
@@ -17,70 +17,46 @@
# See the file COPYING for details.
-
+from django.conf import settings
from django.conf.urls.defaults import *
-
from django.contrib import admin
admin.autodiscover()
-from settings import ROOT_PATH, EXTRA_URL, INSTALLED_APPS
-
-from main.models import Area
+from chimere.models import Area
def i18n_javascript(request):
return admin.site.i18n_javascript(request)
-BASE = '^' + EXTRA_URL
-urlpatterns = patterns('',
- (BASE + r'admin/jsi18n/$', i18n_javascript),
- (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',
- {'document_root': ROOT_PATH + 'media/'}),
- (BASE + r'charte/$', 'chimere.main.views.charte'),
+urlpatterns = patterns('chimere.views',
+ url(r'^simple(/?P<area_name>\w+)?$', 'index', {'simple':True},
+ name="simple_index")
)
-urlpatterns += patterns('chimere.main.views',
+urlpatterns += patterns('chimere.views',
+ url(r'^charte/?$', 'charte', name="charte"),
+ url(r'^(?P<area_name>\w+)?/?contact/?$', 'contactus', name="contact"),
+ url(r'^(?P<area_name>\w+)?/?submited/(?P<action>\w+)/?$', 'submited',
+ name="submit"),
+ url(r'^(?P<area_name>\w+)?/?edit/?$', 'edit',
+ name="edit"),
+ url(r'^(?P<area_name>\w+)?/?edit_route/?$', 'editRoute',
+ name="edit_route"),
+ url(r'^(?P<area_name>\w+)?/?getDetail/(?P<marker_id>\d+)/?$', 'getDetail',
+ name="get_detail"),
+ url(r'^(?P<area_name>\w+)?/?getDescriptionDetail/?(?P<category_id>\d+)/?$',
+ 'getDescriptionDetail', name="get_description_detail"),
+ url(r'^(?:(?P<area_name>\w+)?/)?getGeoObjects/(?P<category_ids>\w+)(/(?P<status>\w+))?$',
+ 'getGeoObjects', name="getgeoobjects"),
+ url(r'^(?P<area_name>\w+)?/?getAvailableCategories/$',
+ 'get_available_categories', name="get_categories"),
+ url(r'^(?P<area_name>\w+)?/?ty/(?P<tiny_urn>\w+)$',
+ 'redirectFromTinyURN', name="tiny"),
)
-url_areas = Area.objects.filter(urn__isnull=False)
-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,
- 'simple':True}),)
-
-EXTRA = "|".join([area.urn for area in url_areas])
-default_dct = {}
-EXTRA_NO_AREA = EXTRA
-if EXTRA:
- EXTRA_NO_AREA = "(%s)?/?" % 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'upload_file/((?P<category_id>\w+)/)?$', 'uploadFile',
- default_dct),
-(BASE + EXTRA + r'process_route_file/(?P<file_id>\d+)/$', 'processRouteFile', 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+))?$',
- 'getGeoObjects', default_dct),
-(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),
+# At the end, because it catches large
+urlpatterns += patterns('chimere.views',
+ url(r'^(?P<area_name>\w+)?', 'index', name="index"),
)
-if 'chimere.rss' in INSTALLED_APPS:
- urlpatterns += patterns('',
- (r'^' + EXTRA_URL, include('chimere.rss.urls')),)
+
diff --git a/chimere/main/views.py b/chimere/views.py
index 25ad630..24948ad 100644
--- a/chimere/main/views.py
+++ b/chimere/views.py
@@ -34,13 +34,13 @@ from django.db.models import Q
from django.utils import simplejson
from chimere import settings
-from chimere.main.actions import actions
-from chimere.main.models import Category, SubCategory, PropertyModel, \
+from chimere.actions import actions
+from chimere.models import Category, SubCategory, PropertyModel, \
Marker, Route, News, SimpleArea, Area, Color, TinyUrl, RouteFile
-from chimere.main.widgets import getMapJS, PointChooserWidget, \
+from chimere.widgets import getMapJS, PointChooserWidget, \
RouteChooserWidget, URL_OSM_JS, URL_OSM_CSS
-from chimere.main.forms import MarkerForm, RouteForm, ContactForm, \
+from chimere.forms import MarkerForm, RouteForm, ContactForm, \
FileForm, FullFileForm, notifySubmission, notifyStaff
def get_base_response(area_name=""):
diff --git a/chimere/main/widgets.py b/chimere/widgets.py
index 1af6637..ec63ea3 100644
--- a/chimere/main/widgets.py
+++ b/chimere/widgets.py
@@ -22,12 +22,11 @@ Extra widgets and fields
"""
from django import forms
+from django.conf import settings
+from django.contrib.gis.db import models
+from django.contrib.gis.geos import fromstr
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
-from django.contrib.gis.geos import fromstr
-
-from chimere import settings
-from django.contrib.gis.db import models
URL_OSM_CSS = ["http://www.openlayers.org/api/theme/default/style.css"]
URL_OSM_JS = [settings.MEDIA_URL+"OpenLayers.js",
@@ -352,3 +351,7 @@ class SelectMultipleField(models.ManyToManyField):
keys.update(defaults)
return super(SelectMultipleField, self).formfield(**keys)
+from south.modelsinspector import add_introspection_rules
+add_introspection_rules([], ["^chimere\.widgets\.PointField"])
+add_introspection_rules([], ["^chimere\.widgets\.SelectMultipleField"])
+add_introspection_rules([], ["^chimere\.widgets\.RouteField"])