def post_new_import(posted_values, owner): """Handles POSTing of the form. Does no validation, we rely on Javascript for that (!).""" approvalobject = ApprovalObject.objects.create(name="vanuit importtool") approvalobject.approvalobjecttype.add( ApprovalObjectType.default_approval_type()) importscenario = ImportScenario.objects.create( owner=owner, name='-', approvalobject=approvalobject) importscenario.receive_input_fields(posted_values) importscenario.update_scenario_name() importscenario.save() answer = { 'successful': 'true', 'remarks': 'opgeslagen', 'id': importscenario.id } return HttpResponse(json.dumps(answer), mimetype="application/json")
def post_new_import(posted_values, owner): """Handles POSTing of the form. Does no validation, we rely on Javascript for that (!).""" approvalobject = ApprovalObject.objects.create( name="vanuit importtool") approvalobject.approvalobjecttype.add( ApprovalObjectType.default_approval_type()) importscenario = ImportScenario.objects.create( owner=owner, name='-', approvalobject=approvalobject) importscenario.receive_input_fields(posted_values) importscenario.update_scenario_name() importscenario.save() answer = { 'successful': 'true', 'remarks': 'opgeslagen', 'id': importscenario.id} return HttpResponse( json.dumps(answer), content_type="application/json")
def handle_imported_group_files(groupimport_id, user_id): """Handle the input from the uploaded files Called from a task. Results are a list of remarks, that are returned to the browser. """ groupimport = GroupImport.objects.get(pk=groupimport_id) user = User.objects.get(pk=user_id) remarks = [] remarks.append('inladen') method = 2 try: wb = xlrd.open_workbook(groupimport.table.path) sheet = wb.sheet_by_name('import scenarios') nr_rows = sheet.nrows #combine fields with ImportField field_dict = {} colnr = 1 for fieldname in sheet.row_slice(1, 1): try: # Use name__iexact so case doesn't have to # be exactly right inputfield = InputField.objects.get( name__iexact=fieldname.value) field_dict[colnr] = inputfield except InputField.DoesNotExist, e: remarks.append('veld ' + fieldname.value + ' komt niet voor in de database') colnr = colnr + 1 nr_cols_field = colnr zip_file = ZipFile(groupimport.results.path, "r") for rownr in range(4, nr_rows): row = sheet.row_slice(rownr) values_for_validation = {} if row[0].value != 'x': continue scenario_name = "geen" # eerst een import scenario maken approvalobject = ApprovalObject.objects.create( name=scenario_name) approvalobject.approvalobjecttype.add( ApprovalObjectType.default_approval_type()) importscenario = ImportScenario.objects.create( owner=user, name=scenario_name, approvalobject=approvalobject, groupimport=groupimport) # vervolgens de velden opslaan for col_nr in range(1, min(len(row), nr_cols_field)): field = row[col_nr] if (col_nr in field_dict and field.ctype != 'empty' and field.value != ''): importscenario_inputfield, new = ( ImportScenarioInputField.objects. get_or_create( importscenario=importscenario, inputfield=field_dict[col_nr])) try: value = field.value # Excel does bugged things with dates, # always use xl_date_as_tuple to correct them # Convert it to a string immediately if field.ctype == 'date': datetime_tuple = xlrd.xldate_as_tuple( field.value, wb.datemode) # Throw away time fields, it's not # a datetime it's a date date_only = datetime_tuple[:3] value = ( datetime.date(date_only).isoformat()) importscenario_inputfield.setValue(value) except ValueError as e: remarks.append( ("Value error. Rij %i, kolom " " '%s' van type %s. Waarde " "is: '%s'. error: %s") % ( rownr, field_dict[col_nr].name, field_dict[col_nr]. get_type_display(), str(field.value), e)) except TypeError as e: remarks.append( ("Type error. Rij %i, kolom" " '%s' van type %s. Waarde " "is: \'%s\'. error: %s") % ( rownr, field_dict[col_nr].name, field_dict[col_nr]. get_type_display(), str(field.value), e)) values_for_validation[field_dict[col_nr].name] = field.value if (field_dict[col_nr].type == InputField.TYPE_FILE): try: filevalue, new = ( FileValue.objects. get_or_create( importscenario_inputfield=importscenario_inputfield)) #create empty #file. replace it later #with zipfile filevalue.value.save( field.value.replace('\\', '/'). split('/')[-1] + '.zip', ContentFile("")) filevalue.save() filevalue.value.close() destination = (filevalue.value. file.name) save_uploadfile_in_zipfile_groupimport( zip_file, field.value, destination, field_dict[col_nr]. destination_filename) except KeyError, e: remarks.append( ("File '%s' niet gevonden in " "zipfile. Rij %i, kolom '%s'. ") % (str(field.value), rownr, field_dict[col_nr].name)) filevalue.delete() # Extra validation on the columns as a whole. modeller_software = values_for_validation.get("Modelleersoftware") if modeller_software: needed_3di = ["Bathymetrie (tif)", "3Di resultaat (nc)"] needed_other = ["Maximale waterdiepte (asc of zip)"] expecting_3di = ("3di" in modeller_software.lower()) extra_remarks = [] if expecting_3di: needed = needed_3di unwanted = needed_other else: needed = needed_other unwanted = needed_3di for field_name in needed: value = values_for_validation.get(field_name) if not value: extra_remarks.append( "Veld '%s' moet ingevuld zijn bij " "modelleersoftware '%s'." % (field_name, modeller_software)) for field_name in unwanted: value = values_for_validation.get(field_name) if value: extra_remarks.append( "Veld '%s' moet NIET ingevuld zijn bij " "modelleersoftware '%s'." % (field_name, modeller_software)) if extra_remarks: remarks += extra_remarks raise ValueError( "De juiste bestanden behorende bij de " "modelleringssoftware zijn niet gevonden.") importscenario.update_scenario_name() importscenario.save()
def post_group_import(request, form): """create a GroupImport object and fill it""" groupimport = GroupImport( name=form.cleaned_data['name'], table=None, results=None) groupimport.save() # got it only working with creating explicitly the # contentfile and saving it as 'file' table_file_content = ContentFile(request.FILES['table'].read()) groupimport.table.save( request.FILES['table'].name, table_file_content) result_file_content = ContentFile(request.FILES['results'].read()) groupimport.results.save( request.FILES['results'].name, result_file_content) groupimport.save() # Handle the input from the uploaded files remarks = [] remarks.append('inladen') method = 2 try: if method == 1: pass else: wb = xlrd.open_workbook(groupimport.table.path) sheet = wb.sheet_by_name('import scenarios') nr_rows = sheet.nrows #combine fields with ImportField field_dict = {} colnr = 1 for fieldname in sheet.row_slice(1, 1): try: # Use name__iexact so case doesn't have to # be exactly right inputfield = InputField.objects.get( name__iexact=fieldname.value) field_dict[colnr] = inputfield except InputField.DoesNotExist, e: remarks.append('veld ' + fieldname.value + ' komt niet voor in de database') colnr = colnr + 1 nr_cols_field = colnr zip_file = ZipFile(groupimport.results.path, "r") for rownr in range(4, nr_rows): row = sheet.row_slice(rownr) if row[0].value == 'x': scenario_name = "geen" # eerst een import scenario maken approvalobject = ApprovalObject.objects.create( name=scenario_name) approvalobject.approvalobjecttype.add( ApprovalObjectType.default_approval_type()) importscenario = ImportScenario.objects.create( owner=request.user, name=scenario_name, approvalobject=approvalobject, groupimport=groupimport) # vervolgens de velden opslaan for col_nr in range(1, min(len(row), nr_cols_field)): field = row[col_nr] if (col_nr in field_dict and field.ctype != 'empty' and field.value != ''): importscenario_inputfield, new = ( ImportScenarioInputField.objects. get_or_create( importscenario=importscenario, inputfield=field_dict[col_nr])) try: value = field.value # Excel does bugged things with dates, # always use xl_date_as_tuple to correct them # Convert it to a string immediately if field.ctype == 'date': datetime_tuple = xlrd.xldate_as_tuple( field.value, wb.datemode) # Throw away time fields, it's not # a datetime it's a date date_only = datetime_tuple[:3] value = ( datetime.date(date_only).isoformat()) importscenario_inputfield.setValue(value) except ValueError as e: remarks.append( ("Value error. Rij %i, kolom " " '%s' van type %s. Waarde " "is: '%s'. error: %s") % ( rownr, field_dict[col_nr].name, field_dict[col_nr]. get_type_display(), str(field.value), e)) except TypeError as e: remarks.append( ("Type error. Rij %i, kolom" " '%s' van type %s. Waarde " "is: \'%s\'. error: %s") % ( rownr, field_dict[col_nr].name, field_dict[col_nr]. get_type_display(), str(field.value), e)) if (field_dict[col_nr].type == InputField.TYPE_FILE): try: filevalue, new = ( FileValue.objects. get_or_create( importscenario_inputfield=importscenario_inputfield)) #create empty #file. replace it later #with zipfile filevalue.value.save( field.value.replace('\\', '/'). split('/')[-1] + '.zip', ContentFile("")) filevalue.save() filevalue.value.close() destination = (filevalue.value. file.name) save_uploadfile_in_zipfile_groupimport( zip_file, field.value, destination, field_dict[col_nr]. destination_filename) except KeyError, e: remarks.append( ("File '%s' niet gevonden in " "zipfile. Rij %i, kolom '%s'. ") % (str(field.value), rownr, field_dict[col_nr].name)) filevalue.delete() importscenario.update_scenario_name() importscenario.save()
def post_group_import(request, form): """create a GroupImport object and fill it""" groupimport = GroupImport(name=form.cleaned_data['name'], table=None, results=None) groupimport.save() # got it only working with creating explicitly the # contentfile and saving it as 'file' table_file_content = ContentFile(request.FILES['table'].read()) groupimport.table.save(request.FILES['table'].name, table_file_content) result_file_content = ContentFile(request.FILES['results'].read()) groupimport.results.save(request.FILES['results'].name, result_file_content) groupimport.save() # Handle the input from the uploaded files remarks = [] remarks.append('inladen') method = 2 try: if method == 1: pass else: wb = xlrd.open_workbook(groupimport.table.path) sheet = wb.sheet_by_name('import scenarios') nr_rows = sheet.nrows #combine fields with ImportField field_dict = {} colnr = 1 for fieldname in sheet.row_slice(1, 1): try: # Use name__iexact so case doesn't have to # be exactly right inputfield = InputField.objects.get( name__iexact=fieldname.value) field_dict[colnr] = inputfield except InputField.DoesNotExist, e: remarks.append('veld ' + fieldname.value + ' komt niet voor in de database') colnr = colnr + 1 nr_cols_field = colnr zip_file = ZipFile(groupimport.results.path, "r") for rownr in range(4, nr_rows): row = sheet.row_slice(rownr) if row[0].value == 'x': scenario_name = "geen" # eerst een import scenario maken approvalobject = ApprovalObject.objects.create( name=scenario_name) approvalobject.approvalobjecttype.add( ApprovalObjectType.default_approval_type()) importscenario = ImportScenario.objects.create( owner=request.user, name=scenario_name, approvalobject=approvalobject, groupimport=groupimport) # vervolgens de velden opslaan for col_nr in range(1, min(len(row), nr_cols_field)): field = row[col_nr] if (col_nr in field_dict and field.ctype != 'empty' and field.value != ''): importscenario_inputfield, new = ( ImportScenarioInputField.objects.get_or_create( importscenario=importscenario, inputfield=field_dict[col_nr])) try: value = field.value # Excel does bugged things with dates, # always use xl_date_as_tuple to correct them # Convert it to a string immediately if field.ctype == 'date': datetime_tuple = xlrd.xldate_as_tuple( field.value, wb.datemode) # Throw away time fields, it's not # a datetime it's a date date_only = datetime_tuple[:3] value = ( datetime.date(date_only).isoformat()) importscenario_inputfield.setValue(value) except ValueError as e: remarks.append( ("Value error. Rij %i, kolom " " '%s' van type %s. Waarde " "is: '%s'. error: %s") % (rownr, field_dict[col_nr].name, field_dict[col_nr].get_type_display(), str(field.value), e)) except TypeError as e: remarks.append( ("Type error. Rij %i, kolom" " '%s' van type %s. Waarde " "is: \'%s\'. error: %s") % (rownr, field_dict[col_nr].name, field_dict[col_nr].get_type_display(), str(field.value), e)) if (field_dict[col_nr].type == InputField.TYPE_FILE ): try: filevalue, new = ( FileValue.objects.get_or_create( importscenario_inputfield= importscenario_inputfield)) #create empty #file. replace it later #with zipfile filevalue.value.save( field.value.replace( '\\', '/').split('/')[-1] + '.zip', ContentFile("")) filevalue.save() filevalue.value.close() destination = (filevalue.value.file.name) save_uploadfile_in_zipfile_groupimport( zip_file, field.value, destination, field_dict[col_nr].destination_filename ) except KeyError, e: remarks.append( ("File '%s' niet gevonden in " "zipfile. Rij %i, kolom '%s'. ") % (str(field.value), rownr, field_dict[col_nr].name)) filevalue.delete() importscenario.update_scenario_name() importscenario.save()
def handle_imported_group_files(groupimport_id, user_id): """Handle the input from the uploaded files Called from a task. Results are a list of remarks, that are returned to the browser. """ groupimport = GroupImport.objects.get(pk=groupimport_id) user = User.objects.get(pk=user_id) remarks = [] remarks.append('inladen') method = 2 try: wb = xlrd.open_workbook(groupimport.table.path) sheet = wb.sheet_by_name('import scenarios') nr_rows = sheet.nrows #combine fields with ImportField field_dict = {} colnr = 1 for fieldname in sheet.row_slice(1, 1): try: # Use name__iexact so case doesn't have to # be exactly right inputfield = InputField.objects.get( name__iexact=fieldname.value) field_dict[colnr] = inputfield except InputField.DoesNotExist, e: remarks.append('veld ' + fieldname.value + ' komt niet voor in de database') colnr = colnr + 1 nr_cols_field = colnr zip_file = ZipFile(groupimport.results.path, "r") for rownr in range(4, nr_rows): row = sheet.row_slice(rownr) values_for_validation = {} if row[0].value != 'x': continue scenario_name = "geen" # eerst een import scenario maken approvalobject = ApprovalObject.objects.create(name=scenario_name) approvalobject.approvalobjecttype.add( ApprovalObjectType.default_approval_type()) importscenario = ImportScenario.objects.create( owner=user, name=scenario_name, approvalobject=approvalobject, groupimport=groupimport) # vervolgens de velden opslaan for col_nr in range(1, min(len(row), nr_cols_field)): field = row[col_nr] if (col_nr in field_dict and field.ctype != 'empty' and field.value != ''): importscenario_inputfield, new = ( ImportScenarioInputField.objects.get_or_create( importscenario=importscenario, inputfield=field_dict[col_nr])) try: value = field.value # Excel does bugged things with dates, # always use xl_date_as_tuple to correct them # Convert it to a string immediately if field.ctype == 'date': datetime_tuple = xlrd.xldate_as_tuple( field.value, wb.datemode) # Throw away time fields, it's not # a datetime it's a date date_only = datetime_tuple[:3] value = (datetime.date(date_only).isoformat()) importscenario_inputfield.setValue(value) except ValueError as e: remarks.append(("Value error. Rij %i, kolom " " '%s' van type %s. Waarde " "is: '%s'. error: %s") % (rownr, field_dict[col_nr].name, field_dict[col_nr].get_type_display(), str(field.value), e)) except TypeError as e: remarks.append(("Type error. Rij %i, kolom" " '%s' van type %s. Waarde " "is: \'%s\'. error: %s") % (rownr, field_dict[col_nr].name, field_dict[col_nr].get_type_display(), str(field.value), e)) values_for_validation[ field_dict[col_nr].name] = field.value if (field_dict[col_nr].type == InputField.TYPE_FILE): try: filevalue, new = (FileValue.objects.get_or_create( importscenario_inputfield= importscenario_inputfield)) #create empty #file. replace it later #with zipfile filevalue.value.save( field.value.replace('\\', '/').split('/')[-1] + '.zip', ContentFile("")) filevalue.save() filevalue.value.close() destination = (filevalue.value.file.name) save_uploadfile_in_zipfile_groupimport( zip_file, field.value, destination, field_dict[col_nr].destination_filename) except KeyError, e: remarks.append(("File '%s' niet gevonden in " "zipfile. Rij %i, kolom '%s'. ") % (str(field.value), rownr, field_dict[col_nr].name)) filevalue.delete() # Extra validation on the columns as a whole. modeller_software = values_for_validation.get("Modelleersoftware") if modeller_software: needed_3di = ["Bathymetrie (tif)", "3Di resultaat (nc)"] needed_other = ["Maximale waterdiepte (asc of zip)"] expecting_3di = ("3di" in modeller_software.lower()) extra_remarks = [] if expecting_3di: needed = needed_3di unwanted = needed_other else: needed = needed_other unwanted = needed_3di for field_name in needed: value = values_for_validation.get(field_name) if not value: extra_remarks.append( "Veld '%s' moet ingevuld zijn bij " "modelleersoftware '%s'." % (field_name, modeller_software)) for field_name in unwanted: value = values_for_validation.get(field_name) if value: extra_remarks.append( "Veld '%s' moet NIET ingevuld zijn bij " "modelleersoftware '%s'." % (field_name, modeller_software)) if extra_remarks: remarks += extra_remarks raise ValueError( "De juiste bestanden behorende bij de " "modelleringssoftware zijn niet gevonden.") importscenario.update_scenario_name() importscenario.save()