diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-11-16 20:04:52 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-11-18 11:59:02 +0100 |
commit | 7e380609a6e5b65f9526a291c32c9e0fbb635aa9 (patch) | |
tree | 037eb5c20dcbf9791d27603462f61db89881decb | |
parent | 1613a568856c02b481cd96e46c5bd294fbebe36e (diff) | |
download | Chimère-7e380609a6e5b65f9526a291c32c9e0fbb635aa9.tar.bz2 Chimère-7e380609a6e5b65f9526a291c32c9e0fbb635aa9.zip |
Add script to convert tiny url to the new format
-rw-r--r-- | chimere/migrations/0003_convert_tiny_urls.py | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/chimere/migrations/0003_convert_tiny_urls.py b/chimere/migrations/0003_convert_tiny_urls.py new file mode 100644 index 0000000..fb39210 --- /dev/null +++ b/chimere/migrations/0003_convert_tiny_urls.py @@ -0,0 +1,110 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations +import ogr +import osr + + +def convert_tiny_urls(apps, schema_editor): + TinyUrl = apps.get_model('chimere', 'TinyUrl') + in_ref = osr.SpatialReference() + in_ref.ImportFromEPSG(3857) + out_ref = osr.SpatialReference() + out_ref.ImportFromEPSG(settings.CHIMERE_EPSG_DISPLAY_PROJECTION) + transform = osr.CoordinateTransformation(in_ref, out_ref) + + for tiny_url in TinyUrl.objects.all(): + new_param = { + 'zoom': '', + 'lat': '', + 'lon': '', + 'checked_categories': '', + 'current_feature': '', + 'routing_speed': '', + 'routing_transport': '', + 'routing_start_lat': '', + 'routing_start_lon': '', + 'routing_end_lat': '', + 'routing_end_lon': '', + 'steps': '' + } + for parameter in tiny_url.parameters.split('&'): + items = parameter.split('=') + if len(items) != 2: + continue + param, value = items + if param in ('zoom', 'routing_speed', 'routing_transport', + 'routing_start_lat', 'routing_start_lon', + 'routing_end_lat', 'routing_end_lon'): + new_param[param] = value + elif param in ('lat', 'lon'): + x, y = 242500, 6230000 + if param == 'lat': + y = int(float(value)) + else: + x = int(float(value)) + point = ogr.Geometry(ogr.wkbPoint) + point.AddPoint(x, y) + point.Transform(transform) + if param == 'lat': + new_param[param] = point.GetY() + else: + new_param[param] = point.GetX() + elif param == 'checked_categories': + if '%2C' in value: + value = '-'.join(value.split('%2C')) + if '_' in value: + value = '-'.join(value.split('_')) + new_param[param] = value + elif param == 'current_feature': + if value: + new_param[param] = 'marker-' + value + elif param == 'routing_steps': + if not value: + continue + vals = value.split('%2C') + steps = [] + for idx in range(int(len(vals) / 2)): + steps.append("{}:{}".format(vals[2 * idx], + vals[2 * idx + 1])) + new_param['steps'] = ';'.join(steps) + + if not new_param['zoom'] or int(new_param['zoom']) < 12: + new_param['zoom'] = '12' + + new_param['coord'] = '' + if new_param['lon'] and new_param['lat']: + new_param['coord'] = '{lon}:{lat}'.format(**new_param) + new_param['routing_start'] = '' + if new_param['routing_start_lat'] and new_param['routing_start_lon']: + new_param['routing_start'] = \ + "{routing_start_lat}:{routing_start_lon}".format(**new_param) + new_param['routing_end'] = '' + if new_param['routing_end_lat'] and new_param['routing_end_lon']: + new_param['routing_end'] = \ + "{routing_end_lat}:{routing_end_lon}".format(**new_param) + + tiny_url.parameters = \ + "{zoom};{coord};"\ + ";{checked_categories};{current_feature}"\ + "{routing_speed};{routing_transport};"\ + "{routing_start};"\ + "{routing_end};"\ + "{steps}".format(**new_param) + if TinyUrl.objects.filter(parameters=tiny_url.parameters).count(): + tiny_url.delete() + else: + tiny_url.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('chimere', '0002_property_route'), + ] + + operations = [ + migrations.RunPython(convert_tiny_urls), + ] |