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()
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, } )
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()
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'))
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') )