Mercurial > dive4elements > river
diff flys-backend/contrib/shpimporter/shpimporter.py @ 3654:59ca5dab2782
Shape importer: use python's OptionParse to read user specific configuration from command line.
flys-backend/trunk@5231 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 22 Aug 2012 11:55:55 +0000 |
parents | 998f1a7dcfde |
children | 8654e4480fc6 |
line wrap: on
line diff
--- a/flys-backend/contrib/shpimporter/shpimporter.py Thu Aug 09 11:17:44 2012 +0000 +++ b/flys-backend/contrib/shpimporter/shpimporter.py Wed Aug 22 11:55:55 2012 +0000 @@ -1,6 +1,7 @@ import ogr -import utils +import utils, optparse + from uesg import UESG from axis import Axis from km import KM @@ -14,38 +15,141 @@ from gauges import GaugeLocation from catchments import Catchment -DBCONN='OCI:user/pass@host' -PATH='/path/to/Gewaesser/Elbe' -RIVER_ID=the_river_id -DEST_SRS=31467 + +VERBOSE_DEBUG=2 +VERBOSE_INFO=1 -def getImporters(): +def DEBUG(msg): + config = getConfig() + if config.verbose >= VERBOSE_DEBUG: + print "DEBUG: %s" % msg + +def INFO(msg): + config = getConfig() + if config.verbose >= VERBOSE_INFO: + print "INFO: %s" % msg + +def ERROR(msg): + config = getConfig() + print "ERROR: %s" % msg + + +def getImporters(config): return [ - Axis(DBCONN, RIVER_ID, DEST_SRS), - KM(DBCONN, RIVER_ID, DEST_SRS), - CrosssectionTrack(DBCONN, RIVER_ID, DEST_SRS), - Line(DBCONN, RIVER_ID, DEST_SRS), - Fixpoint(DBCONN, RIVER_ID, DEST_SRS), - Building(DBCONN, RIVER_ID, DEST_SRS), - Floodplain(DBCONN, RIVER_ID, DEST_SRS), - HydrBoundary(DBCONN, RIVER_ID, DEST_SRS), - HydrBoundaryPoly(DBCONN, RIVER_ID, DEST_SRS), - HWS(DBCONN, RIVER_ID, DEST_SRS), - GaugeLocation(DBCONN, RIVER_ID, DEST_SRS), - Catchment(DBCONN, RIVER_ID, DEST_SRS), - UESG(DBCONN, RIVER_ID, DEST_SRS) + Axis(config), + KM(config), + CrosssectionTrack(config), + Line(config), + Fixpoint(config), + Building(config), + Floodplain(config), + HydrBoundary(config), + HydrBoundaryPoly(config), + HWS(config), + GaugeLocation(config), + Catchment(config), + UESG(config) ] -if __name__ == '__main__': - importers = getImporters() +def getConfig(): + parser = optparse.OptionParser() + parser.add_option("--directory", type="string") + parser.add_option("--target_srs", type="int") + parser.add_option("--host", type="string") + parser.add_option("--user", type="string") + parser.add_option("--password", type="string") + parser.add_option("--river_id", type="int") + parser.add_option("--verbose", type="int", default=1) + parser.add_option("--skip_axis", type="int") + parser.add_option("--skip_hydr_boundaries", type="int") + parser.add_option("--skip_buildings", type="int") + parser.add_option("--skip_crosssections", type="int") + parser.add_option("--skip_lines", type="int") + parser.add_option("--skip_fixpoints", type="int") + parser.add_option("--skip_floodplains", type="int") + parser.add_option("--skip_hws", type="int") + parser.add_option("--skip_gauge_locations", type="int") + parser.add_option("--skip_catchments", type="int") + parser.add_option("--skip_kms", type="int") + parser.add_option("--skip_uesgs", type="int") + (config, args) = parser.parse_args() + if config.directory == None: + ERROR("No river directory specified!") + raise Exception("Invalid config") + elif config.host == None: + ERROR("No database host specified!") + raise Exception("Invalid config") + elif config.user == None: + ERROR("No databaser user specified!") + raise Exception("Invalid config") + elif config.password == None: + ERROR("No password specified!") + raise Exception("Invalid config") + elif config.river_id == None: + ERROR("No river id specified!") + raise Exception("Invalid config") + + return config + + +def skip_importer(config, importer): + if config.skip_axis == 1 and isinstance(importer, Axis): + return True + elif config.skip_hydr_boundaries == 1 and isinstance(importer, HydrBoundary): + return True + elif config.skip_hydr_boundaries == 1 and isinstance(importer, HydrBoundaryPoly): + return True + elif config.skip_buildings == 1 and isinstance(importer, Building): + return True + elif config.skip_crosssections == 1 and isinstance(importer, CrosssectionTrack): + return True + elif config.skip_lines == 1 and isinstance(importer, Line): + return True + elif config.skip_fixpoints == 1 and isinstance(importer, Fixpoint): + return True + elif config.skip_floodplains == 1 and isinstance(importer, Floodplain): + return True + elif config.skip_hws == 1 and isinstance(importer, HWS): + return True + elif config.skip_gauge_locations == 1 and isinstance(importer, GaugeLocation): + return True + elif config.skip_catchments == 1 and isinstance(importer, Catchment): + return True + elif config.skip_kms == 1 and isinstance(importer, KM): + return True + elif config.skip_uesgs == 1 and isinstance(importer, UESG): + return True + + return False + + +def parse(): + config=None + try: + config = getConfig() + except: + return + + if config == None: + print "No Config" + ERROR("Unable to read config from command line!") + return + + importers = getImporters(config) types = {} for importer in importers: - shapes = utils.findShapefiles(importer.getPath(PATH)) - print "Found %i Shapefiles" % len(shapes) + if skip_importer(config, importer): + INFO("Skip import of '%s'" % importer.getName()) + continue + + INFO("Start import of '%s'" % importer.getName()) + + shapes = utils.findShapefiles(importer.getPath(config.directory)) + INFO("Found %i Shapefiles" % len(shapes)) for shpTuple in shapes: geomType = importer.walkOverShapes(shpTuple) @@ -56,5 +160,8 @@ types[geomType] = 1 for key in types: - print "%i x geometry type %s" % (types[key], key) + DEBUG("%i x geometry type %s" % (types[key], key)) + +if __name__ == '__main__': + parse()