diff options
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 |
commit | f88541bedcffdfaff485ef71287be88a58c745c2 (patch) | |
tree | 87e9fcd59da5d687d2954ae99d9f511df55058f2 | |
parent | 8ccdaf23128fbe563658ca0d9d74d2ffd831b68d (diff) | |
download | Chimère-f88541bedcffdfaff485ef71287be88a58c745c2.tar.bz2 Chimère-f88541bedcffdfaff485ef71287be88a58c745c2.zip |
Large reorganization (refs #316), south migration script to new model names (refs #319)
-rw-r--r-- | .gitignore | 1 | ||||
-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.py | 160 | ||||
-rw-r--r-- | chimere/forms.py (renamed from chimere/main/forms.py) | 8 | ||||
-rw-r--r-- | chimere/migrations/0001_initial.py | 341 | ||||
-rw-r--r-- | chimere/migrations/0002_rename_models.py | 154 | ||||
-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.py | 82 | ||||
-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__.py | 0 | ||||
-rwxr-xr-x | example_project/manage.py (renamed from chimere/manage.py) | 3 | ||||
-rw-r--r-- | example_project/settings.py.example | 159 | ||||
-rw-r--r-- | example_project/urls.py | 43 |
26 files changed, 867 insertions, 296 deletions
@@ -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')),) + |