diff options
| -rw-r--r-- | chimere/admin.py | 7 | ||||
| -rw-r--r-- | chimere/migrations/0006_auto__add_importer__add_field_route_import_key__add_field_marker_impor.py | 202 | ||||
| -rw-r--r-- | chimere/models.py | 29 | ||||
| -rw-r--r-- | chimere/utils.py | 31 | 
4 files changed, 267 insertions, 2 deletions
diff --git a/chimere/admin.py b/chimere/admin.py index bafa754..4e632b8 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -26,7 +26,7 @@ from django.contrib import admin  from chimere.models import Category, Icon, SubCategory, Marker, \             PropertyModel, News, Route, Area, ColorTheme, Color, RouteFile,\ -           MultimediaType, MultimediaFile, PictureFile +           MultimediaType, MultimediaFile, PictureFile, Importer  from chimere.forms import MarkerAdminForm, RouteAdminForm, AreaAdminForm,\                            NewsAdminForm, CategoryAdminForm  from chimere.widgets import TextareaWidget @@ -106,6 +106,10 @@ class SubCategoryAdmin(admin.ModelAdmin):      list_display = ('name', 'category', 'available')      list_filter = ('category',) +class ImporterAdmin(admin.ModelAdmin): +    list_display = ('importer_type', 'subcategory', 'source_url', 'filtr') +    list_filter = ('importer_type',) +  class NewsAdmin(admin.ModelAdmin):      """      Use the TinyMCE widget for the news content @@ -159,3 +163,4 @@ admin.site.register(ColorTheme, ColorThemeAdmin)  admin.site.register(MultimediaType, MultimediaTypeAdmin)  admin.site.register(MultimediaFile, MultimediaFileAdmin)  admin.site.register(PictureFile, PictureFileAdmin) +admin.site.register(Importer, ImporterAdmin) diff --git a/chimere/migrations/0006_auto__add_importer__add_field_route_import_key__add_field_marker_impor.py b/chimere/migrations/0006_auto__add_importer__add_field_route_import_key__add_field_marker_impor.py new file mode 100644 index 0000000..3157039 --- /dev/null +++ b/chimere/migrations/0006_auto__add_importer__add_field_route_import_key__add_field_marker_impor.py @@ -0,0 +1,202 @@ +# 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 'Importer' +        db.create_table('chimere_importer', ( +            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), +            ('importer_type', self.gf('django.db.models.fields.CharField')(max_length=4)), +            ('source_url', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)), +            ('filtr', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)), +            ('subcategory', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['chimere.SubCategory'])), +        )) +        db.send_create_signal('chimere', ['Importer']) + +        # Adding field 'Route.import_key' +        db.add_column('chimere_route', 'import_key', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True), keep_default=False) + +        # Adding field 'Marker.import_key' +        db.add_column('chimere_marker', 'import_key', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True), keep_default=False) + + +    def backwards(self, orm): +         +        # Deleting model 'Importer' +        db.delete_table('chimere_importer') + +        # Deleting field 'Route.import_key' +        db.delete_column('chimere_route', 'import_key') + +        # Deleting field 'Marker.import_key' +        db.delete_column('chimere_marker', 'import_key') + + +    models = { +        'chimere.area': { +            'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            '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': {'ordering': "['order']", 'object_name': 'Category'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            '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': {'ordering': "['order']", 'object_name': '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'}, +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}) +        }, +        'chimere.icon': { +            'Meta': {'object_name': '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.importer': { +            'Meta': {'object_name': 'Importer'}, +            'filtr': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'importer_type': ('django.db.models.fields.CharField', [], {'max_length': '4'}), +            'source_url': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'subcategory': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.SubCategory']"}) +        }, +        'chimere.marker': { +            'Meta': {'ordering': "('status', 'name')", 'object_name': 'Marker'}, +            'available_date': ('django.db.models.fields.DateTimeField', [], {'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'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'multimedia_files': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'marker'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['chimere.MultimediaFile']"}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), +            'pictures': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'marker'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['chimere.PictureFile']"}), +            'point': ('chimere.widgets.PointField', [], {}), +            'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_marker'", 'null': 'True', 'to': "orm['chimere.Marker']"}), +            'route': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'associated_marker'", 'null': 'True', 'to': "orm['chimere.Route']"}), +            'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}), +            'submiter_comment': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), +            'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}) +        }, +        'chimere.multimediafile': { +            'Meta': {'object_name': 'MultimediaFile'}, +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.MultimediaType']"}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}), +            'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), +            'url': ('django.db.models.fields.CharField', [], {'max_length': '200'}) +        }, +        'chimere.multimediatype': { +            'Meta': {'object_name': 'MultimediaType'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'iframe': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'media_type': ('django.db.models.fields.CharField', [], {'max_length': '1'}), +            'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}) +        }, +        'chimere.news': { +            'Meta': {'object_name': 'News'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            '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.picturefile': { +            'Meta': {'object_name': 'PictureFile'}, +            'height': ('django.db.models.fields.IntegerField', [], {}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '150', 'null': 'True', 'blank': 'True'}), +            'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), +            'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), +            'width': ('django.db.models.fields.IntegerField', [], {}) +        }, +        'chimere.property': { +            'Meta': {'object_name': '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': {'ordering': "('order',)", 'object_name': 'PropertyModel'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            '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': {'ordering': "('status', 'name')", 'object_name': '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'}), +            'import_key': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), +            'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), +            'ref_item': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'submited_route'", 'null': 'True', 'to': "orm['chimere.Route']"}), +            'route': ('chimere.widgets.RouteField', [], {}), +            'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), +            'status': ('django.db.models.fields.CharField', [], {'max_length': '1'}), +            'submiter_comment': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), +            'submiter_session_key': ('django.db.models.fields.CharField', [], {'max_length': '40', 'null': 'True', 'blank': 'True'}), +            'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'chimere.routefile': { +            'Meta': {'ordering': "('name',)", 'object_name': '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': {'ordering': "['category', 'order']", 'object_name': 'SubCategory'}, +            'areas': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'to': "orm['chimere.Area']"}), +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            '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'}, +            '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/models.py b/chimere/models.py index 85419dc..7e5adbe 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -38,6 +38,7 @@ from django.utils.translation import ugettext_lazy as _  from chimere.widgets import PointField, RouteField, SelectMultipleField, \                              TextareaWidget  from chimere.managers import BaseGeoManager +from chimere.utils import KMLManager, OSMManager  class News(models.Model):      """News of the site @@ -190,6 +191,28 @@ class SubCategory(models.Model):          return [(category, sub_cats) for category, sub_cats \                                           in sub_categories.items()] +IMPORTERS = {'KML':KMLManager, +             'OSM':OSMManager} + +IMPORTER_CHOICES = (('KML', 'KML'), +                    ('OSM', 'OSM')) + +class Importer(models.Model): +    ''' +    Data importer for a specific subcategory +    ''' +    importer_type = models.CharField(_(u"Importer type"), max_length=4, +                                     choices=IMPORTER_CHOICES) +    source_url = models.CharField(_(u"Source URL"), max_length=200, +                                  blank=True, null=True) +    filtr = models.CharField(_(u"Filter"), max_length=200, +                             blank=True, null=True) +    subcategory = models.ForeignKey(SubCategory, +                         verbose_name=_(u"Associated subcategory")) + +    class Meta: +        verbose_name = _(u"Importer") +  class GeographicItem(models.Model):      name = models.CharField(_(u"Name"), max_length=150)      categories = SelectMultipleField(SubCategory) @@ -202,11 +225,15 @@ class GeographicItem(models.Model):      STATUS = (('S', _(u'Submited')),                ('A', _(u'Available')),                ('M', _(u'Modified')), -              ('D', _(u'Disabled')),) +              ('D', _(u'Disabled')), +              ('I', _(u'Imported')), +              ('E', _(u"Excluded")))      STATUS_DCT = {}      for key, label in STATUS:          STATUS_DCT[key] = label      status = models.CharField(_(u"Status"), max_length=1, choices=STATUS) +    import_key = models.CharField(_(u"Import key"), max_length=200, +                                  blank=True, null=True)      if settings.CHIMERE_DAYS_BEFORE_EVENT:          start_date = models.DateField(_(u"Start date"), blank=True, null=True,              help_text=_(u"Not mandatory. Set it for dated item such as event. "\ diff --git a/chimere/utils.py b/chimere/utils.py new file mode 100644 index 0000000..f6300cb --- /dev/null +++ b/chimere/utils.py @@ -0,0 +1,31 @@ +#!/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. + +""" +Utilitaries +""" + +class ImportManager: +    pass + +class KMLManager(ImportManager): +    pass + +class OSMManager(ImportManager): +    pass  | 
