summaryrefslogtreecommitdiff
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
parent8ccdaf23128fbe563658ca0d9d74d2ffd831b68d (diff)
downloadChimère-f88541bedcffdfaff485ef71287be88a58c745c2.tar.bz2
Chimère-f88541bedcffdfaff485ef71287be88a58c745c2.zip
Large reorganization (refs #316), south migration script to new model names (refs #319)
-rw-r--r--.gitignore1
-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
-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/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
-rw-r--r--chimere_rss/__init__.py (renamed from chimere/rss/__init__.py)0
-rw-r--r--chimere_rss/feeds.py (renamed from chimere/rss/feeds.py)0
-rw-r--r--chimere_rss/templates/rss.html (renamed from chimere/rss/templates/rss.html)0
-rw-r--r--chimere_rss/templates/rss_descr.html (renamed from chimere/rss/templates/rss_descr.html)0
-rw-r--r--chimere_rss/templates/rss_title.html (renamed from chimere/rss/templates/rss_title.html)0
-rw-r--r--chimere_rss/urls.py (renamed from chimere/rss/urls.py)0
-rw-r--r--chimere_rss/views.py (renamed from chimere/rss/views.py)0
-rw-r--r--example_project/__init__.py0
-rwxr-xr-xexample_project/manage.py (renamed from chimere/manage.py)3
-rw-r--r--example_project/settings.py.example159
-rw-r--r--example_project/urls.py43
26 files changed, 867 insertions, 296 deletions
diff --git a/.gitignore b/.gitignore
index b4363d3..8a081eb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
*.swp
*.bak
*.mo
+*.ignore
chimere/settings.py
chimere/static/icons/*
chimere/static/upload/*
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/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/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"])
diff --git a/chimere/rss/__init__.py b/chimere_rss/__init__.py
index 792d600..792d600 100644
--- a/chimere/rss/__init__.py
+++ b/chimere_rss/__init__.py
diff --git a/chimere/rss/feeds.py b/chimere_rss/feeds.py
index 18a4259..18a4259 100644
--- a/chimere/rss/feeds.py
+++ b/chimere_rss/feeds.py
diff --git a/chimere/rss/templates/rss.html b/chimere_rss/templates/rss.html
index 0c895ed..0c895ed 100644
--- a/chimere/rss/templates/rss.html
+++ b/chimere_rss/templates/rss.html
diff --git a/chimere/rss/templates/rss_descr.html b/chimere_rss/templates/rss_descr.html
index 4f75ac6..4f75ac6 100644
--- a/chimere/rss/templates/rss_descr.html
+++ b/chimere_rss/templates/rss_descr.html
diff --git a/chimere/rss/templates/rss_title.html b/chimere_rss/templates/rss_title.html
index 5b379e7..5b379e7 100644
--- a/chimere/rss/templates/rss_title.html
+++ b/chimere_rss/templates/rss_title.html
diff --git a/chimere/rss/urls.py b/chimere_rss/urls.py
index e5e9a24..e5e9a24 100644
--- a/chimere/rss/urls.py
+++ b/chimere_rss/urls.py
diff --git a/chimere/rss/views.py b/chimere_rss/views.py
index 1d6381d..1d6381d 100644
--- a/chimere/rss/views.py
+++ b/chimere_rss/views.py
diff --git a/example_project/__init__.py b/example_project/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/example_project/__init__.py
diff --git a/chimere/manage.py b/example_project/manage.py
index bcdd55e..300eab0 100755
--- a/chimere/manage.py
+++ b/example_project/manage.py
@@ -1,5 +1,8 @@
#!/usr/bin/python
+import os, sys
from django.core.management import execute_manager
+sys.path.insert(0, os.path.abspath('./..'))
+
try:
import settings # Assumed to be in the same directory.
except ImportError:
diff --git a/example_project/settings.py.example b/example_project/settings.py.example
new file mode 100644
index 0000000..5f993ab
--- /dev/null
+++ b/example_project/settings.py.example
@@ -0,0 +1,159 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import os
+
+# Django settings for chimere project.
+PROJECT_NAME = u'Chimère'
+ROOT_PATH = os.path.realpath(os.path.dirname(__file__)) + "/"
+
+EXTRA_URL = 'chimere/'
+BASE_URL = SERVER_URL + EXTRA_URL
+EMAIL_HOST = 'localhost'
+
+TINYMCE_URL = 'http://localhost/tinymce/'
+JQUERY_URL = "/chimere/static/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)
+# projection used by the main map
+# most public map providers use spherical mercator : 900913
+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
+# to restrict the map to a defined bounding box set it here
+# (left, bottom, right, top)
+RESTRICTED_EXTENT = None
+# dynamic load of categories on the main map
+DYNAMIC_CATEGORIES = False
+# display of shortcuts for areas
+DISPLAY_AREAS = True
+# specific css for areas
+CSS_AREAS = True
+# 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
+
+# default id category to check on the map
+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',
+ 'south',
+ 'chimere',
+ # activate it if you want to use migration scripts
+ #'chimere.scripts',
+ # activate it if you want to use RSS feeds
+ 'chimere_rss'
+)
+
+if 'chimere_rss' in INSTALLED_APPS:
+ TEMPLATE_DIRS.append(ROOT_PATH + 'chimere_rss/templates')
diff --git a/example_project/urls.py b/example_project/urls.py
new file mode 100644
index 0000000..8644a5d
--- /dev/null
+++ b/example_project/urls.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 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
+# 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 import settings
+from django.conf.urls.defaults import *
+
+from django.contrib import admin
+from django.contrib.staticfiles.urls import staticfiles_urlpatterns
+
+admin.autodiscover()
+urlpatterns = patterns('django.views.static',
+ (r'^%s(?P<path>.*)' % settings.MEDIA_URL[1:], 'serve',
+ {'document_root': settings.MEDIA_ROOT}),
+)
+
+urlpatterns += staticfiles_urlpatterns()
+
+urlpatterns += patterns('',
+ (r'^admin/doc/', include('django.contrib.admindocs.urls')),
+ (r'^admin/', include(admin.site.urls)),
+ url(r'^chimere/', include('chimere.urls', namespace="chimere")),
+)
+
+if 'rss' in settings.INSTALLED_APPS:
+ urlpatterns += patterns('',
+ (r'^chimere/rss/', include('rss.urls')),)
+