Source code for obspy.db.util

# -*- coding: utf-8 -*-
"""
Additional utilities for obspy.db.

:copyright:
    The ObsPy Development Team (devs@obspy.org)
:license:
    GNU Lesser General Public License, Version 3
    (https://www.gnu.org/copyleft/lesser.html)
"""
from obspy import UTCDateTime


[docs]def parse_mapping_data(lines): """ Parses a mapping file used by the indexer. """ results = {} for line in lines: if line.startswith('#'): continue if line.strip() == '': continue temp = {} data = line.split() msg = "Invalid format in mapping data: " # check old and new ids if len(data) < 2 or len(data) > 4: raise Exception(msg + 'expected "old_id new_id starttime endtime"') elif data[0].count('.') != 3: raise Exception(msg + "old id %s must contain 3 dots" % data[0]) elif data[1].count('.') != 3: raise Exception(msg + "new id %s must contain 3 dots" % data[1]) old_id = data[0] n0, s0, l0, c0 = old_id.split('.') n1, s1, l1, c1 = data[1].split('.') if len(n0) > 2 or len(n1) > 2: raise Exception(msg + "network ids must not exceed 2 characters") elif len(s0) > 5 or len(s1) > 5: raise Exception(msg + "station ids must not exceed 5 characters") elif len(l0) > 2 or len(l1) > 2: raise Exception(msg + "location ids must not exceed 2 characters") elif len(c0) > 3 or len(c1) > 3: raise Exception(msg + "channel ids must not exceed 3 characters") temp['network'] = n1 temp['station'] = s1 temp['location'] = l1 temp['channel'] = c1 # check datetimes if any if len(data) > 2: try: temp['starttime'] = UTCDateTime(data[2]) except Exception: msg += "starttime '%s' is not a time format" raise Exception(msg % data[2]) else: temp['starttime'] = None if len(data) > 3: try: temp['endtime'] = UTCDateTime(data[3]) except Exception: msg += "endtime '%s' is not a time format" raise Exception(msg % data[3]) if temp['endtime'] < temp['starttime']: msg += "endtime '%s' should be after starttime" raise Exception(msg % data[3]) else: temp['endtime'] = None results.setdefault(old_id, []) results.get(old_id).append(temp) return results