def main(): #-----------Setting up and unsing option parser----------------------- parser=OptionParser(usage= usage, version=version) parser.add_option("-u",'--user', action="store",dest="user", help="Name of target edb user") parser.add_option("-e","--edb", action="store",dest="edb", help="Name of target edb") parser.add_option("-v","--viewports", action="store",dest="viewports", help="Comma-separated list of area id's to be cut out, default is all") parser.add_option("-y","--year", action="store",dest="year", help="Cut out for given year") parser.add_option("-l", "--loglevel", action="store",dest="loglevel",default=2, help="Sets the loglevel (0-3 where 3=full logging)") parser.add_option("-s","--suffix", action="store",dest="suffix",default="v1", help="Sets suffix to names of generated edb's to support version management, default is 'v1'") (options, args) = parser.parse_args() #--------------------Init logger----------------------- rootLogger = logger.RootLogger(level=options.loglevel) global log log = rootLogger.getLogger(sys.argv[0]) #-----------------Validating options------------------- if options.user is None: log.error("Need to specify -u <user>") return 1 if options.edb is None: log.error("Need to specify -e <edb>") return 1 if options.year is None: log.error("Need to specify -y <year>") return 1 if len(options.suffix)>4: log.error("Limit your suffix length to 4 characters") return 1 if len(options.year)!=4: log.error("Year should be given with four digits") return 1 dmn=Domain() viewports=[] if options.viewports is not None: viewportIds=options.viewports.split(",") else: viewportIds=dmn.listViewports() for vpId in viewportIds: vp=ViewPort() vp.read(path.join(dmn.wndPath(),"modell.par"),vpId) viewports.append(vp) edb=Edb(dmn,options.user,options.edb) log.info("Reading sourcedb...") sourcedb=Sourcedb(edb) sourcedb.read() log.info("Reading emfacdb...") emfacdb=Emfacdb(edb) emfacdb.read() log.info("Reading subdb...") subdb=Subdb(edb) subdb.read() edbDotRsrc=edb.rsrcPath() for vpInd,vp in enumerate(viewports): targetEdbName=vp.code+"_"+options.year+"_"+options.suffix tEdb=Edb(dmn,options.user,targetEdbName) if tEdb.exists(): log.info("Edb %s already exists, remove first to update" %targetEdbName) continue tEdb.create(edbRsrc=edbDotRsrc) log.info("Created empty edb %s" %targetEdbName) subdb.setEdb(tEdb) subdb.write() log.info("Wrote searchkeys") emfacdb.setEdb(tEdb) emfacdb.write() log.info("Wrote emfacdb") tSourcedb=Sourcedb(tEdb) log.info("Cutting out viewport %s (%i/%i)" %(vp.code,vpInd+1,len(viewports))) for srcInd,src in enumerate(sourcedb.sources): if includeShip(src,vp.code,src["Y1"],options.year): log.debug("Ship %i/%i included in %s" %(srcInd+1,len(sourcedb.sources),tEdb.name)) tSourcedb.sources.append(src) tSourcedb.write() log.info("Wrote exatracted sources to %s" %tEdb.name) tEdb.setDesc("This edb has been extracted from %s under user %s, " %(edb.name,edb.user)+ "and includes all ships that have visited the map area %s (%s) during %s\n" %(vp.code,vp.name,options.year)) log.info("Finished!") return 0
def main(): #-----------Setting up and unsing option parser----------------------- parser=OptionParser(usage= usage, version=version) parser.add_option("-u",'--targetUser', action="store",dest="targetUser", help="Name of target edb user") parser.add_option("-e","--targetEdb", action="store",dest="targetEdb", help="Name of target edb") parser.add_option("--templateUser", action="store",dest="templateUser", help="Name of template edb user") parser.add_option("--templateEdb", action="store",dest="templateEdb", help="Name of template edb") parser.add_option("-f","--force", action="store_true",dest="force", help="Overwrite existing data") parser.add_option("--templateACIndex", action="store",dest="templateACIndex", help="Attribute on template to join by") parser.add_option("--targetACIndex", action="store",dest="targetACIndex", help="Attribute on target to join by") parser.add_option("-l", "--loglevel", action="store",dest="loglevel",default=2, help="Sets the loglevel (0-3 where 3=full logging)") parser.add_option("--ALOBFilter", action="store",dest="ALOBFilter", help="Exclude ships with specified ALOB"+ " (specify as '<key>=<value>')") parser.add_option("--MMSI", action="store",dest="MMSI", help="Specify single MMSI to fetch") parser.add_option("--logfile", action="store",dest="logfile", help="Send output to logfile") (options, args) = parser.parse_args() #---------Init logger------------------ rootLogger = logger.RootLogger(level=options.loglevel) global log if options.logfile is not None: log = rootLogger.getFileLogger(sys.argv[0],options.logfile,format="%(message)s") else: log = rootLogger.getStreamLogger(sys.argv[0],infoFormat="%(message)s") #---------Validating and processing options------------------- if len(args)!=0: log.error("No arguments wanted, only options") log.info(str(args)) if options.targetUser is None: log.error("Need to specify target user -u <user>") return 1 if options.targetEdb is None: log.error("Need to specify target edb -e <edb>") return 1 if options.templateUser is None: log.error("Need to specify template user --templateUser <user>") return 1 if options.templateEdb is None: log.error("Need to specify template edb --templateEdb <edb>") return 1 if options.MMSI is not None: X1=2147483647 #ship source identifier coords=options.MMSI.split(",") if len(coords)>1: #If X1,Y1 is used as identifier as in sourcedb Y1=int(coords[1]) else: Y1=int(coords[0]) else: X1=None Y1=None if options.ALOBFilter is not None: ALOBFilter=options.ALOBFilter.split("=") if len(ALOBFilter)!=2: log.error("Wrong format used for ALOBFilter,"+ " should be specified as <key>=<value>") return 1 else: ALOBFilter=None #------------------------------------------------------ msg=50*"-"+"\nUpdating ships with source templates\n" if options.MMSI is not None: msg+="Processing selected with MMSI: %s\n" %options.MMSI else: msg+="Processing all sources" if ALOBFilter is not None: msg+="Ships with ALOB %s=%s excluded\n" %(ALOBFilter[0],ALOBFilter[1]) if options.force: msg+="Already existing data will be overwritten" else: msg+="Already existing data will not be overwritten" msg+="\n" log.info(msg) #Parameters that will not be transferred from template to target skipPars=["NAME","INFO","INFO2","ALOB","X1","Y1","X2","Y2","PX","PY"] #Set domain dmn=Domain() #Create edb objects targetEdb=Edb(dmn,options.targetUser,options.targetEdb) templateEdb=Edb(dmn,options.templateUser,options.templateEdb) #Read sourcedb from target edb log.debug("Reading sources from target edb") sourcedb=Sourcedb(targetEdb) templateACIndex=options.templateACIndex if templateACIndex is not None: try: templateACIndex=int(templateACIndex) except: log.error("Invalid templateACIndex, should be an integer") return 1 targetACIndex=options.targetACIndex if targetACIndex is not None: try: targetACIndex=int(targetACIndex) except: log.error("Invalid targetACIndex, should be an integer") return 1 log.debug("Reading sources from target edb") templates=loadTemplate(templateEdb,templateACIndex) log.info("Read %i unique sources from template edb" %len(templates.keys())) templateEmfacdb = Emfacdb(templateEdb) templateEmfacdb.read() targetEmfacdb = Emfacdb(targetEdb) targetEmfacdb.read() #Set templateEmfacdb to targetEdb (preparation to transfer emfacs) templateEmfacdb.setEdb(targetEdb) if templateEmfacdb.activities!={} and options.force: log.info("Overwriting emfacdb of target") try: templateEmfacdb.write(force=True) except PyAirviroOSException,err: log.error(str(err)) return 1 log.debug("Loaded emfacdb from template to target edb")