diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-12-13 16:08:19 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-12-13 16:08:19 +0100 |
commit | 51f788fd4e81186be2f7b7b4459d3d90a7b47bf2 (patch) | |
tree | 232659156f76ff7664139d963dac8d8c68e1d43f /chimere | |
parent | 70811d699e68c075ed3cae543cbb8b695d386730 (diff) | |
parent | 3aaae876d73a9c16d2961bea9ae2012ae0bc5b0e (diff) | |
download | Chimère-51f788fd4e81186be2f7b7b4459d3d90a7b47bf2.tar.bz2 Chimère-51f788fd4e81186be2f7b7b4459d3d90a7b47bf2.zip |
Merge branch 'master' into saclay
Conflicts:
chimere/admin.py
chimere/locale/fr/LC_MESSAGES/django.po
chimere/tests.py
chimere/utils.py
Diffstat (limited to 'chimere')
-rw-r--r-- | chimere/admin.py | 66 | ||||
-rw-r--r-- | chimere/forms.py | 4 | ||||
-rw-r--r-- | chimere/locale/fr/LC_MESSAGES/django.po | 422 | ||||
-rw-r--r-- | chimere/migrations/0040_remove_excluded_status.py | 242 | ||||
-rw-r--r-- | chimere/migrations/0041_auto__add_field_importer_overwrite.py | 244 | ||||
-rw-r--r-- | chimere/models.py | 17 | ||||
-rw-r--r-- | chimere/static/chimere/js/importer_interface.js | 11 | ||||
-rw-r--r-- | chimere/templates/admin/chimere/marker/change_form.html | 13 | ||||
l--------- | chimere/templates/admin/chimere/route/change_form.html | 1 | ||||
-rw-r--r-- | chimere/tests.py | 103 | ||||
-rw-r--r-- | chimere/utils.py | 37 |
11 files changed, 899 insertions, 261 deletions
diff --git a/chimere/admin.py b/chimere/admin.py index 833ba9d..3c24de0 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -95,39 +95,44 @@ def export_to_csv(modeladmin, request, queryset): export_to_csv.short_description = _(u"Export to CSV") def managed_modified(modeladmin, request, queryset): + # not very clean... There is must be a better way to do that + redirect_url = request.get_full_path().split('admin_modification')[0] if queryset.count() != 1: messages.error(request, _(u"Only one item can be managed at a " u"time.")) - return HttpResponseRedirect(request.get_full_path()) + return HttpResponseRedirect(redirect_url) item = queryset.all()[0] - if not item.status == 'M': + if not item.ref_item or item.ref_item == item: try: - item = modeladmin.model.objects.get(ref_item=item, status='M') + item = modeladmin.model.objects.get(ref_item=item) except ObjectDoesNotExist: messages.error(request, _(u"No modified item associated " u"to the selected item.")) - return HttpResponseRedirect(request.get_full_path()) + return HttpResponseRedirect(redirect_url) item_ref = item.ref_item if request.POST.get('rapprochement'): couple = [(item, item_ref)] if hasattr(item, 'associated_marker'): couple.append((item.associated_marker.all()[0], item_ref.associated_marker.all()[0])) - updated_keys = dict(request.POST) + updated = dict(request.POST) # clean for k in ('action', 'rapprochement', 'index', '_selected_action'): - if k in updated_keys: - updated_keys.pop(k) + if k in updated: + updated.pop(k) for idx, cpl in enumerate(couple): it, it_ref = cpl # don't copy geometry of associated items if idx: for k in ('route', 'point'): - if k in updated_keys: - updated_keys.pop(k) + if k in updated: + updated.pop(k) + updated_keys = updated.keys() + if it.status == 'I': + updated_keys.append('import_version') for k in updated_keys: - if not request.POST[k]: + if k != 'import_version' and not request.POST[k]: continue if hasattr(it_ref, k): c_value = getattr(it_ref, k) @@ -149,7 +154,7 @@ def managed_modified(modeladmin, request, queryset): it.delete() item.delete() messages.success(request, _(u"Modified item traited.")) - return HttpResponseRedirect(request.get_full_path()) + return HttpResponseRedirect(redirect_url) return render_to_response('admin/chimere/managed_modified.html', {'item':item, 'item_ref':item_ref}, context_instance=RequestContext(request)) @@ -181,7 +186,7 @@ class MarkerAdmin(admin.ModelAdmin): exclude = ['submiter_session_key', 'import_key', 'import_version', 'available_date', 'ref_item'] readonly_fields = ['submiter_email', 'submiter_comment', 'import_source', - 'submiter_name', 'ref_item', 'modified_since_import'] + 'submiter_name', 'ref_item', 'modified_since_import', 'route'] form = MarkerAdminForm fieldsets = ((None, { 'fields': ['point', 'name', 'status', 'categories', @@ -194,10 +199,10 @@ class MarkerAdmin(admin.ModelAdmin): }), (_(u"Import"), { 'classes':('collapse',), - 'fields': ('modified_since_import', 'import_source', - 'origin', 'license') + 'fields': ('not_for_osm', 'modified_since_import', + 'import_source', 'origin', 'license') }), - (_(u"Advanced options"), { + (_(u"Associated items"), { 'classes':('collapse',), 'fields': ('ref_item', 'route',) }), @@ -229,7 +234,24 @@ class MarkerAdmin(admin.ModelAdmin): qs = qs.order_by(*ordering) return qs.distinct() -class RouteAdmin(admin.ModelAdmin): + def admin_modification(self, request, item_id): + ''' + Redirect to the marker modification form + ''' + return managed_modified(self, request, + Marker.objects.filter(pk=item_id)) + def get_urls(self): + from django.conf.urls.defaults import * + urls = super(MarkerAdmin, self).get_urls() + my_urls = patterns('', + url(r'^admin_modification/(?P<item_id>\d+)/$', + self.admin_site.admin_view(self.admin_modification), + name='admin-modification'), + ) + return my_urls + urls + + +class RouteAdmin(MarkerAdmin): """ Specialized the Route field. """ @@ -238,7 +260,7 @@ class RouteAdmin(admin.ModelAdmin): list_filter = ('status', 'categories') exclude = ['height', 'width'] form = RouteAdminForm - readonly_fields = ('associated_file',) + readonly_fields = ('associated_file', 'ref_item', 'has_associated_marker') actions = [validate, disable, managed_modified, export_to_kml, export_to_shapefile, export_to_csv] fieldsets = ((None, { @@ -255,12 +277,13 @@ class RouteAdmin(admin.ModelAdmin): 'fields': ('modified_since_import', 'import_source', 'origin', 'license') }), - (_(u"Advanced options"), { + (_(u"Associated items"), { 'classes':('collapse',), 'fields': ('ref_item', 'associated_file', 'has_associated_marker') }), ) + inlines = [] def queryset(self, request): qs = self.model._default_manager.get_query_set() @@ -275,6 +298,13 @@ class RouteAdmin(admin.ModelAdmin): qs = qs.order_by(*ordering) return qs + def admin_modification(self, request, item_id): + ''' + Redirect to the route modification form + ''' + return managed_modified(self, request, + Route.objects.filter(pk=item_id)) + class LayerInline(admin.TabularInline): model = AreaLayers extra = 1 diff --git a/chimere/forms.py b/chimere/forms.py index 200d2f1..1d403c8 100644 --- a/chimere/forms.py +++ b/chimere/forms.py @@ -154,11 +154,11 @@ class ImporterAdminForm(forms.ModelForm): if self.cleaned_data.get('importer_type') == 'OSM' and \ not self.cleaned_data.get('filtr'): raise forms.ValidationError(_(u"For OSM import you must be "\ - u"provide a filter. Select an area and node/way filter.")) + u"provide a filter. Select an area and node/way filter.")) if self.cleaned_data.get('importer_type') == 'OSM' and \ not RE_XAPI.match(self.cleaned_data.get('filtr')): raise forms.ValidationError(_(u"For OSM import you must be "\ - u"provide a filter. Select an area and node/way filter.")) + u"provide a filter. Select an area and node/way filter.")) if self.cleaned_data.get('importer_type') == 'SHP' and \ not self.cleaned_data.get('zipped'): raise forms.ValidationError(_(u"Shapefiles must be provided in a "\ diff --git a/chimere/locale/fr/LC_MESSAGES/django.po b/chimere/locale/fr/LC_MESSAGES/django.po index 77a7d19..d15aa9a 100644 --- a/chimere/locale/fr/LC_MESSAGES/django.po +++ b/chimere/locale/fr/LC_MESSAGES/django.po @@ -1,23 +1,24 @@ # Chimère # Copyright (C) 2008-2012 # This file is distributed under the same license as the Chimère package. -# Étienne Loks <etienne.loks@peacefrogs.net>, 2008-2012. +# Étienne Loks <etienne.loks@peacefrogs.net>, 2008-2011. # msgid "" msgstr "" -"Project-Id-Version: 2.0\n" +"Project-Id-Version: 0.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-11-26 19:26+0100\n" +"POT-Creation-Date: 2012-12-13 15:52+0100\n" +"PO-Revision-Date: 2010-03-20 20:00+0100\n" "Last-Translator: Étienne Loks <etienne.loks@peacefrogs.net>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: __init__.py:8 models.py:763 +#: __init__.py:8 models.py:768 msgid "Multimedia files" msgstr "Fichiers multimedias" -#: __init__.py:9 models.py:835 +#: __init__.py:9 models.py:840 msgid "Picture files" msgstr "Fichiers d'image" @@ -45,95 +46,94 @@ msgstr "Flux RSS" msgid "Contact us" msgstr "Nous contacter" -#: admin.py:59 +#: admin.py:54 msgid "Disable" msgstr "Désactiver" -#: admin.py:65 templates/admin/chimere/managed_modified.html:44 +#: admin.py:60 templates/admin/chimere/managed_modified.html:44 #: templates/chimere/feeds/rss.html:70 msgid "Validate" msgstr "Valider" -#: admin.py:76 +#: admin.py:71 msgid "Export to KML" msgstr "Exporter en KML" -#: admin.py:90 +#: admin.py:85 msgid "Export to Shapefile" msgstr "Exporter en Shapefile" -#: admin.py:100 +#: admin.py:95 msgid "Export to CSV" msgstr "Exporter en CSV" -#: admin.py:104 +#: admin.py:101 msgid "Only one item can be managed at a time." msgstr "Seul un élément à la fois peut-être géré." -#: admin.py:113 +#: admin.py:110 msgid "No modified item associated to the selected item." msgstr "Pas d'élément modifié associé à l'élément sélectionné." #: admin.py:156 msgid "Modified item traited." -msgstr "Modifié depuis le dernier import" +msgstr "Élément modifié traité." #: admin.py:161 msgid "Managed modified items" msgstr "Gérer les éléments modifiés" -#: admin.py:195 admin.py:253 +#: admin.py:195 admin.py:270 msgid "Submitter" msgstr "Demandeur" -#: admin.py:200 admin.py:258 admin.py:301 +#: admin.py:200 admin.py:275 admin.py:326 msgid "Import" msgstr "Import" -#: admin.py:205 admin.py:263 -msgid "Advanced options" -msgstr "Options avancées" +#: admin.py:205 admin.py:280 +msgid "Associated items" +msgstr "Éléments associés" -#: admin.py:307 +#: admin.py:332 msgid "Cancel import" msgstr "Annuler l'import" -#: admin.py:313 +#: admin.py:338 msgid "Cancel export" msgstr "Annuler l'export" -#: admin.py:317 +#: admin.py:342 msgid "Can manage only one OSM export at a time." msgstr "Ne peux gérer qu'un seul export OSM à la fois." -#: admin.py:322 +#: admin.py:347 msgid "" "You must treat all item with the status \"imported\" before exporting to OSM." msgstr "" "Vous devez traiter tous les éléments avec le status « importé » avant " "d'exporter vers OSM." -#: admin.py:326 +#: admin.py:351 msgid "Only OSM importer are managed for export." msgstr "Seul les imports de type OSM peuvent être gérés pour les exports." -#: admin.py:333 +#: admin.py:358 msgid "No point of interest are concerned by this export." msgstr "Aucun point d'intérêt n'est concerné par cet export." -#: admin.py:345 +#: admin.py:370 msgid "Export launched." msgstr "Export lancé." -#: admin.py:349 +#: admin.py:374 #, python-format msgid "" "%s point(s) of interest concerned by this export before bounding box filter." msgstr "" -"%s point(s) d'intérêt concerné par cet export (avant le filtre sur la " -"zone)" +"%s point(s) d'intérêt concerné par cet export (avant le filtre sur la zone)" -#: admin.py:354 +#: admin.py:379 msgid "Export to osm" msgstr "Exporter vers osm" @@ -149,50 +149,50 @@ msgstr "Nouveaux points d'intérêt de " msgid "Last points of interest by area" msgstr "Nouveaux points d'intérêt par zone" -#: forms.py:90 +#: forms.py:83 msgid "New submission for" msgstr "Nouvelle proposition pour" -#: forms.py:91 +#: forms.py:84 #, python-format msgid "The new item \"%s\" has been submited in the category: " msgstr "Le nouvel élément « %s » a été proposé dans la catégorie : " -#: forms.py:93 +#: forms.py:86 msgid "To valid, precise or unvalid this item: " msgstr "Pour valider, préciser ou rejeter cet élément : " -#: forms.py:103 +#: forms.py:96 msgid "Email (optional)" msgstr "Courriel (optionnel) " -#: forms.py:104 +#: forms.py:97 msgid "Object" msgstr "Objet" -#: forms.py:125 +#: forms.py:117 msgid "OSM user" msgstr "Utilisateur OSM" -#: forms.py:126 models.py:1452 +#: forms.py:118 models.py:1457 msgid "Password" msgstr "Mot de passe" -#: forms.py:130 +#: forms.py:122 msgid "API" msgstr "API" -#: forms.py:133 +#: forms.py:125 #, python-format msgid "Test API - %s" msgstr "API de test - %s" -#: forms.py:135 +#: forms.py:127 #, python-format msgid "Main API - %s" msgstr "API principale - %s" -#: forms.py:165 forms.py:169 +#: forms.py:156 forms.py:160 msgid "" "For OSM import you must be provide a filter. Select an area and node/way " "filter." @@ -200,73 +200,73 @@ msgstr "" "Pour les imports OSM vous devez fournir un filtre. Sélectionnez une zone et " "un filtre sur les nœuds/routes." -#: forms.py:173 +#: forms.py:164 msgid "Shapefiles must be provided in a zipped archive." msgstr "" "Les fichiers Shapefiles doivent être fournis regroupés dans une archive zip." -#: forms.py:177 +#: forms.py:168 msgid "You have to set \"source\" or \"source file\" but not both." msgstr "" "Vous devez spécifier le champ « Source » ou « Fichier source » mais pas les " "deux." -#: forms.py:182 +#: forms.py:173 msgid "You have to set \"source\" or \"source file\"." msgstr "Vous devez spécifier le champ « Source » ou « Fichier source »." -#: forms.py:243 +#: forms.py:234 msgid "End date has been set with no start date" msgstr "Une date de fin a été donnée sans date de début" -#: forms.py:247 +#: forms.py:238 msgid "End date can't be before start date" msgstr "La date de fin ne peut pas être antérieure à la date de début" -#: forms.py:257 +#: forms.py:248 msgid "This field is mandatory for the selected categories" msgstr "Ce champ est obligatoire pour les catégories sélectionnées" -#: forms.py:535 +#: forms.py:499 msgid "File" msgstr "Fichier" -#: forms.py:541 +#: forms.py:505 msgid "Bad file format: this must be a GPX or KML file" msgstr "Mauvais format de fichier : KML et GPX sont supportés" -#: forms.py:546 models.py:53 models.py:101 models.py:163 models.py:184 -#: models.py:197 models.py:212 models.py:362 models.py:697 models.py:753 -#: models.py:812 models.py:928 models.py:1257 models.py:1269 models.py:1442 -#: utils.py:465 templates/admin/chimere/managed_modified.html:23 +#: forms.py:510 models.py:53 models.py:101 models.py:163 models.py:184 +#: models.py:197 models.py:212 models.py:364 models.py:702 models.py:758 +#: models.py:817 models.py:933 models.py:1262 models.py:1274 models.py:1447 +#: utils.py:470 templates/admin/chimere/managed_modified.html:23 #: templates/chimere/edit.html:39 templates/chimere/edit_route.html:36 #: templates/chimere/blocks/alternate_multimedia.html:39 msgid "Name" msgstr "Nom" -#: forms.py:555 models.py:1306 +#: forms.py:519 models.py:1311 msgid "Area" msgstr "Zone" -#: forms.py:595 +#: forms.py:559 msgid "No area selected." msgstr "Pas de zone sélectionnée." -#: forms.py:602 +#: forms.py:566 #, python-format msgid "The area \"%s\" has the same order, you need to choose another one." msgstr "" "La zone « %s » a le même numéro d'ordre, vous devez un choisir un autre." -#: forms.py:647 +#: forms.py:611 msgid "Start" msgstr "Départ" -#: forms.py:648 +#: forms.py:612 msgid "Finish" -msgstr "Arrivée :" +msgstr "Arrivée" -#: forms.py:649 +#: forms.py:613 msgid "Speed" msgstr "Vitesse" @@ -274,13 +274,13 @@ msgstr "Vitesse" msgid "Mnemonic" msgstr "Mnémonique" -#: models.py:56 models.py:102 models.py:185 models.py:213 models.py:373 -#: models.py:701 models.py:1275 models.py:1444 models.py:1485 +#: models.py:56 models.py:102 models.py:185 models.py:213 models.py:375 +#: models.py:706 models.py:1280 models.py:1449 models.py:1490 msgid "Available" msgstr "Disponible" -#: models.py:57 models.py:173 models.py:186 models.py:230 models.py:755 -#: models.py:827 models.py:1274 models.py:1431 models.py:1443 +#: models.py:57 models.py:173 models.py:186 models.py:230 models.py:760 +#: models.py:832 models.py:1279 models.py:1436 models.py:1448 msgid "Order" msgstr "Ordre" @@ -292,15 +292,15 @@ msgstr "Chemin du patron" msgid "Page" msgstr "Page" -#: models.py:103 models.py:456 +#: models.py:103 models.py:457 msgid "Is front page" msgstr "Est en page principale" -#: models.py:105 models.py:1453 +#: models.py:105 models.py:1458 msgid "Date" msgstr "Date" -#: models.py:107 models.py:754 +#: models.py:107 models.py:759 msgid "Url" msgstr "Url" @@ -337,16 +337,16 @@ msgstr "Couleur" msgid "Category" msgstr "Catégorie" -#: models.py:198 models.py:693 models.py:813 models.py:994 +#: models.py:198 models.py:698 models.py:818 models.py:999 #: templates/chimere/blocks/alternate_multimedia.html:43 msgid "Image" msgstr "Image" -#: models.py:200 models.py:815 models.py:996 +#: models.py:200 models.py:820 models.py:1001 msgid "Height" msgstr "Hauteur" -#: models.py:201 models.py:816 models.py:997 +#: models.py:201 models.py:821 models.py:1002 msgid "Width" msgstr "Largeur" @@ -356,13 +356,13 @@ msgstr "Icône" #: models.py:214 msgid "Available for submission" -msgstr "Disponible pour proposition" +msgstr "Disponible pour soumission" #: models.py:216 msgid "Marker" msgstr "Point d'intérêt" -#: models.py:217 models.py:990 models.py:1007 +#: models.py:217 models.py:995 models.py:1012 #: templates/chimere/edit_route.html:27 msgid "Route" msgstr "Trajet" @@ -427,287 +427,287 @@ msgstr "SRID" msgid "Zipped file" msgstr "Fichier zippé" -#: models.py:332 models.py:390 +#: models.py:332 +msgid "Overwrite existing data" +msgstr "Écraser les données existantes" + +#: models.py:334 models.py:391 msgid "Origin" msgstr "Origine" -#: models.py:334 models.py:392 +#: models.py:336 models.py:393 msgid "License" msgstr "Licence" -#: models.py:337 +#: models.py:339 msgid "Associated subcategories" msgstr "Sous-catégories associées" -#: models.py:338 utils.py:469 +#: models.py:340 utils.py:474 msgid "State" msgstr "État" -#: models.py:340 +#: models.py:342 msgid "Automatically associate a marker to a way" msgstr "Associer automatiquement un marqueur à une route" -#: models.py:344 +#: models.py:346 msgid "Importer" msgstr "Import" -#: models.py:364 +#: models.py:366 msgid "Submitter session key" msgstr "Clé de session du demandeur" -#: models.py:366 +#: models.py:368 msgid "Submitter name or nickname" msgstr "Nom ou pseudo du demandeur" -#: models.py:368 +#: models.py:370 msgid "Submitter email" msgstr "Courriel du demandeur" -#: models.py:370 +#: models.py:372 msgid "Submitter comment" msgstr "Commentaire du demandeur" -#: models.py:372 +#: models.py:374 msgid "Submited" msgstr "Soumis" -#: models.py:374 +#: models.py:376 msgid "Modified" msgstr "Modifié" -#: models.py:375 +#: models.py:377 msgid "Disabled" msgstr "Désactivé" -#: models.py:376 +#: models.py:378 msgid "Imported" msgstr "Importé" -#: models.py:377 -msgid "Excluded" -msgstr "Exclu" - -#: models.py:379 +#: models.py:380 msgid "Status" msgstr "État" -#: models.py:380 +#: models.py:381 msgid "Import key" msgstr "Clé d'import" -#: models.py:382 +#: models.py:383 msgid "Import version" msgstr "Version de l'import" -#: models.py:384 +#: models.py:385 msgid "Source" msgstr "Source" -#: models.py:386 +#: models.py:387 msgid "Modified since last import" msgstr "Modifié depuis le dernier import" -#: models.py:388 -msgid "Not to be imported inside OSM" -msgstr "Ne pas importer dans OSM" +#: models.py:389 +msgid "Not to be exported to OSM" +msgstr "À ne pas exporter vers OSM" -#: models.py:394 templates/chimere/edit.html:56 +#: models.py:395 templates/chimere/edit.html:56 #: templates/chimere/edit_route.html:52 msgid "Start date" msgstr "Date de début" -#: models.py:395 +#: models.py:396 msgid "Not mandatory. Set it for dated item such as event. Format YYYY-MM-DD" msgstr "" "Optionnel. Précisez ce champ pour les éléments datés comme un événement. " "Format du champ : AAAA-MM-JJ" -#: models.py:397 templates/chimere/edit.html:62 +#: models.py:398 templates/chimere/edit.html:62 #: templates/chimere/edit_route.html:58 msgid "End date" msgstr "Date de fin" -#: models.py:398 +#: models.py:399 msgid "" "Not mandatory. Set it only if you have a multi-day event. Format YYYY-MM-DD" msgstr "" "Optionnel. Précisez ce champ seulement pour des événements durant plusieurs " "jours. Format du champ : AAAA-MM-JJ" -#: models.py:448 +#: models.py:449 msgid "Reference marker" msgstr "Point d'intérêt de référence" -#: models.py:449 utils.py:471 +#: models.py:450 utils.py:476 msgid "Localisation" msgstr "Localisation" -#: models.py:451 +#: models.py:452 msgid "Available Date" msgstr "Date de mise en disponibilité" -#: models.py:455 utils.py:470 templates/admin/chimere/managed_modified.html:31 +#: models.py:456 utils.py:475 templates/admin/chimere/managed_modified.html:31 #: templates/chimere/edit.html:49 templates/chimere/edit_route.html:46 msgid "Description" msgstr "Description" -#: models.py:523 models.py:1495 +#: models.py:524 models.py:1500 msgid "Point of interest" msgstr "Point d'intérêt" -#: models.py:691 +#: models.py:696 msgid "Audio" msgstr "Audio" -#: models.py:692 +#: models.py:697 msgid "Video" msgstr "Vidéo" -#: models.py:694 +#: models.py:699 msgid "Other" msgstr "Autre" -#: models.py:695 +#: models.py:700 msgid "Media type" msgstr "Type de media" -#: models.py:698 +#: models.py:703 msgid "Mime type" msgstr "Type mime" -#: models.py:700 +#: models.py:705 msgid "Inside an iframe" msgstr "À l'intérieur d'un iframe" -#: models.py:704 +#: models.py:709 msgid "Multimedia type" msgstr "Type de multimedia" -#: models.py:705 +#: models.py:710 msgid "Multimedia types" msgstr "Types de multimedia" -#: models.py:714 +#: models.py:719 msgid "Automatic recognition" msgstr "Reconnaissance automatique" -#: models.py:740 +#: models.py:745 msgid "Extension name" msgstr "Nom de l'extension" -#: models.py:742 +#: models.py:747 msgid "Associated multimedia type" msgstr "Type de multimedia associé" -#: models.py:746 +#: models.py:751 msgid "Multimedia extension" -msgstr "Extension de fichier multimedia" +msgstr "Extension multimedia" -#: models.py:747 +#: models.py:752 msgid "Multimedia extensions" -msgstr "Extensions de fichier multimedia" +msgstr "Extensions multimedia" -#: models.py:757 models.py:817 +#: models.py:762 models.py:822 msgid "Display inside the description?" msgstr "Apparaît dans la description ?" -#: models.py:762 +#: models.py:767 msgid "Multimedia file" msgstr "Fichier multimedia" -#: models.py:819 +#: models.py:824 msgid "Thumbnail" msgstr "Miniature" -#: models.py:823 +#: models.py:828 msgid "Thumbnail height" msgstr "Hauteur de la miniature" -#: models.py:825 +#: models.py:830 msgid "Thumbnail width" msgstr "Largeur de la miniature" -#: models.py:834 +#: models.py:839 msgid "Picture file" msgstr "Fichier d'image" -#: models.py:929 +#: models.py:934 msgid "Raw file (gpx or kml)" msgstr "Fichier brut (gpx ou kml)" -#: models.py:931 +#: models.py:936 msgid "Simplified file" msgstr "Fichier simplifié" -#: models.py:933 +#: models.py:938 msgid "KML" msgstr "KML" -#: models.py:933 +#: models.py:938 msgid "GPX" msgstr "GPX" -#: models.py:938 +#: models.py:943 msgid "Route file" msgstr "Fichier de trajet" -#: models.py:939 +#: models.py:944 msgid "Route files" msgstr "Fichiers de trajet" -#: models.py:989 +#: models.py:994 msgid "Reference route" msgstr "Trajet de référence" -#: models.py:993 +#: models.py:998 msgid "Associated file" msgstr "Fichier associé" -#: models.py:998 +#: models.py:1003 msgid "Has an associated marker" msgstr "Dispose d'un marqueur associé" -#: models.py:1258 +#: models.py:1263 msgid "Layer code" msgstr "Code pour la couche" -#: models.py:1264 +#: models.py:1269 msgid "Layer" msgstr "Couche" -#: models.py:1270 +#: models.py:1275 msgid "Area urn" msgstr "Urn de la zone" -#: models.py:1272 templates/chimere/blocks/welcome.html:3 +#: models.py:1277 templates/chimere/blocks/welcome.html:3 msgid "Welcome message" msgstr "Message d'accueil" -#: models.py:1276 +#: models.py:1281 msgid "Upper left corner" msgstr "Coin en haut à gauche" -#: models.py:1278 +#: models.py:1283 msgid "Lower right corner" msgstr "Coin en bas à droite" -#: models.py:1280 +#: models.py:1285 msgid "Default area" msgstr "Zone par défaut" -#: models.py:1281 +#: models.py:1286 msgid "Only one area is set by default" msgstr "Seule une zone est définie par défaut" -#: models.py:1285 +#: models.py:1290 msgid "Sub-categories checked by default" msgstr "Sous-catégories cochées par défaut" -#: models.py:1287 +#: models.py:1292 msgid "Sub-categories dynamicaly displayed" msgstr "Sous-categories affichées dynamiquement" -#: models.py:1288 +#: models.py:1293 msgid "" "If checked, categories are only displayed in the menu if they are available " "on the current extent." @@ -715,72 +715,72 @@ msgstr "" "Si coché, les catégories sont disponibles sur le menu seulement si elles " "apparaissent sur la zone affichée." -#: models.py:1292 models.py:1447 +#: models.py:1297 models.py:1452 msgid "Restricted to theses sub-categories" msgstr "Restreindre à ces sous-categories" -#: models.py:1293 +#: models.py:1298 msgid "If no sub-category is set all sub-categories are available" msgstr "" "Si aucune sous-catégorie n'est définie toutes les sous-catégories sont " "disponibles" -#: models.py:1295 +#: models.py:1300 msgid "Link to an external CSS" msgstr "Lien vers une feuille de style externe" -#: models.py:1297 +#: models.py:1302 msgid "Restrict to the area extent" msgstr "Restreindre à l'étendue de la zone" -#: models.py:1432 widgets.py:88 +#: models.py:1437 widgets.py:88 msgid "Default layer" msgstr "Couche par défaut" -#: models.py:1436 models.py:1437 +#: models.py:1441 models.py:1442 msgid "Layers" msgstr "Couches" -#: models.py:1445 +#: models.py:1450 msgid "Mandatory" msgstr "Obligatoire" -#: models.py:1448 +#: models.py:1453 msgid "" "If no sub-category is set all the property applies to all sub-categories" msgstr "" "Si aucune sous-catégorie n'est précisée, cette propriété est disponible pour " "toutes les sous-catégories" -#: models.py:1450 +#: models.py:1455 msgid "Text" msgstr "Texte" -#: models.py:1451 +#: models.py:1456 msgid "Long text" msgstr "Texte long" -#: models.py:1454 +#: models.py:1459 msgid "Choices" msgstr "Choix" -#: models.py:1462 +#: models.py:1467 msgid "Type" msgstr "Type" -#: models.py:1467 models.py:1483 models.py:1497 +#: models.py:1472 models.py:1488 models.py:1502 msgid "Property model" msgstr "Modèle de propriété" -#: models.py:1484 models.py:1498 +#: models.py:1489 models.py:1503 msgid "Value" msgstr "Valeur" -#: models.py:1490 +#: models.py:1495 msgid "Model property choice" msgstr "Choix pour les modèles de propriété" -#: models.py:1509 +#: models.py:1514 msgid "Property" msgstr "Propriété" @@ -834,69 +834,69 @@ msgstr "Export échoué" msgid "Export canceled" msgstr "Export annulé" -#: utils.py:130 utils.py:179 +#: utils.py:135 utils.py:184 msgid "Bad zip file" msgstr "Mauvais fichier zip" -#: utils.py:182 +#: utils.py:187 msgid "Missing file(s) inside the zip file" msgstr "Fichier(s) manquant(s) dans l'archive zip" -#: utils.py:223 +#: utils.py:228 msgid "Bad XML file" msgstr "Mauvais fichier XML" -#: utils.py:308 +#: utils.py:313 msgid "Error while reading the data source." msgstr "Erreur lors de la lecture de la source." -#: utils.py:326 +#: utils.py:331 #, python-format msgid "SRID cannot be guessed. The default SRID (%s) has been used." msgstr "Le SRID n'a pu être trouvé. Le SRID par défaut (%s) a été utilisé." -#: utils.py:347 +#: utils.py:352 msgid "Type of geographic item of this shapefile is not managed by Chimère." msgstr "" "Les types des éléments géographiques de ce fichier Shapefile ne sont pas " "gérés par Chimère." -#: utils.py:367 +#: utils.py:372 msgid "Bad Shapefile" msgstr "Mauvais fichier Shapefile" -#: utils.py:409 +#: utils.py:414 msgid "Could not create file!" msgstr "Ne peut pas créer le fichier !" -#: utils.py:420 +#: utils.py:425 msgid "Failed to create field" msgstr "Ne peut pas créer un champ" -#: utils.py:466 templates/admin/chimere/managed_modified.html:25 +#: utils.py:471 templates/admin/chimere/managed_modified.html:25 #: templates/chimere/edit.html:44 templates/chimere/edit_route.html:41 #: templates/chimere/main_map.html:13 #: templates/chimere/main_map_simple.html:10 msgid "Categories" msgstr "Catégories" -#: utils.py:499 +#: utils.py:504 msgid "Invalid CSV format" msgstr "Fichier CSV non valide" -#: utils.py:574 +#: utils.py:579 msgid "RSS feed is not well formed" msgstr "Flux RSS non valide" -#: utils.py:649 +#: utils.py:654 msgid "Nothing to import" msgstr "Rien à importer" -#: utils.py:737 +#: utils.py:742 msgid "New items imported - validate them before exporting" msgstr "Nouveaux éléments importés - valider ceux-ci avant d'exporter" -#: utils.py:739 +#: utils.py:744 msgid "" "There are items from a former import not yet validated - validate them " "before exporting" @@ -904,19 +904,19 @@ msgstr "" "Il y a des éléments d'un import précédent pas encore validé - Validez les " "avant d'exporter" -#: utils.py:751 +#: utils.py:756 msgid "Bad params - programming error" msgstr "Mauvais paramètres - erreur de programmation" -#: utils.py:761 +#: utils.py:766 msgid "Bad param" msgstr "Mauvais paramètre" -#: utils.py:776 +#: utils.py:781 msgid "No non ambigious tag is defined in the XAPI request" -msgstr "Aucun « tag » non ambigu n'est défini dans la requête XAPI" +msgstr "Pas de tag non ambigü définis dans la requête XAPI" -#: utils.py:778 +#: utils.py:783 msgid "" "No bounding box is defined in the XAPI request.If you are sure to manage the " "entire planet set the bounding box to -180,-90,180,90" @@ -1190,8 +1190,8 @@ msgid "" "of what you are doing: DON'T EXPORT TO OSM</strong>!" msgstr "" "Vérifiez que toutes les données à exporter vers OSM ont une licence " -"compatible. Vous pouvez exclure certains points d'intérêt en cochant la " -"case « Ne pas importer dans OSM » sur le formulaire de point d'intérêt. " +"compatible. Vous pouvez exclure certains points d'intérêt en cochant la case " +"« Ne pas importer dans OSM » sur le formulaire de point d'intérêt. " "<strong>Si vous n'êtes pas sûr de ce que vous êtes entrain de faire : " "N'IMPORTEZ PAS DANS OSM</strong> !" @@ -1199,6 +1199,18 @@ msgstr "" msgid "Export to OSM" msgstr "Exporter vers OSM" +#: templates/admin/chimere/marker/change_form.html:7 +#: templates/admin/chimere/route/change_form.html:7 +#, python-format +msgid "" +"\n" +"This item has a reference item associated to it. You should treat it via the " +"<a href='%(rapprochement_form)s'>rapprochement form</a>.\n" +msgstr "" +"\n" +"Cet élément a un élément de référence associé. Vous devriez le traiter via " +"le <a href='%(rapprochement_form)s'>formulaire de rapprochement</a>.\n" + #: templates/admin/chimere/propertymodel/change_form.html:5 msgid "" "After add/modification of property models you'll have to reload the " @@ -1249,7 +1261,7 @@ msgstr "Proposer une modification" #: templates/chimere/detail.html:35 msgid "I would like to propose an amendment for this item:" -msgstr "Je souhaiterai proposer une modification pour cet élément :" +msgstr "Je souhaiterais proposer une modification pour cet élément :" #: templates/chimere/edit.html:20 msgid "Error" @@ -1298,7 +1310,7 @@ msgstr "Commentaires au sujet de votre proposition" #: templates/chimere/edit.html:134 msgid "Upload in progress. Please wait..." -msgstr "Traitement en cours. Veuillez patienter..." +msgstr "Dépôt en cours. Veuillez patienter..." #: templates/chimere/edit.html:152 templates/chimere/edit_route.html:77 msgid "Propose" @@ -1332,7 +1344,7 @@ msgstr "Ajouter" #: templates/chimere/blocks/alternate_multimedia.html:35 msgid "Add multimedia from your computer or a website" -msgstr "Ajouter du multimedia depuis votre ordinateur ou un site web" +msgstr "Ajoutez du multimedia depuis votre ordinateur ou un site web" #: templates/chimere/blocks/alternate_multimedia.html:36 msgid "" @@ -1350,7 +1362,7 @@ msgstr "Audio, vidéo, autre..." #: templates/chimere/blocks/alternate_multimedia.html:47 msgid "Download" -msgstr "Téléchargement" +msgstr "Télécharger" #: templates/chimere/blocks/alternate_multimedia.html:48 msgid "Or" @@ -1358,19 +1370,19 @@ msgstr "Ou" #: templates/chimere/blocks/alternate_multimedia.html:80 msgid "You must provide a name." -msgstr "Vous devez donner un nom." +msgstr "Vous devez renseigner le nom." #: templates/chimere/blocks/alternate_multimedia.html:85 msgid "You must choose a media type." -msgstr "Voux devez choisir un type de média." +msgstr "Vous devez renseigner un type de fichier média." #: templates/chimere/blocks/alternate_multimedia.html:91 msgid "You must provide a file or a web address." -msgstr "Vous devez fournir un fichier ou une adresse web." +msgstr "Vous devez renseigner un fichier ou une adresse web." #: templates/chimere/blocks/alternate_multimedia.html:96 msgid "You must provide a web address." -msgstr "Voux devez donner une adresse web." +msgstr "Vous devez fournir une adresse web." #: templates/chimere/blocks/areas.html:4 msgid "Areas:" @@ -1575,8 +1587,32 @@ msgstr " :" msgid "Welcome to the %s" msgstr "Bienvenue sur %s" +#~ msgid "Advanced options" +#~ msgstr "Options avancées" + +#~ msgid "Excluded" +#~ msgstr "Exclu" + #~ msgid "Topics" #~ msgstr "Thèmes" #~ msgid "Administration de Chimère" #~ msgstr "Administration de Chimère" + +#~ msgid "Add/modify a site" +#~ msgstr "Ajouter ou modifier un site" + +#~ msgid "Categorys" +#~ msgstr "Catégories" + +#~ msgid "Theme" +#~ msgstr "Thème" + +#~ msgid "Subtheme" +#~ msgstr "Sous-thème" + +#~ msgid "Subthemes" +#~ msgstr "Sous-thèmes" + +#~ msgid "Themes" +#~ msgstr "Thèmes" diff --git a/chimere/migrations/0040_remove_excluded_status.py b/chimere/migrations/0040_remove_excluded_status.py new file mode 100644 index 0000000..3fda56b --- /dev/null +++ b/chimere/migrations/0040_remove_excluded_status.py @@ -0,0 +1,242 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models + +class Migration(DataMigration): + + def forwards(self, orm): + for marker in orm['chimere.Marker'].objects.filter(status='E'): + marker.status = 'D' + marker.save() + for route in orm['chimere.Route'].objects.filter(status='E'): + route.status = 'D' + route.save() + + def backwards(self, orm): + "No backward change needed." + + 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': 'False'}), + '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': 'True'}), + '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.multimediaextension': { + 'Meta': {'object_name': 'MultimediaExtension'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'extensions'", 'to': "orm['chimere.MultimediaType']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '6'}) + }, + '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']", 'null': 'True', 'blank': 'True'}), + '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': 'True'}), + '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'] + symmetrical = True diff --git a/chimere/migrations/0041_auto__add_field_importer_overwrite.py b/chimere/migrations/0041_auto__add_field_importer_overwrite.py new file mode 100644 index 0000000..9ae6b84 --- /dev/null +++ b/chimere/migrations/0041_auto__add_field_importer_overwrite.py @@ -0,0 +1,244 @@ +# -*- 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 field 'Importer.overwrite' + db.add_column('chimere_importer', 'overwrite', + self.gf('django.db.models.fields.BooleanField')(default=False), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'Importer.overwrite' + db.delete_column('chimere_importer', 'overwrite') + + + 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': 'False'}), + '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'}), + 'overwrite': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + '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': 'True'}), + '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.multimediaextension': { + 'Meta': {'object_name': 'MultimediaExtension'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'multimedia_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'extensions'", 'to': "orm['chimere.MultimediaType']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '6'}) + }, + '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']", 'null': 'True', 'blank': 'True'}), + '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': 'True'}), + '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 9113cfe..c393cba 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -329,6 +329,8 @@ class Importer(models.Model): blank=True, null=True) srid = models.IntegerField(_(u"SRID"), blank=True, null=True) zipped = models.BooleanField(_(u"Zipped file"), default=False) + overwrite = models.BooleanField(_(u"Overwrite existing data"), + default=False) origin = models.CharField(_(u"Origin"), max_length=100, blank=True, null=True) license = models.CharField(_(u"License"), max_length=100, @@ -373,8 +375,7 @@ class GeographicItem(models.Model): ('A', _(u'Available')), ('M', _(u'Modified')), ('D', _(u'Disabled')), - ('I', _(u'Imported')), - ('E', _(u"Excluded"))) + ('I', _(u'Imported'))) STATUS_DCT = dict(STATUS) status = models.CharField(_(u"Status"), max_length=1, choices=STATUS) import_key = models.CharField(_(u"Import key"), max_length=200, @@ -385,7 +386,7 @@ class GeographicItem(models.Model): blank=True, null=True) modified_since_import = models.BooleanField(_(u"Modified since last import"), default=True) - not_for_osm = models.BooleanField(_(u"Not to be imported inside OSM"), + not_for_osm = models.BooleanField(_(u"Not to be exported to OSM"), default=False) origin = models.CharField(_(u"Origin"), max_length=100, blank=True, null=True) @@ -639,8 +640,8 @@ class Marker(GeographicItem): PRE_ATTRS = { - 'Marker':('name', 'geometry', 'import_version'), - 'Route':('name', 'geometry', 'import_version'), + 'Marker':('name', 'geometry', 'import_version', 'modified_since_import'), + 'Route':('name', 'geometry', 'import_version', 'modified_since_import'), 'Area':('urn', 'name'), } def geometry_pre_save(cls, pre_save_geom_values): @@ -669,7 +670,11 @@ def geometry_post_save(pre_save_geom_values): or kwargs['instance'].pk not in pre_save_geom_values: return instance = kwargs['instance'] - name, geometry, import_version = pre_save_geom_values[instance.pk] + name, geometry, import_version, modified_since_import = \ + pre_save_geom_values[instance.pk] + # force the reinit of modified_since_import + if modified_since_import != instance.modified_since_import: + return if (instance.import_version != import_version and instance.modified_since_import): instance.modified_since_import = False diff --git a/chimere/static/chimere/js/importer_interface.js b/chimere/static/chimere/js/importer_interface.js index 9dc669f..aa332d4 100644 --- a/chimere/static/chimere/js/importer_interface.js +++ b/chimere/static/chimere/js/importer_interface.js @@ -1,18 +1,19 @@ django.jQuery(function($) { var importer_form_filter = { OSM:new Array('field-filtr', 'field-default_name', 'field-categories', - 'field-source'), + 'field-source', 'field-overwrite'), KML:new Array('field-source', 'field-source_file', 'field-default_name', 'field-filtr', 'field-zipped', 'field-origin', - 'field-license', 'field-categories'), + 'field-license', 'field-categories', 'field-overwrite'), SHP:new Array('field-source', 'field-source_file', 'field-default_name', 'field-zipped', 'field-origin', 'field-srid', - 'field-license', 'field-categories'), + 'field-license', 'field-categories', 'field-overwrite'), RSS:new Array('field-source', 'field-default_name', 'field-origin', - 'field-srid', 'field-license', 'field-categories'), + 'field-srid', 'field-license', 'field-categories', + 'field-overwrite'), CSV:new Array('field-source', 'field-source_file', 'field-default_name', 'field-origin', 'field-srid', 'field-license', - 'field-categories') + 'field-categories', 'field-overwrite') } var map_initialized; function refresh_importer_form(){ diff --git a/chimere/templates/admin/chimere/marker/change_form.html b/chimere/templates/admin/chimere/marker/change_form.html new file mode 100644 index 0000000..64c48f9 --- /dev/null +++ b/chimere/templates/admin/chimere/marker/change_form.html @@ -0,0 +1,13 @@ +{% extends "admin/change_form.html" %} +{% load i18n %} +{% block field_sets %} +{% if original.ref_item and original.ref_item != orginal %} +<p class='errornote'> +{% url admin:admin-modification object_id as rapprochement_form %} +{% blocktrans %} +This item has a reference item associated to it. You should treat it via the <a href='{{ rapprochement_form }}'>rapprochement form</a>. +{% endblocktrans %} +</p> +{% endif %} +{{ block.super }} +{% endblock %} diff --git a/chimere/templates/admin/chimere/route/change_form.html b/chimere/templates/admin/chimere/route/change_form.html new file mode 120000 index 0000000..21811b6 --- /dev/null +++ b/chimere/templates/admin/chimere/route/change_form.html @@ -0,0 +1 @@ +../marker/change_form.html
\ No newline at end of file diff --git a/chimere/tests.py b/chimere/tests.py index 790eb55..af342c5 100644 --- a/chimere/tests.py +++ b/chimere/tests.py @@ -63,7 +63,21 @@ def subcategory_setup(): icon=icon, order=1, item_type='M',) - return [subcategory_1, subcategory_2] + + subcategory_3 = SubCategory.objects.create(category=category, + name='Subcategory 3', + available=True, + icon=icon, + order=1, + item_type='M',) + + subcategory_4 = SubCategory.objects.create(category=category, + name='Subcategory 4', + available=True, + icon=icon, + order=1, + item_type='M',) + return [subcategory_1, subcategory_2, subcategory_3, subcategory_4] def marker_setup(sub_categories=[]): if not sub_categories: @@ -124,50 +138,73 @@ class ImporterTest: nb = max([Marker.objects.filter(categories__pk=cat.pk).count(), Route.objects.filter(categories__pk=cat.pk).count()]) self.assertEqual(nb_by_cat[cat], nb) - # update for importer, awaited_nb in self.marker_importers: + importer.overwrite = True + importer.save() nb, nb_updated, res = importer.manager.get() if awaited_nb == None: continue self.assertEqual(nb, 0) + # manage overwrite + for importer, awaited_nb in self.marker_importers: + if not awaited_nb: + continue + # mimic the modification of one item + for cls in (Marker, Route): + items = cls.objects.filter( + categories=importer.categories.all()[0] + ).order_by('-pk').all() + if items.count(): + item = items.all()[0] + item.import_version = 99999 # fake version number + item.save() + # as when the import_version it is considered as an import + # modification force the modification flag + item.modified_since_import = True + item.save() + importer.overwrite = False + importer.save() + nb, nb_updated, res = importer.manager.get() + if awaited_nb == None: + continue + self.assertEqual(nb, 1) class KMLImporterTest(TestCase, ImporterTest): def setUp(self): - subcategory_1, subcategory_2 = subcategory_setup() + subcategories = subcategory_setup() importer1 = Importer.objects.create(importer_type='KML', source=test_dir_path+'tests/sample.kml', filtr="Category 1") - importer1.categories.add(subcategory_1) + importer1.categories.add(subcategories[0]) importer2 = Importer.objects.create(importer_type='KML', source=test_dir_path+'tests/sample.kml', filtr="Subcategory 1", associate_marker_to_way=True) - importer2.categories.add(subcategory_1) - importer2.categories.add(subcategory_2) + importer2.categories.add(subcategories[1]) importer3 = Importer.objects.create(importer_type='KML', source=test_path+'tests/sample.kml', filtr="Subcategory 3") - importer3.categories.add(subcategory_2) + importer3.categories.add(subcategories[2]) importer4 = Importer.objects.create(importer_type='KML', source=test_dir_path+'tests/sample.kml.zip', zipped=True) - importer4.categories.add(subcategory_1) + importer4.categories.add(subcategories[3]) self.marker_importers = [(importer1, 1), (importer2, 3), (importer3, 0), (importer4, 4)] class ShapefileImporterTest(TestCase, ImporterTest): def setUp(self): - self.subcategory_1, self.subcategory_2 = subcategory_setup() + self.subcategories = subcategory_setup() importer = Importer.objects.create(importer_type='SHP', source=test_dir_path+'tests/sample_nodes.shp.zip', zipped=True) - importer.categories.add(self.subcategory_1) + importer.categories.add(self.subcategories[0]) importer2 = Importer.objects.create(importer_type='SHP', source=test_dir_path+'tests/sample_ways.shp.zip', zipped=True) - importer2.categories.add(self.subcategory_2) + importer2.categories.add(self.subcategories[1]) self.marker_importers = [(importer, 29), (importer2, 5),] @@ -182,28 +219,30 @@ class ShapefileImporterTest(TestCase, ImporterTest): 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() + nb = Marker.objects.filter(categories__pk=self.subcategories[1].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() + Marker.objects.filter(categories__pk=self.subcategories[1].pk).delete() + Route.objects.filter(categories__pk=self.subcategories[1].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() + nb = Marker.objects.filter(categories__pk=self.subcategories[1].pk + ).count() self.assertEqual(nb, 0) class OSMImporterTest(TestCase, ImporterTest): def setUp(self): - subcategory_1, subcategory_2 = subcategory_setup() + subcategories = subcategory_setup() markers = marker_setup() importer1 = Importer.objects.create(importer_type='OSM', source=test_dir_path+'tests/sample_nodes.osm') - importer1.categories.add(subcategory_1) + importer1.categories.add(subcategories[0]) importer2 = Importer.objects.create(importer_type='OSM', source=test_dir_path+'tests/sample_ways.osm') - importer2.categories.add(subcategory_2) + importer2.categories.add(subcategories[1]) importer3 = Importer.objects.create(importer_type='OSM', source='http://open.mapquestapi.com/xapi/api/0.6/way'\ '[highway=motorway]'\ @@ -215,13 +254,13 @@ class OSMImporterTest(TestCase, ImporterTest): class GeoRSSImporterTest(TestCase, ImporterTest): def setUp(self): - subcategory_1, subcategory_2 = subcategory_setup() + subcategories = subcategory_setup() importer1 = Importer.objects.create(importer_type='RSS', source=test_dir_path+'tests/georss_simple.xml') - importer1.categories.add(subcategory_1) + importer1.categories.add(subcategories[0]) importer2 = Importer.objects.create(importer_type='RSS', source=test_dir_path+'tests/eqs7day-M5.xml') - importer2.categories.add(subcategory_2) + importer2.categories.add(subcategories[1]) self.marker_importers = [(importer1, 1), (importer2, 32)] @@ -405,6 +444,28 @@ class RapprochementTest(TestCase): for k in new_vals: self.assertEqual(getattr(ref_marker, k), new_vals[k]) + def test_managed_modified_imported_markers(self): + ref_marker = self.markers[0] + new_vals = {'name':"Marker 1 - modified", + 'point':GEOSGeometry('SRID=4326;POINT(-4 48)')} + values = {'status':'I', 'ref_item':ref_marker, 'import_version':42} + values.update(new_vals) + modified_marker = Marker.objects.create(**values) + self.assertNotEqual(ref_marker.import_version, + modified_marker.import_version) + modified_marker.categories.add(ref_marker.categories.all()[0]) + response = self.client.post('/admin/chimere/marker/', + data={'action':['managed_modified'], + 'index':0, 'rapprochement':1, + 'name':1, 'point':1, + '_selected_action':[unicode(ref_marker.pk)] + }) + ref_marker = Marker.objects.get(pk=ref_marker.pk) + self.assertEqual(Marker.objects.filter(ref_item=ref_marker, + status='I').count(), 0) + for k in new_vals.keys() + ['import_version']: + self.assertEqual(getattr(ref_marker, k), values[k]) + def test_managed_modified_routes(self): ref_route = self.routes[0] new_vals = {'name':"Route 1 - modified", diff --git a/chimere/utils.py b/chimere/utils.py index 4a12e37..0d97757 100644 --- a/chimere/utils.py +++ b/chimere/utils.py @@ -83,23 +83,28 @@ class ImportManager: try: item = None if pk: - try: - item = cls.objects.get(pk=pk) - except: - pass - if not item: - item = cls.objects.get(**dct_import) - if version and item.import_version == int(version): + ref_item = cls.objects.get(pk=pk) + else: + ref_item = cls.objects.get(**dct_import) + if version and ref_item.import_version == int(version): # no update since the last import - return item, None, None - for k in values: - setattr(item, k, values[k]) - try: - item.save() - except TypeError: - # error on data source - return None, False, False - updated = True + return ref_item, None, None + if not self.importer_instance.overwrite \ + and ref_item.modified_since_import: + dct_import['ref_item'] = ref_item + else: + item = ref_item + for k in values: + setattr(item, k, values[k]) + try: + item.save() + # force the modified_since_import status + item.modified_since_import = False + item.save() + except TypeError: + # error on data source + return None, False, False + updated = True except ObjectDoesNotExist: pass if not item: |