def generate_osm_export(export_type, username, id_string, export_id=None, options=None, xform=None): """ Generates osm export for OpenStreetMap data param: export_type params: username: logged in username params: id_string: xform id_string params: export_id: ID of export object associated with the request param: options: additional parameters required for the lookup. ext: File extension of the generated export """ extension = options.get("extension", export_type) if xform is None: xform = XForm.objects.get(user__username=username, id_string=id_string) osm_list = OsmData.objects.filter(instance__xform=xform, instance__deleted_at__isnull=True) content = get_combined_osm(osm_list) basename = "%s_%s" % (id_string, datetime.now().strftime("%Y_%m_%d_%H_%M_%S")) filename = basename + "." + extension file_path = os.path.join( username, 'exports', id_string, export_type, filename) storage = get_storage_class()() temp_file = NamedTemporaryFile(suffix=extension) temp_file.write(content) temp_file.seek(0) export_filename = storage.save( file_path, File(temp_file, file_path)) temp_file.close() dir_name, basename = os.path.split(export_filename) # get or create export object if export_id and Export.objects.filter(pk=export_id).exists(): export = Export.objects.get(id=export_id) else: export_options = get_export_options(options) export = Export.objects.create(xform=xform, export_type=export_type, options=export_options) export.filedir = dir_name export.filename = basename export.internal_status = Export.SUCCESSFUL export.save() return export
def test_get_combined_osm(self): filenames = ['osm1.osm', 'osm2.osm'] files = [ open(os.path.join(os.path.dirname(__file__), "fixtures", filename)) for filename in filenames] path = os.path.join(os.path.dirname(__file__), "fixtures", "combined.osm") with open(path) as f: osm = f.read() self.assertEqual(get_combined_osm(files), osm)
def render(self, data, media_type=None, renderer_context=None): """Combine/concatenate the list of osm files to one file""" def _list(list_or_item): if isinstance(list_or_item, list): return list_or_item return [list_or_item] data = [item for item_or_list in data for item in _list(item_or_list)] return get_combined_osm(data)
def render(self, data, accepted_media_type=None, renderer_context=None): # Process error before making a list if isinstance(data, dict): if 'detail' in data: return u'<error>' + data['detail'] + '</error>' # Combine/concatenate the list of osm files to one file def _list(list_or_item): if isinstance(list_or_item, list): return list_or_item return [list_or_item] data = [item for item_or_list in data for item in _list(item_or_list)] return get_combined_osm(data)
def generate_osm_export( export_type, extension, username, id_string, export_id=None, filter_query=None): # TODO resolve circular import from onadata.apps.viewer.models.export import Export xform = XForm.objects.get(user__username=username, id_string=id_string) attachments = Attachment.objects.filter( extension=Attachment.OSM, instance__xform=xform ) content = get_combined_osm([a.media_file for a in attachments]) basename = "%s_%s" % (id_string, datetime.now().strftime("%Y_%m_%d_%H_%M_%S")) filename = basename + "." + extension file_path = os.path.join( username, 'exports', id_string, export_type, filename) storage = get_storage_class()() temp_file = NamedTemporaryFile(suffix=extension) temp_file.write(content) temp_file.seek(0) export_filename = storage.save( file_path, File(temp_file, file_path)) temp_file.close() dir_name, basename = os.path.split(export_filename) # get or create export object if(export_id): export = Export.objects.get(id=export_id) else: export = Export.objects.create(xform=xform, export_type=export_type) export.filedir = dir_name export.filename = basename export.internal_status = Export.SUCCESSFUL export.save() return export
def generate_osm_export(export_type, username, id_string, export_id=None, options=None, xform=None): """ Generates osm export for OpenStreetMap data :param export_type: type of export :param username: logged in username :param id_string: xform id_string :param export_id: ID of export object associated with the request :param options: additional parameters required for the lookup. :param ext: File extension of the generated export """ extension = options.get("extension", export_type) if xform is None: xform = XForm.objects.get(user__username=username, id_string=id_string) kwargs = get_osm_data_kwargs(xform) osm_list = OsmData.objects.filter(**kwargs) content = get_combined_osm(osm_list) basename = "%s_%s" % (id_string, datetime.now().strftime("%Y_%m_%d_%H_%M_%S")) filename = basename + "." + extension file_path = os.path.join(username, 'exports', id_string, export_type, filename) export_filename = write_temp_file_to_path(extension, content, file_path) export = get_or_create_export_object(export_id, options, xform, export_type) dir_name, basename = os.path.split(export_filename) export.filedir = dir_name export.filename = basename export.internal_status = Export.SUCCESSFUL export.save() return export
def generate_osm_export(export_type, username, id_string, export_id=None, options=None, xform=None): """ Generates osm export for OpenStreetMap data :param export_type: type of export :param username: logged in username :param id_string: xform id_string :param export_id: ID of export object associated with the request :param options: additional parameters required for the lookup. :param ext: File extension of the generated export """ extension = options.get("extension", export_type) if xform is None: xform = XForm.objects.get(user__username=username, id_string=id_string) kwargs = get_osm_data_kwargs(xform) osm_list = OsmData.objects.filter(**kwargs) content = get_combined_osm(osm_list) basename = "%s_%s" % (id_string, datetime.now().strftime("%Y_%m_%d_%H_%M_%S")) filename = basename + "." + extension file_path = os.path.join( username, 'exports', id_string, export_type, filename) export_filename = write_temp_file_to_path(extension, content, file_path) export = get_or_create_export_object( export_id, options, xform, export_type) dir_name, basename = os.path.split(export_filename) export.filedir = dir_name export.filename = basename export.internal_status = Export.SUCCESSFUL export.save() return export
def generate_osm_export(export_type, extension, username, id_string, export_id=None, filter_query=None): # TODO resolve circular import from onadata.apps.viewer.models.export import Export xform = XForm.objects.get(user__username=username, id_string=id_string) attachments = Attachment.objects.filter(extension=Attachment.OSM, instance__xform=xform) content = get_combined_osm([a.media_file for a in attachments]) basename = "%s_%s" % (id_string, datetime.now().strftime("%Y_%m_%d_%H_%M_%S")) filename = basename + "." + extension file_path = os.path.join(username, 'exports', id_string, export_type, filename) storage = get_storage_class()() temp_file = NamedTemporaryFile(suffix=extension) temp_file.write(content) temp_file.seek(0) export_filename = storage.save(file_path, File(temp_file, file_path)) temp_file.close() dir_name, basename = os.path.split(export_filename) # get or create export object if (export_id): export = Export.objects.get(id=export_id) else: export = Export.objects.create(xform=xform, export_type=export_type) export.filedir = dir_name export.filename = basename export.internal_status = Export.SUCCESSFUL export.save() return export