Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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
Ejemplo n.º 10
0
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