use module logging instead of warning for messages
This commit is contained in:
		
							parent
							
								
									7fd109b3ea
								
							
						
					
					
						commit
						dc1df224cc
					
				| @ -13,7 +13,7 @@ | |||||||
|     curl -s "https://fdsnws.geophysik.ruhr-uni-bochum.de/fdsnws/event/1/query?minlat=50&maxlat=54&minlon=3&maxlon=10&minmag=1" | mkGeolocationTable.py > geolocationTable.js |     curl -s "https://fdsnws.geophysik.ruhr-uni-bochum.de/fdsnws/event/1/query?minlat=50&maxlat=54&minlon=3&maxlon=10&minmag=1" | mkGeolocationTable.py > geolocationTable.js | ||||||
| 
 | 
 | ||||||
|     License |     License | ||||||
|     Copyright 2020 Kasper D. Fischer <kasper.fischer@rub.de> |     Copyright 2020-2021 Kasper D. Fischer <kasper.fischer@rub.de> | ||||||
| 
 | 
 | ||||||
|     This program is free software: you can redistribute it and/or modify it |     This program is free software: you can redistribute it and/or modify it | ||||||
|     under the terms of the GNU General Public License as published by the Free |     under the terms of the GNU General Public License as published by the Free | ||||||
| @ -27,32 +27,33 @@ | |||||||
| 
 | 
 | ||||||
|     You should have received a copy of the GNU General Public License along |     You should have received a copy of the GNU General Public License along | ||||||
|     with this program. If not, see http://www.gnu.org/licenses/. |     with this program. If not, see http://www.gnu.org/licenses/. | ||||||
| 
 |  | ||||||
|     $Id$ |  | ||||||
| ''' | ''' | ||||||
| 
 | 
 | ||||||
| def mkGeolocationTable(file=''): | def mkGeolocationTable(file=''): | ||||||
|     # imports |     ## imports | ||||||
|  | 
 | ||||||
|  |     # XML ElementTree | ||||||
|     try: |     try: | ||||||
|         import xml.etree.cElementTree as ET |         import xml.etree.cElementTree as ET | ||||||
|     except ImportError: |     except ImportError: | ||||||
|         import xml.etree.ElementTree as ET |         import xml.etree.ElementTree as ET | ||||||
|  | 
 | ||||||
|  |     # json | ||||||
|  |     import json as JSON | ||||||
|  | 
 | ||||||
|  |     # sys stdin | ||||||
|     from sys import stdin |     from sys import stdin | ||||||
|     import warnings | 
 | ||||||
|  |     # geopy | ||||||
|     from geopy.geocoders import Photon |     from geopy.geocoders import Photon | ||||||
|     from geopy.extra.rate_limiter import RateLimiter |     from geopy.extra.rate_limiter import RateLimiter | ||||||
|     from geopy.exc import GeocoderServiceError |     from geopy.exc import GeocoderServiceError | ||||||
|     import json as JSON |  | ||||||
| 
 | 
 | ||||||
|     # constants |     ## constants | ||||||
|     url = 'https://photon.komoot.io/reverse?lon={lng:.3f}&lat={lat:.3f}' |     URL = 'https://photon.komoot.io/reverse?lon={lng:.3f}&lat={lat:.3f}&limit=5' | ||||||
|     namespaces = {'sc3': 'http://geofon.gfz-potsdam.de/ns/seiscomp3-schema/0.7', |     NAMESPACES = {'sc3': 'http://geofon.gfz-potsdam.de/ns/seiscomp3-schema/0.7', | ||||||
|         'qml': 'http://quakeml.org/xmlns/bed/1.2'} |         'qml': 'http://quakeml.org/xmlns/bed/1.2'} | ||||||
| 
 | 
 | ||||||
|     def simple_warning(message, category, filename, lineno, file=None, line=None): |  | ||||||
|         return 'Warning: %s\n' % (message) |  | ||||||
|     warnings.formatwarning = simple_warning |  | ||||||
| 
 |  | ||||||
|     # try loading the file |     # try loading the file | ||||||
|     geolocationTable = {} |     geolocationTable = {} | ||||||
|     if file : |     if file : | ||||||
| @ -62,7 +63,7 @@ def mkGeolocationTable(file=''): | |||||||
|             geolocationTable = JSON.loads(jsonfileContent) |             geolocationTable = JSON.loads(jsonfileContent) | ||||||
|         except: |         except: | ||||||
|             geolocationTable = {} |             geolocationTable = {} | ||||||
|             warnings.warn('Could not parse file %s' %file) |             logging.warning('Could not parse file %s' %file) | ||||||
| 
 | 
 | ||||||
|     # parse event.xml |     # parse event.xml | ||||||
|     DOM = ET.parse(stdin).getroot() |     DOM = ET.parse(stdin).getroot() | ||||||
| @ -70,21 +71,24 @@ def mkGeolocationTable(file=''): | |||||||
|     reverse_geolocate = RateLimiter(geolocator.reverse, min_delay_seconds=1) |     reverse_geolocate = RateLimiter(geolocator.reverse, min_delay_seconds=1) | ||||||
| 
 | 
 | ||||||
|     # iterate over all events |     # iterate over all events | ||||||
|     for event in DOM.iterfind('qml:eventParameters/qml:event', namespaces): |     count = 0 | ||||||
|  |     for event in DOM.iterfind('qml:eventParameters/qml:event', NAMESPACES): | ||||||
|  |         count += 1 | ||||||
|         publicID = event.attrib['publicID'].split('/')[2] |         publicID = event.attrib['publicID'].split('/')[2] | ||||||
|         lat = float(event.find('./qml:origin/qml:latitude/qml:value', namespaces).text) |         lat = float(event.find('./qml:origin/qml:latitude/qml:value', NAMESPACES).text) | ||||||
|         lng = float(event.find('./qml:origin/qml:longitude/qml:value', namespaces).text) |         lng = float(event.find('./qml:origin/qml:longitude/qml:value', NAMESPACES).text) | ||||||
|         evaluationMode = event.find('./qml:origin/qml:evaluationMode', namespaces).text |         evaluationMode = event.find('./qml:origin/qml:evaluationMode', NAMESPACES).text | ||||||
| 
 | 
 | ||||||
|         if publicID in geolocationTable: |         if publicID in geolocationTable: | ||||||
|             warnings.warn('Skipping cached event %s' %(publicID)) |             logging.warning('Skipping cached event {id}'.format(id=publicID)) | ||||||
|         elif evaluationMode == 'automatic': |         elif evaluationMode == 'automatic': | ||||||
|             warnings.warn('Skipping automatic event %s' %(publicID)) |             logging.warning('Skipping automatic event {id}'.format(id=publicID)) | ||||||
|         else: |         else: | ||||||
|  |             logging.info('Processing event {id}'.format(id=publicID)) | ||||||
|             try: |             try: | ||||||
|                 locations = reverse_geolocate("{lat:.3f}, {lng:.3f}".format(lat=lat, lng=lng),exactly_one=False,limit=5) |                 locations = reverse_geolocate("{lat:.3f}, {lng:.3f}".format(lat=lat, lng=lng),exactly_one=False,limit=5) | ||||||
|             except GeocoderServiceError: |             except GeocoderServiceError: | ||||||
|                 warnings.warn('Reverse Geolocation failed. Skipping event.') |                 logging.warning('Reverse Geolocation failed. Skipping event.') | ||||||
|                 continue |                 continue | ||||||
|             place = [] |             place = [] | ||||||
|             for location in locations: |             for location in locations: | ||||||
| @ -100,27 +104,52 @@ def mkGeolocationTable(file=''): | |||||||
|                             try: |                             try: | ||||||
|                                 place = location.raw['properties']['county'] |                                 place = location.raw['properties']['county'] | ||||||
|                             except KeyError: |                             except KeyError: | ||||||
|                                 pass |                                 logging.debug('Could not extract city for event {id} at {lat:.3f} N / {lng:.3f} E (Service: {url}), trying next returned result' | ||||||
|  |                                     .format(id=publicID, lat=lat, lng=lng, url=URL.format(lat=lat,lng=lng))) | ||||||
|  |                                 logging.debug(location.raw) | ||||||
|             if not place: |             if not place: | ||||||
|                 warnings.warn('Could not extract city for event {id} at {lat:.3f} N / {lng:.3f} E (Service: {url})'.format(id=publicID, lat=lat, lng=lng, url=url.format(lat=lat,lng=lng))) |                 logging.critical('Could not extract city for event {id} at {lat:.3f} N / {lng:.3f} E (Service: {url})' | ||||||
|  |                     .format(id=publicID, lat=lat, lng=lng, url=URL.format(lat=lat,lng=lng))) | ||||||
|             geolocationTable[publicID] = place |             geolocationTable[publicID] = place | ||||||
| 
 | 
 | ||||||
|     # dump json |     # dump json | ||||||
|     print('var geolocationTable = {0};'.format(JSON.dumps(geolocationTable, sort_keys=True))) |     print('var geolocationTable = {0};'.format(JSON.dumps(geolocationTable, sort_keys=True))) | ||||||
|  |     logging.info("processed %d events", count) | ||||||
| 
 | 
 | ||||||
| # __main__ | # __main__ | ||||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||||
|  |     # use module logging | ||||||
|  |     import logging | ||||||
|  | 
 | ||||||
|     # parse arguments |     # parse arguments | ||||||
|     import argparse |     import argparse | ||||||
|     versionText = '$Revision$ ($Date$, $Author$)'.replace('$', '').replace(':','') |     versionText = 'v0.1 (2021-10-16)' | ||||||
|     parser = argparse.ArgumentParser( |     parser = argparse.ArgumentParser( | ||||||
|         description='Reverse geocoding lookup of events in xml format (stdin).', |         description='Reverse geocoding lookup of events in xml format (stdin).', | ||||||
|         epilog=versionText) |         epilog=versionText) | ||||||
|     parser.add_argument('-v', '-V', '--version', action='version', |     parser.add_argument('-V', '--version', action='version', version=versionText, | ||||||
|         version=versionText) |         help="show version") | ||||||
|     parser.add_argument('-f', '--file', action='store', dest='file', |     parser.add_argument('-f', '--file', action='store', dest='file', | ||||||
|         help='read in JSON file containing old output.') |         help='read in JSON file containing old output.') | ||||||
|  |     group = parser.add_mutually_exclusive_group() | ||||||
|  |     group.add_argument("-v", "--verbose", action="store_true", | ||||||
|  |         help="increase output verbosity") | ||||||
|  |     group.add_argument("-q", "--quiet", action="store_true", | ||||||
|  |         help="disable output") | ||||||
|  |     group.add_argument("-d", "--debug", action="store_true", | ||||||
|  |         help="show debugging output", | ||||||
|  |                     ) | ||||||
|     cla = parser.parse_args() |     cla = parser.parse_args() | ||||||
| 
 | 
 | ||||||
|  |     # set logging level | ||||||
|  |     if cla.quiet: | ||||||
|  |        logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.ERROR) | ||||||
|  |     elif cla.verbose: | ||||||
|  |        logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO) | ||||||
|  |     elif cla.debug: | ||||||
|  |        logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.DEBUG) | ||||||
|  |     else: | ||||||
|  |        logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.WARN) | ||||||
|  |      | ||||||
|     # call mkGeolocationTable(...) |     # call mkGeolocationTable(...) | ||||||
|     mkGeolocationTable(file=cla.file) |     mkGeolocationTable(file=cla.file) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user