diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-11-19 00:51:31 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-11-19 00:51:31 +0100 | 
| commit | 4399a14e200a28b88b6431f0c89b10f34bc7230c (patch) | |
| tree | 81220b2460f14780d8b5db243fcba5d76a62c941 | |
| parent | e4e3aec612c769becdf38ea2ff7e4e9b0e6dffc5 (diff) | |
| download | Chimère-4399a14e200a28b88b6431f0c89b10f34bc7230c.tar.bz2 Chimère-4399a14e200a28b88b6431f0c89b10f34bc7230c.zip | |
Import: manage way imports without marker associated
| -rw-r--r-- | chimere/migrations/0037_auto__add_unique_area_order__add_field_importer_associate_marker_to_wa.py | 251 | ||||
| -rw-r--r-- | chimere/models.py | 53 | ||||
| -rw-r--r-- | chimere/tests.py | 38 | ||||
| -rw-r--r-- | chimere/utils.py | 3 | 
4 files changed, 318 insertions, 27 deletions
| diff --git a/chimere/migrations/0037_auto__add_unique_area_order__add_field_importer_associate_marker_to_wa.py b/chimere/migrations/0037_auto__add_unique_area_order__add_field_importer_associate_marker_to_wa.py new file mode 100644 index 0000000..4b40fb9 --- /dev/null +++ b/chimere/migrations/0037_auto__add_unique_area_order__add_field_importer_associate_marker_to_wa.py @@ -0,0 +1,251 @@ +# -*- coding: 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 unique constraint on 'Area', fields ['order'] +        db.create_unique('chimere_area', ['order']) + +        # Adding field 'Importer.associate_marker_to_way' +        db.add_column('chimere_importer', 'associate_marker_to_way', +                      self.gf('django.db.models.fields.BooleanField')(default=True), +                      keep_default=False) + +        # Adding field 'Route.has_associated_marker' +        db.add_column('chimere_route', 'has_associated_marker', +                      self.gf('django.db.models.fields.BooleanField')(default=True), +                      keep_default=False) + + +    def backwards(self, orm): +        # Removing unique constraint on 'Area', fields ['order'] +        db.delete_unique('chimere_area', ['order']) + +        # Deleting field 'Importer.associate_marker_to_way' +        db.delete_column('chimere_importer', 'associate_marker_to_way') + +        # Deleting field 'Route.has_associated_marker' +        db.delete_column('chimere_route', 'has_associated_marker') + + +    models = { +        'chimere.area': { +            'Meta': {'ordering': "('order', 'name')", 'object_name': 'Area'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'default_subcategories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False', 'blank': 'True'}), +            'dynamic_categories': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'external_css': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'layers': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'through': "orm['chimere.AreaLayers']", 'to': "orm['chimere.Layer']"}), +            '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', [], {'unique': 'True'}), +            'restrict_to_extent': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'areas'", 'blank': 'True', 'db_table': "'chimere_subcategory_areas'", 'to': "orm['chimere.SubCategory']"}), +            'upper_left_corner': ('django.contrib.gis.db.models.fields.PointField', [], {'default': "'POINT(0 0)'"}), +            'urn': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'blank': 'True'}), +            'welcome_message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}) +        }, +        'chimere.arealayers': { +            'Meta': {'ordering': "('order',)", 'object_name': 'AreaLayers'}, +            'area': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Area']"}), +            'default': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'layer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.Layer']"}), +            'order': ('django.db.models.fields.IntegerField', [], {}) +        }, +        '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'}, +            'associate_marker_to_way': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), +            'categories': ('chimere.widgets.SelectMultipleField', [], {'to': "orm['chimere.SubCategory']", 'symmetrical': 'False'}), +            'default_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            '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'}), +            'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), +            'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), +            'source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'source_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), +            'srid': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'state': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'zipped': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) +        }, +        'chimere.layer': { +            'Meta': {'object_name': 'Layer'}, +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'layer_code': ('django.db.models.fields.TextField', [], {'max_length': '300'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}) +        }, +        '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'}), +            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), +            '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'}), +            'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), +            'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), +            'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), +            '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.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), +            'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', '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'}), +            'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'multimedia_files'", 'to': "orm['chimere.Marker']"}), +            'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['chimere.MultimediaType']"}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), +            'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), +            'url': ('django.db.models.fields.URLField', [], {'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'}, +            'areas': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'to': "orm['chimere.Area']", 'null': 'True', 'blank': 'True'}), +            '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', [], {'null': 'True', 'blank': 'True'}), +            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), +            'marker': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'pictures'", 'to': "orm['chimere.Marker']"}), +            'miniature': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), +            'order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), +            'picture': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}), +            'thumbnailfile': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), +            'thumbnailfile_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'thumbnailfile_width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'width': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}) +        }, +        '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'}), +            'mandatory': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), +            'order': ('django.db.models.fields.IntegerField', [], {}), +            'subcategories': ('chimere.widgets.SelectMultipleField', [], {'symmetrical': 'False', 'related_name': "'properties'", 'blank': 'True', 'to': "orm['chimere.SubCategory']"}), +            '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'}), +            'has_associated_marker': ('django.db.models.fields.BooleanField', [], {'default': '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'}), +            'import_source': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'import_version': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), +            'license': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), +            'modified_since_import': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'name': ('django.db.models.fields.CharField', [], {'max_length': '150'}), +            'not_for_osm': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), +            'origin': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), +            '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.TextField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), +            'submiter_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), +            'submiter_name': ('django.db.models.fields.CharField', [], {'max_length': '40', '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'}, +            'available': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), +            'category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'subcategories'", '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', [], {'default': '1000'}), +            'submission': ('django.db.models.fields.BooleanField', [], {'default': 'True'}) +        }, +        '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']
\ No newline at end of file diff --git a/chimere/models.py b/chimere/models.py index 12ec7a1..924fd54 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -248,6 +248,8 @@ class Importer(models.Model):                        verbose_name=_(u"Associated subcategories"))      state = models.CharField(_(u"State"), max_length=200,                               blank=True, null=True) +    associate_marker_to_way = models.BooleanField(_(u"Automatically associate "\ +                                           u"a marker to a way"), default=False)      class Meta:          verbose_name = _(u"Importer") @@ -848,6 +850,8 @@ class Route(GeographicItem):                            null=True, height_field='height', width_field='width')      height = models.IntegerField(_(u"Height"), blank=True, null=True)      width = models.IntegerField(_(u"Width"), blank=True, null=True) +    has_associated_marker = models.BooleanField(_(u"Has an associated marker"), +                                                default=True)      objects = models.GeoManager()      def __unicode__(self): @@ -952,28 +956,31 @@ def route_post_save(sender, **kwargs):          return      geometry_post_save(pre_save_route_values)(sender, **kwargs)      instance = kwargs['instance'] -    marker_fields = [f.attname for f in Marker._meta.fields] -    route_fields = [f.attname for f in Route._meta.fields] -    marker_dct = dict([(k, getattr(instance, k)) for k in marker_fields -                       if k in route_fields and k not in ('id', 'ref_item_id')]) -    marker_dct['point'] = "SRID=%d;POINT(%f %f)" % (instance.route.srid, -                              instance.route[0][0], instance.route[0][1]) -    marker, created = Marker.objects.get_or_create(route=instance, -                                                   defaults=marker_dct) -    if not created: -        marker.status = instance.status -        marker.point = marker_dct['point'] -    marker.save() -    properties = {} -    for pm in instance.properties(): -        prop = instance.getProperty(pm) -        if prop: -            properties[pm.pk] = prop.python_value -    # fix mis-initialized markers -    if created: -        for cat in instance.categories.all(): -            marker.categories.add(cat) -    marker.saveProperties(properties) + +    # manage associated marker +    if instance.has_associated_marker: +        marker_fields = [f.attname for f in Marker._meta.fields] +        route_fields = [f.attname for f in Route._meta.fields] +        marker_dct = dict([(k, getattr(instance, k)) for k in marker_fields +                           if k in route_fields and k not in ('id', 'ref_item_id')]) +        marker_dct['point'] = "SRID=%d;POINT(%f %f)" % (instance.route.srid, +                                  instance.route[0][0], instance.route[0][1]) +        marker, created = Marker.objects.get_or_create(route=instance, +                                                       defaults=marker_dct) +        if not created: +            marker.status = instance.status +            marker.point = marker_dct['point'] +        marker.save() +        properties = {} +        for pm in instance.properties(): +            prop = instance.getProperty(pm) +            if prop: +                properties[pm.pk] = prop.python_value +        # fix mis-initialized markers +        if created: +            for cat in instance.categories.all(): +                marker.categories.add(cat) +        marker.saveProperties(properties)  post_save.connect(route_post_save, sender=Route) @@ -982,7 +989,7 @@ def sync_m2m_route(sender, **kwargs):          return      route = kwargs['instance']      marker = route.associated_marker -    if not marker.count: +    if not marker.count():          return      marker = marker.all()[0]      marker.categories.clear() diff --git a/chimere/tests.py b/chimere/tests.py index e189fb9..5e0ba7c 100644 --- a/chimere/tests.py +++ b/chimere/tests.py @@ -120,7 +120,7 @@ class KMLImporterTest(TestCase, ImporterTest):          importer2 = Importer.objects.create(importer_type='KML',           source=test_dir_path+'tests/sample.kml', -         filtr="Subcategory 1") +         filtr="Subcategory 1", associate_marker_to_way=True)          importer2.categories.add(subcategory_1)          importer2.categories.add(subcategory_2) @@ -138,14 +138,14 @@ class KMLImporterTest(TestCase, ImporterTest):  class ShapefileImporterTest(TestCase, ImporterTest):      def setUp(self): -        subcategory_1, subcategory_2 = subcategory_setup() +        self.subcategory_1, self.subcategory_2 = subcategory_setup()          importer = Importer.objects.create(importer_type='SHP',              source=test_dir_path+'tests/sample_nodes.shp.zip', zipped=True) -        importer.categories.add(subcategory_1) +        importer.categories.add(self.subcategory_1)          importer2 = Importer.objects.create(importer_type='SHP',              source=test_dir_path+'tests/sample_ways.shp.zip',              zipped=True) -        importer2.categories.add(subcategory_2) +        importer2.categories.add(self.subcategory_2)          self.marker_importers = [(importer, 29),                                   (importer2, 5),] @@ -154,6 +154,23 @@ class ShapefileImporterTest(TestCase, ImporterTest):      def test_export(self):          filename, zip_stream = ShapefileManager.export(Marker.objects.all()) +    def test_associate_marker_to_way(self): +        importer, nb = self.marker_importers[1] + +        importer.associate_marker_to_way = True +        importer.save() +        nb, nb_updated, res = importer.manager.get() +        nb = Marker.objects.filter(categories__pk=self.subcategory_2.pk).count() +        self.assertEqual(nb, 5) +        Marker.objects.filter(categories__pk=self.subcategory_2.pk).delete() +        Route.objects.filter(categories__pk=self.subcategory_2.pk).delete() + +        importer.associate_marker_to_way = False +        importer.save() +        nb, nb_updated, res = importer.manager.get() +        nb = Marker.objects.filter(categories__pk=self.subcategory_2.pk).count() +        self.assertEqual(nb, 0) +  class OSMImporterTest(TestCase, ImporterTest):      def setUp(self):          subcategory_1, subcategory_2 = subcategory_setup() @@ -309,3 +326,16 @@ class RapprochementTest(TestCase):                                                 status='M').count(), 0)          for k in new_vals:              self.assertEqual(getattr(ref_marker, k), new_vals[k]) + +class RouteTest(TestCase): +    def setUp(self): +        self.subcategories = subcategory_setup() + +    def test_route_creation(self): +        route_1 = Route.objects.create(name='Route 1', +                      route='SRID=4326;LINESTRING (30 10, 10 30, 40 40)') +        self.assertEqual(Marker.objects.filter(route=route_1).count(), 1) +        route_2 = Route.objects.create(name='Route 1', +                      route='SRID=4326;LINESTRING (30 10, 10 30, 40 40)', +                      has_associated_marker=False) +        self.assertEqual(Marker.objects.filter(route=route_2).count(), 0) diff --git a/chimere/utils.py b/chimere/utils.py index 75c0ad4..3e85a70 100644 --- a/chimere/utils.py +++ b/chimere/utils.py @@ -102,6 +102,9 @@ class ImportManager:              values.update({                  'import_source':self.importer_instance.source})              values['status'] = 'I' +            if not self.importer_instance.associate_marker_to_way\ +              and cls.__name__ == 'Route': +                values['has_associated_marker'] = False              try:                  item = cls.objects.create(**values)              except TypeError: | 
