diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-11-24 02:09:54 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-11-24 02:09:54 +0100 |
commit | 9edddaf1cce657e97f3550565e446d9a91e69fce (patch) | |
tree | 53bd093c4245b221f8d4d7f578f6a021cdec3e38 | |
parent | 1b30395108ad1d9dd42e286ca04e534fa928e679 (diff) | |
download | Chimère-9edddaf1cce657e97f3550565e446d9a91e69fce.tar.bz2 Chimère-9edddaf1cce657e97f3550565e446d9a91e69fce.zip |
Fix rapprochement - work on OSM export interface
-rw-r--r-- | chimere/admin.py | 43 | ||||
-rw-r--r-- | chimere/forms.py | 4 | ||||
-rw-r--r-- | chimere/models.py | 2 | ||||
-rw-r--r-- | chimere/tasks.py | 4 | ||||
-rw-r--r-- | chimere/templates/admin/osm_export.html | 3 | ||||
-rw-r--r-- | chimere/utils.py | 20 |
6 files changed, 51 insertions, 25 deletions
diff --git a/chimere/admin.py b/chimere/admin.py index 8fe2b77..931dcf1 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -114,11 +114,11 @@ def managed_modified(modeladmin, request, queryset): if hasattr(item, 'associated_marker'): couple.append((item.associated_marker.all()[0], item_ref.associated_marker.all()[0])) - updated_keys = request.POST - updated_keys.pop('action') - updated_keys.pop('rapprochement') - updated_keys.pop('index') - updated_keys.pop('_selected_action') + updated_keys = dict(request.POST) + # clean + for k in ('action', 'rapprochement', 'index', '_selected_action'): + if k in updated_keys: + updated_keys.pop(k) for idx, cpl in enumerate(couple): it, it_ref = cpl # don't copy geometry of associated items @@ -320,15 +320,30 @@ def export_to_osm(modeladmin, request, queryset): if importer.importer_type != 'OSM': messages.error(request, _(u"Only OSM importer are managed for export.")) return HttpResponseRedirect(request.get_full_path()) - #for importer in queryset: - # importer.state = unicode(tasks.IMPORT_MESSAGES['export_pending'][0]) - # importer.save() - # tasks.exporting(importer.pk) - form = OSMForm() - item_nb = Marker.objects.filter(categories__in=importer.categories.all(), - not_for_osm=False).count() - msg_item = _(u"%s point(s) of interest concerned by this export") % item_nb - return render_to_response('admin/osm_export.html', {'importer':importer, + item_nb = Marker.objects.filter(status='A', + categories=importer.categories.all(), + not_for_osm=False, modified_since_import=True, + route=None).count() + if not item_nb: + messages.error(request, _(u"No point of interest are concerned by this " + u"export.")) + return HttpResponseRedirect(request.get_full_path()) + form = None + if request.method == 'POST' and ( + 'email' in request.POST or 'api' in request.POST + or 'password' in request.POST): + form = OSMForm(request.POST) + if form.is_valid(): + importer.state = unicode(tasks.IMPORT_MESSAGES['export_pending'][0]) + importer.save() + tasks.exporting(importer.pk, form.cleaned_data) + messages.success(request, _(u"Export launched.")) + return HttpResponseRedirect(request.get_full_path()) + else: + form = OSMForm() + msg_item = _(u"%s point(s) of interest concerned by this export before "\ + u"bounding box filter.") % item_nb + return render_to_response('admin/osm_export.html', {'item':importer, 'form':form, 'msg_item':msg_item}, context_instance=RequestContext(request)) export_to_osm.short_description = _(u"Export to osm") diff --git a/chimere/forms.py b/chimere/forms.py index 597975d..d02d6ea 100644 --- a/chimere/forms.py +++ b/chimere/forms.py @@ -93,11 +93,11 @@ class OSMForm(forms.Form): """ OSM export form """ - email = forms.EmailField(label=_("OSM user")) + username = forms.EmailField(label=_("OSM user")) password = forms.CharField(label=_(u"Password"), widget=forms.PasswordInput(render_value=False)) # API URL are hardcoded: the day the API change Chimère will need - # adaptations + # adaptations not only on this portion... api = forms.ChoiceField(label=_(u"API"), choices=(('', '--'), ('api06.dev.openstreetmap.org', diff --git a/chimere/models.py b/chimere/models.py index 065f7e9..03b5dce 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -294,7 +294,7 @@ class GeographicItem(models.Model): import_source = models.CharField(_(u"Source"), max_length=200, blank=True, null=True) modified_since_import = models.BooleanField(_(u"Modified since last import"), - default=False) + default=True) not_for_osm = models.BooleanField(_(u"Not to be imported inside OSM"), default=False) origin = models.CharField(_(u"Origin"), max_length=100, diff --git a/chimere/tasks.py b/chimere/tasks.py index 53c0e5b..a74dce8 100644 --- a/chimere/tasks.py +++ b/chimere/tasks.py @@ -98,7 +98,7 @@ def importing(importer_pk): @task() @single_instance_task(60*10) -def exporting(importer_pk): +def exporting(importer_pk, extra_args=[]): try: importer = Importer.objects.get(pk=importer_pk) except ObjectDoesNotExist: @@ -111,7 +111,7 @@ def exporting(importer_pk): importer.save() error = None try: - updated_item, error = importer.manager.put() + updated_item, error = importer.manager.put(extra_args) except OsmApi.ApiError, error: pass if error: diff --git a/chimere/templates/admin/osm_export.html b/chimere/templates/admin/osm_export.html index 42ea0f7..dab123e 100644 --- a/chimere/templates/admin/osm_export.html +++ b/chimere/templates/admin/osm_export.html @@ -18,10 +18,11 @@ </table> </fieldset> <ul class='messagelist'> + <li>{% trans "Only points of interest are managed by this export." %}</li> <li>{{msg_item}}</li> <li>{% trans "Before exporting to OSM an import is done to verify that no modification has been made. All pending imported item have to be validated before export." %}</li> </ul> -<p class='errornote'>{% blocktrans %}Ensure that all the data exported to OSM have an appropriate license. You can exclude some points of interest by checking the checkbox "Not to be imported in OSM" in the point of interest form. If you are not sure of what you are doing: DON'T EXPORT TO OSM!{% endblocktrans %}</p> +<p class='errornote'>{% blocktrans %}Ensure that all the data exported to OSM have an appropriate license. You can exclude some points of interest by checking the checkbox "Not to be imported in OSM" in the point of interest form. <strong>If you are not sure of what you are doing: DON'T EXPORT TO OSM</strong>!{% endblocktrans %}</p> <div class='submit-row'> <p class='deletelink-box'><a href="{% if item.point %}{% url admin:chimere_marker_changelist %}{%else%}{% url admin:chimere_route_changelist %}{%endif%}">{% trans "Back to list" %}</a></p> <input class='default' type='submit' value='{% trans "Export to OSM" %}'/> diff --git a/chimere/utils.py b/chimere/utils.py index ed41a04..25b5900 100644 --- a/chimere/utils.py +++ b/chimere/utils.py @@ -67,7 +67,7 @@ class ImportManager: def get(self): pass - def put(self): + def put(self, extra_args={}): pass def create_or_update_item(self, cls, values, import_key, version=None, @@ -721,7 +721,7 @@ class OSMManager(ImportManager): items.append(item) return (new_item, updated_item, msg) - def put(self): + def put(self, extra_args={}): # first of all: reimport in order to verify that no changes has been # made since the last import from models import Marker @@ -735,9 +735,19 @@ class OSMManager(ImportManager): return 0, _(u"There are items from a former import not yet " u"validated - validate them before exporting") # start import - api = OsmApi.OsmApi(api=settings.CHIMERE_OSM_API_URL, - username=settings.CHIMERE_OSM_USER, - password=settings.CHIMERE_OSM_PASSWORD) + api = settings.CHIMERE_OSM_API_URL + username = settings.CHIMERE_OSM_USER + password = settings.CHIMERE_OSM_PASSWORD + if extra_args: + try: + api = extra_args['api'] + username = extra_args['username'] + password = extra_args['password'] + except KeyError: + return 0, _(u"Bad params - programming error") + api = OsmApi.OsmApi(api=api, + username=username, + password=password) api.ChangesetCreate({u"comment": u"Import from Chimère %s" % \ get_version()}) hooks = RE_HOOK.findall(self.importer_instance.filtr) |