106 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env seiscomp-python
 | 
						|
# -*- coding: utf-8 -*-
 | 
						|
############################################################################
 | 
						|
# Copyright (C) GFZ Potsdam                                                #
 | 
						|
# All rights reserved.                                                     #
 | 
						|
#                                                                          #
 | 
						|
# GNU Affero General Public License Usage                                  #
 | 
						|
# This file may be used under the terms of the GNU Affero                  #
 | 
						|
# Public License version 3.0 as published by the Free Software Foundation  #
 | 
						|
# and appearing in the file LICENSE included in the packaging of this      #
 | 
						|
# file. Please review the following information to ensure the GNU Affero   #
 | 
						|
# Public License version 3.0 requirements will be met:                     #
 | 
						|
# https://www.gnu.org/licenses/agpl-3.0.html.                              #
 | 
						|
############################################################################
 | 
						|
 | 
						|
import sys
 | 
						|
import io
 | 
						|
from seiscomp.legacy.fseed import *
 | 
						|
from seiscomp.legacy.db.seiscomp3 import sc3wrap
 | 
						|
from seiscomp.legacy.db.seiscomp3.inventory import Inventory
 | 
						|
import seiscomp.datamodel
 | 
						|
import seiscomp.io
 | 
						|
 | 
						|
ORGANIZATION = "EIDA"
 | 
						|
 | 
						|
 | 
						|
def iterinv(obj):
 | 
						|
    return (j for i in obj.values() for j in i.values())
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    if len(sys.argv) < 1 or len(sys.argv) > 3:
 | 
						|
        print("Usage inv2dlsv [in_xml [out_dataless]]", file=sys.stderr)
 | 
						|
        return 1
 | 
						|
 | 
						|
    if len(sys.argv) > 1:
 | 
						|
        inFile = sys.argv[1]
 | 
						|
    else:
 | 
						|
        inFile = "-"
 | 
						|
 | 
						|
    if len(sys.argv) > 2:
 | 
						|
        out = sys.argv[2]
 | 
						|
    else:
 | 
						|
        out = ""
 | 
						|
 | 
						|
    sc3wrap.dbQuery = None
 | 
						|
 | 
						|
    ar = seiscomp.io.XMLArchive()
 | 
						|
    if not ar.open(inFile):
 | 
						|
        raise IOError(inFile + ": unable to open")
 | 
						|
 | 
						|
    obj = ar.readObject()
 | 
						|
    if obj is None:
 | 
						|
        raise TypeError(inFile + ": invalid format")
 | 
						|
 | 
						|
    sc3inv = seiscomp.datamodel.Inventory.Cast(obj)
 | 
						|
    if sc3inv is None:
 | 
						|
        raise TypeError(inFile + ": invalid format")
 | 
						|
 | 
						|
    inv = Inventory(sc3inv)
 | 
						|
    inv.load_stations("*", "*", "*", "*")
 | 
						|
    inv.load_instruments()
 | 
						|
 | 
						|
    vol = SEEDVolume(inv, ORGANIZATION, "", resp_dict=False)
 | 
						|
 | 
						|
    for net in iterinv(inv.network):
 | 
						|
        for sta in iterinv(net.station):
 | 
						|
            for loc in iterinv(sta.sensorLocation):
 | 
						|
                for strm in iterinv(loc.stream):
 | 
						|
                    try:
 | 
						|
                        vol.add_chan(
 | 
						|
                            net.code,
 | 
						|
                            sta.code,
 | 
						|
                            loc.code,
 | 
						|
                            strm.code,
 | 
						|
                            strm.start,
 | 
						|
                            strm.end,
 | 
						|
                        )
 | 
						|
 | 
						|
                    except SEEDError as exc:
 | 
						|
                        print(
 | 
						|
                            f"Error ({net.code},{sta.code},{loc.code},{strm.code}): {str(exc)}",
 | 
						|
                            file=sys.stderr,
 | 
						|
                        )
 | 
						|
 | 
						|
    if not out or out == "-":
 | 
						|
        output = io.BytesIO()
 | 
						|
        vol.output(output)
 | 
						|
        stdout = sys.stdout.buffer if hasattr(sys.stdout, "buffer") else sys.stdout
 | 
						|
        stdout.write(output.getvalue())
 | 
						|
        stdout.flush()
 | 
						|
        output.close()
 | 
						|
    else:
 | 
						|
        with open(sys.argv[2], "wb") as fd:
 | 
						|
            vol.output(fd)
 | 
						|
 | 
						|
    return 0
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    try:
 | 
						|
        sys.exit(main())
 | 
						|
    except Exception as e:
 | 
						|
        print(f"Error: {str(e)}", file=sys.stderr)
 | 
						|
        sys.exit(1)
 |