예제 #1
0
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")
예제 #2
0
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")
예제 #3
0
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()
예제 #4
0
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()
예제 #5
0
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()
예제 #6
0
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()