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()

http://dive4elements.wald.intevation.org