diff --git a/www/maposmatic/apis.py b/www/maposmatic/apis.py index 67531f78..26349b04 100644 --- a/www/maposmatic/apis.py +++ b/www/maposmatic/apis.py @@ -242,82 +242,90 @@ def _jobs_post(request): except LookupError as e: result['error']['paper_size'] = str(e) + import_files = [] + import_urls = [] + + if 'import_urls' in input: + for import_url in input['import_urls']: + import_urls.append(import_url) + if 'track_url' in input: - try: - request.FILES['track'] = _get_remote_file(input['track_url']) - except Exception as e: - result['error']['track_url'] = "Can't fetch track_url: %s" % e - - if 'track' in request.FILES: - try: - gpxxml = request.FILES['track'].read().decode('utf-8-sig') - gpx = gpxpy.parse(gpxxml) - - if _no_geometry(job): - (min_lat, max_lat, min_lon, max_lon) = gpx.get_bounds() - d_lat = (max_lat - min_lat) * 0.05 - d_lon = (max_lon - min_lon) * 0.05 - job.lat_bottom_right = min_lat - d_lat - job.lat_upper_left = max_lat + d_lat - job.lon_bottom_right = min_lon - d_lon - job.lon_upper_left = max_lon + d_lon - - if not job.maptitle and gpx.name: - job.maptitle = gpx.name - - if 'track' in request.FILES: - job.track.save(request.FILES['track'].name, request.FILES['track'], save=False) - - except Exception as e: - result['error']['track'] = 'Cannot parse GPX track: %s' % e - - # TODO: move file type specific code to separate sub-functions - # TODO: error handling probably needs to become a bit better than just - # one catch-all exception handler at the very end + import_urls.append(input['track_url']) if 'umap_url' in input: - # TODO: if not a /geojson url -> try to parse the map id number - # and construct actual /geojson url from that - try: - request.FILES['umap'] = _get_remote_file(input['umap_url']) - except Exception as e: - result['error']['umap_url'] = "Can't fetch umap_url: %s" % e + import_urls.append(input['umap_url']) - if 'umap' in request.FILES: - _process_umap_file(job, input, request.FILES['umap']) + for import_url in import_urls: + try: + import_file = _get_remote_file(import_url) + import_files.append(import_file) + except Exception as e: + result['error']['import_url'] = "Can't fetch import_url: %s" % e - if 'poi_file' in request.FILES: - try: - poijson = request.FILES['poi_file'].read().decode('utf-8-sig') + for import_file in request.FILES: + import_files.append(request.FILES[import_file]) - poi = json.loads(poijson) + processed_files = [] - if not job.maptitle and poi['title']: - job.maptitle = poi['title'] + if len(import_files) > 0: + import_data = { + 'lat_bottom_right' : 90, + 'lat_upper_left' : -90, + 'lon_bottom_right' : 180, + 'lon_upper_left' : -180, + 'maptitles' : [], + 'layout' : False, + } - bounds = [180, -180, 90, -90] - for cat in poi['nodes']: - for node in cat['nodes']: - bounds[0] = min(float(node['lon']), bounds[0]) - bounds[1] = max(float(node['lon']), bounds[1]) - bounds[2] = min(float(node['lat']), bounds[2]) - bounds[3] = max(float(node['lat']), bounds[3]) + for import_file in import_files: + try: + import_file.open() + first_line = import_file.readline(100).decode('utf-8-sig') + if first_line.startswith('