def setup_upload(self, dbkey=None): """Create an upload with associated inputs. :param integer dbkey: if set use the upload record with given db key. :returns: a :py:class:`geonode.mtapi.models.Upload` instance """ if dbkey: [upload] = Upload.objects.filter(id=dbkey) return upload files = [ ("gmpe_logic_tree.xml", "lt_gmpe"), ("small_exposure.xml", "exposure"), ("source_model1.xml", "source"), ("source_model2.xml", "source"), ("source_model_logic_tree.xml", "lt_source"), ("vulnerability.xml", "vulnerability")] upload = view_utils.prepare_upload() for file, type in files: path = os.path.join(upload.path, file) # This is equivalent to what the touch command does. open(path, "w+").close() input = Input(path=path, owner=upload.owner, input_type=type, upload=upload) input.save() return upload
def setup_upload(self, dbkey=None): """Create an upload with associated inputs. :param integer dbkey: if set use the upload record with given db key. :returns: a :py:class:`geonode.mtapi.models.Upload` instance """ if dbkey: [upload] = Upload.objects.filter(id=dbkey) return upload files = [("gmpe_logic_tree.xml", "lt_gmpe"), ("small_exposure.xml", "exposure"), ("source_model1.xml", "source"), ("source_model2.xml", "source"), ("source_model_logic_tree.xml", "lt_source"), ("vulnerability.xml", "vulnerability")] upload = view_utils.prepare_upload() for file, type in files: path = os.path.join(upload.path, file) # This is equivalent to what the touch command does. open(path, "w+").close() input = Input(path=path, owner=upload.owner, input_type=type, upload=upload) input.save() return upload
def test_prepare_upload(self): """ `prepare_upload` returns a :py:class:`geonode.mtapi.models.Upload` instance. The latter's `path` must be a file system directory and have `0777` permissions. """ upload = prepare_upload() self.assertTrue(isinstance(upload, Upload)) info = os.stat(upload.path) self.assertTrue(stat.S_ISDIR(info.st_mode)) self.assertEqual('0777', oct(stat.S_IMODE(info.st_mode)))
def input_upload(request): """This handles a collection of input files uploaded by the GUI user. The request must be a HTTP POST. :param request: the :py:class:`django.http.HttpRequest` object :returns: a :py:class:`django.http.HttpResponse` object with status code `200` after starting an external NRML loader program that will process the uploaded source model files. :raises Http404: if the request is not a HTTP POST request. """ print("request.FILES: %s\n" % pprint.pformat(request.FILES)) if request.method == "POST": upload = view_utils.prepare_upload() for uploaded_file in request.FILES.getlist('input_files'): handle_uploaded_file(upload, uploaded_file) load_source_files(upload) return HttpResponse(prepare_upload_result(upload, status="success"), mimetype="text/html") else: raise Http404