コード例 #1
0
ファイル: views.py プロジェクト: respec/urbanfootprint
def upload(request):
    """Handle upload POST calls from UF."""

    if request.method != 'POST':
        return HttpResponseNotAllowed('No GET allowed')

    api_key = request.GET.get('api_key')
    username = request.GET.get('username')
    config_entity_id = request.GET.get('config_entity__id')
    file_name = request.GET.get('file_name')
    progress_id = request.GET.get('X-Progress-ID')

    user = get_user_model().objects.get(api_key__key=api_key,
                                        username=username)
    config_entity = ConfigEntity.objects.filter(
        id=config_entity_id).get_subclass()

    upload_task = create_upload_task(
        user,
        file_name,
        config_entity,
        extra_data_dict={'X-Progress-ID': progress_id})

    upload_handler = UploadProgressTaskHandler(max_progress=40,
                                               upload_task=upload_task)
    request.upload_handlers.insert(0, upload_handler)

    if request.FILES['files[]'].size > settings.MAX_UPLOAD_SIZE:
        return HttpResponseBadRequest(
            "The maximum file size for uploads is {} but the file you selected is {}"
            .format(filesizeformat(settings.MAX_UPLOAD_SIZE),
                    filesizeformat(request.FILES['files[]'].size)))

    # send the inital progress of 0%
    upload_task.send_progress()

    with tempfile.NamedTemporaryFile(delete=False) as tmpfile:
        for chunk in request.FILES['files[]'].chunks():
            tmpfile.write(chunk)

    try:
        process_file(tmpfile.name,
                     should_create_db_entity=True,
                     user=user,
                     config_entity=config_entity,
                     upload_task=upload_task)
    except:
        upload_task.send_error()
        raise

    return HttpResponse()
コード例 #2
0
def upload_test(request):
    """
    Handle requests for the upload testing tool (/footprint/upload_test).
    This is a simple tool to upload a zipped geospatial file, convert,
    load the data into Postgres and renders a page to verify that we
    properly converted spatial and non-spatial data fields.
    """

    if request.method == 'POST':

        with tempfile.NamedTemporaryFile(delete=False) as tmpfile:
            for chunk in request.FILES['the_file'].chunks():
                tmpfile.write(chunk)

        # make sure the table_name is lower case so the column_names don't error out when querying
        table_name = process_file(tmpfile.name).lower()
        file_name = request.FILES['the_file']
        return HttpResponseRedirect('/footprint/upload_results?offset=0&table_name={}&file_name={}'.format(table_name, file_name))

    else:
        form = FileForm()

    return render(
        request,
        'upload_manager/simple_file_form.html',
        {
            'form': form,
        }
    )
コード例 #3
0
def upload(request):
    """Handle upload POST calls from UF."""

    if request.method != 'POST':
        return HttpResponseNotAllowed('No GET allowed')

    api_key = request.GET.get('api_key')
    username = request.GET.get('username')
    config_entity_id = request.GET.get('config_entity__id')
    file_name = request.GET.get('file_name')
    progress_id = request.GET.get('X-Progress-ID')

    user = get_user_model().objects.get(api_key__key=api_key, username=username)
    config_entity = ConfigEntity.objects.filter(id=config_entity_id).get_subclass()

    upload_task = create_upload_task(
        user,
        file_name,
        config_entity,
        extra_data_dict={'X-Progress-ID': progress_id}
    )

    upload_handler = UploadProgressTaskHandler(max_progress=40, upload_task=upload_task)
    request.upload_handlers.insert(0, upload_handler)

    if request.FILES['files[]'].size > settings.MAX_UPLOAD_SIZE:
        return HttpResponseBadRequest(
            "The maximum file size for uploads is {} but the file you selected is {}".format(
                filesizeformat(settings.MAX_UPLOAD_SIZE),
                filesizeformat(request.FILES['files[]'].size)
            )
        )

    # send the inital progress of 0%
    upload_task.send_progress()

    with tempfile.NamedTemporaryFile(delete=False) as tmpfile:
        for chunk in request.FILES['files[]'].chunks():
            tmpfile.write(chunk)

    try:
        process_file(tmpfile.name, should_create_db_entity=True, user=user, config_entity=config_entity, upload_task=upload_task)
    except:
        upload_task.send_error()
        raise

    return HttpResponse()
コード例 #4
0
    return schema


if __name__ == "__main__":
    """
    A simple CLI interaction for rapid functional testing. Should be used like:

        $ DJANGO_SETTINGS_MODULE=footprint.settings_dev python footprint/upload_manager/geo.py dpss_offices.zip

    to simply load data into Postgres, or:

        $ DJANGO_SETTINGS_MODULE=footprint.settings_dev python footprint/upload_manager/geo.py dpss_offices.zip 1

    to create DbEntity objects.

    """
    # TODO: once this functionality stabilizes, either remove CLI
    # functionality or move it to a proper management command

    import sys
    from django.contrib.auth import get_user_model
    from footprint.upload_manager.geo import process_file
    from footprint.main.models.config.config_entity import ConfigEntity

    process_file(
        sys.argv[1],
        user=get_user_model().objects.get(email='*****@*****.**'),
        should_create_db_entity=len(sys.argv) > 2,
        config_entity=ConfigEntity.objects.get(key='nhm'))
コード例 #5
0
    return schema


if __name__ == "__main__":
    """
    A simple CLI interaction for rapid functional testing. Should be used like:

        $ DJANGO_SETTINGS_MODULE=footprint.settings_dev python footprint/upload_manager/geo.py dpss_offices.zip

    to simply load data into Postgres, or:

        $ DJANGO_SETTINGS_MODULE=footprint.settings_dev python footprint/upload_manager/geo.py dpss_offices.zip 1

    to create DbEntity objects.

    """
    # TODO: once this functionality stabilizes, either remove CLI
    # functionality or move it to a proper management command

    import sys
    from django.contrib.auth import get_user_model
    from footprint.upload_manager.geo import process_file
    from footprint.main.models.config.config_entity import ConfigEntity

    process_file(
        sys.argv[1],
        user=get_user_model().objects.get(email='*****@*****.**'),
        should_create_db_entity=len(sys.argv) > 2,
        config_entity=ConfigEntity.objects.get(key='nhm')
    )