From 3663e41cd3d87a709e5c8a365093c25a6569bbb4 Mon Sep 17 00:00:00 2001 From: PCoder Date: Wed, 28 Jul 2021 17:17:11 +0530 Subject: [PATCH] Add Uploadview and get_progress --- app/views.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/app/views.py b/app/views.py index c626cb6..7267074 100644 --- a/app/views.py +++ b/app/views.py @@ -153,6 +153,66 @@ class ConfigurationPageView(TemplateView): return HttpResponsePermanentRedirect(reverse('admin:index')) +class UploadView(TemplateView): + template_name = "app/admin/config.html" + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + return context + + def get(self, request): + messages.add_message(request, messages.ERROR, 'Please select a valid file') + return HttpResponsePermanentRedirect(reverse('app:config')) + + def post(self, request, **kwargs): + if 'datafile' in request.FILES: + fs = request.FILES['datafile'] + fs_name = secure_filename(fs.name) + fs_path = default_storage.save(fs_name, ContentFile(fs.read())) + print('Uploading: %s' % fs_path) + + # Validation + fmt = None + if fs_name.endswith('.csv'): + with open(fs_path, 'rt', encoding='utf-8', errors='ignore') as csvfile: + datareader = csv.DictReader(csvfile) + datalist = list(datareader) + fmt = detect_dataformat(datalist[0]) + + elif fs_name.endswith('.geojson'): + with open(fs_path, 'rt', encoding='utf-8', errors='ignore') as jsonfile: + jsondata = json.load(jsonfile) + fmt = detect_dataformat(jsondata['features'][0]['properties']) + + # Loading + if fmt is not None: + fs_target = get_datafile(fmt) + move(fs_path, fs_target) + messages.add_message(request, message="Uploaded new data file %s" % fmt['filename'], + level=messages.SUCCESS) + else: + messages.add_message(request, message="Could not validate data format!", level=messages.ERROR) + else: + messages.add_message(request, message="Please select a valid file", level=messages.ERROR) + return HttpResponsePermanentRedirect(reverse('config')) + + +def get_progress(request): + global c_progress + global c_filename + + def generate(): + while 1: + p = str(100*c_progress) + yield 'data: { "p":'+p+',"f":"'+c_filename+'"}\n\n' + time.sleep(1.0) + if c_filename == "": + return HttpResponse("{}", content_type='text/event-stream') + response = HttpResponse(generate(), content_type='text/event-stream') + response['X-Accel-Buffering'] = 'no' + return response + + def send_from_file(request, filename): request_for = '' if request.path.startswith('/geodata'):