Пример #1
0
def main():
    """Change mdu file to new version >=2.0 MDU File Format"""
    arguments = parse_args()

    # Read mdu file

    commentedmdu = MduParserKeepComments()
    commentedmdu.readfp(open(arguments.mdu))

    # Check current version:
    try:
        inputversion = commentedmdu.get("model", "FileFormatVersion")
    except ConfigParser.NoOptionError:
        inputversion = "0.0"

    match = re.match(r"""\d+""", inputversion)
    if match is not None:
        inputmajorv = int(match.group())
    else:
        inputmajorv = 0

    outputversion = "2.2"
    outputmajorv = int(float(outputversion))

    if inputmajorv >= outputmajorv:
        logger.info("Input file %s is already recent enough: " +
                    "major version %s >= %s. Exiting.",
                    arguments.mdu, inputmajorv, outputmajorv)
        return

    # Input file is indeed old, now proceed with the actual conversion.
    logger.info("Converting {} -> {}...".format(inputversion, outputversion))

    commentedmdu.set("model", "FileFormatVersion", outputversion)

    # Define the renamings
    changes = collections.OrderedDict([
        (("geometry", "ManholeFile"),
         ("external forcing", "ManholeFile")),
        (("geometry", "FloodIniFile"),
         ("initialization", "FloodIniFile")),
        (("initialization", "WaterLevelFile"),
         ("initialization", "WaterLevelIniFile")),
        (("initialization", "FloodWaterLevel"),
         ("defaults", "FloodWaterLevel")),
        (("initialization", "FloodLevelAbsolute"),
         ("defaults", "FloodLevelAbsolute")),
        (("initialization", "BathymetryIncrement"),
         ("defaults", "BathymetryIncrement")),
        (("initialization", "BathIncAbsolute"),
         ("defaults", "BathIncAbsolute")),
        (("initialization", "InfiltrationRateNew"),
         ("defaults", "InfiltrationRateNew")),
        (("initialization", "Rainfall"),
         ("defaults", "RainfallCloudAmount")),
        (("initialization", "RainfallCloudDiameter"),
         ("defaults", "RainfallCloudDiameter")),
        (("Ground Water", ""),
         ("hydrology", "")),
        (("hydrology", "GroundwaterLevelFile"),
         ("hydrology", "GroundWaterLevelIniFile")),
        (("hydrology", "permeability_x"),
         ("hydrology", "HydraulicConductivity_X")),
        (("hydrology", "permeability_y"),
         ("hydrology", "HydraulicConductivity_Y")),
        (("hydrology", "GroundwaterLevelFile"),
         ("hydrology", "GroundWaterLevelIniFile")),
        (("output", "LogOut"),
         ("display", "RedrawEvery")),
        (("output", "SaveHardCopy"),
         ("display", "SaveHardCopy")),
        (("output", "showGrid"),
         ("display", "showGrid")),
        (("output", "showLinks"),
         ("display", "showLinks")),
        (("output", "Show1DNetwork"),
         ("display", "Show1DNetwork")),
        (("output", "ShowStructures"),
         ("display", "ShowStructures")),
        (("output", "ShowNetworkCRS"),
         ("display", "ShowNetworkCRS")),
        (("output", "ShowNodNumbers"),
         ("display", "ShowNodNumbers")),
        (("output", "Show1DNodNum"),
         ("display", "Show1DNodNum")),
        (("colors", "showInterception"),
         ("display", "showInterception")),
        (("colors", "ShowUZslice"),
         ("display", "ShowUZslice")),
        (("colors", "sliceUZcolor"),
         ("display", "sliceUZcolor")),
        (("colors", "showChanSelect"),
         ("display", "showChanSelect")),
        (("colors", "showChanMinY"),
         ("display", "showChanMinY")),
        (("colors", "showChanMaxY"),
         ("display", "showChanMaxY"))
    ])

    # Perform the renamings
    for (sec1, opt1), (sec2, opt2) in changes.items():
        if opt1 == "" and opt2 == "":
            rename_section(commentedmdu, sec1, sec2)
        else:
            opt_rename(commentedmdu, sec1, sec2, opt1, opt2)

    # Write the new MDU file
    with open(arguments.mdu, 'w') as mdufile:
        comment = "# mdu file changed by {} at {}".format(
            sys.argv[0],
            datetime.datetime.now()
        )
        mdufile.write(comment + "\n")
        commentedmdu.write(mdufile)