Changeset 5916
- Timestamp:
- 09/14/21 15:08:53 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TOOLS/MOSAIX/update_xml.py
r4195 r5916 1 #!/usr/bin/env python 1 2 ### =========================================================================== 2 3 ### … … 25 26 # 26 27 import xml.etree.ElementTree 27 import getopt, sys 28 29 ## 30 def usage () : 31 texte = """%(prog)s usage : 32 python %(prog)s [-d] [-i iodef.xml] [-o iodef_new.xml] -n <node in Xpath syntax> -k <key> -v <value> 33 python %(prog)s [-d] [-i iodef.xml] [-o iodef_new.xml] -n <node in Xpath syntax> -t <value> 34 -d | --debug : debug 35 -i <file> | --input=<file> : input file (default: iodef.xml) 36 -o <file> | --output=<file> : output file (default: overwrite input file) 37 -n <node> | --node=<node> : node in Xpath syntax 38 -f <field> | --field=<field> : xml field to update 39 -v <value> | --value=<value> : new value for xml field 40 -t <text> | --text=<text> : will replace the 'text' part of the Xpath by <text> 41 examples : 42 python %(prog)s -i iodef.xml -n 'context[@id="interpol_run"]/file_definition/file[@id="file_src"]/field[@id="mask_source"]' -k name -v maskutil_T 43 python %(prog)s -i iodef.xml -n 'context[@id="interpol_run"]/file_definition/file[@id="dia"]/variable[@name="dest_grid"]' -t ${dstDomainType} 44 """ 45 #print ( texte % ( sys.argv[0], sys.argv[0], sys.argv[0], sys.argv[0] ) ) 46 #print ( texte % ( 6*[sys.argv[0]] )) 47 print ( texte % { 'prog':sys.argv[0] } ) 28 import argparse, sys, textwrap 48 29 49 30 # Check version of Python … … 54 35 sys.exit (1) 55 36 56 # # Default input parameters57 FileIn = 'iodef.xml' 58 FileOut = None 59 Node = None60 Key = None 61 Text = None62 Value = None 63 Debug = False 37 # Creating a parser to read the command line arguments 38 # The first step in using the argparse is creating an ArgumentParser object: 39 parser = argparse.ArgumentParser (description = """ 40 examples : 41 python %(prog)s -i iodef.xml -n 'context[@id="interpol_run"]/file_definition/file[@id="file_src"]/field[@id="mask_source"]' -k name -v maskutil_T 42 python %(prog)s -i iodef.xml -n 'context[@id="interpol_run"]/file_definition/file[@id="dia"]/variable[@name="dest_grid"]' -t dstDomainType 43 python %(prog)s -i iodef.xml -e commands.txt (not implemented yet) 44 """ + "\n" + "SVN : " + __Revision__, formatter_class=argparse.RawDescriptionHelpFormatter, epilog='-------- This is the end of the help message --------') 64 45 65 ## Command line options 66 try: 67 myopts, myargs = getopt.getopt ( sys.argv[1:], 'i:o:n:k:v:t:dh', [ 'input=', 'output=', 'node=', 'key=', 'value=', 'text=', 'debug=', '--help' ] ) 68 except getopt.GetoptError as cmdle : 69 print ( "Command line error : "+cmdle ) 70 usage () 71 sys.exit(1) 46 # Adding arguments 47 group1 = parser.add_mutually_exclusive_group (required=True) 72 48 73 for myopt, myval in myopts : 74 if myopt in [ '-h', '--help' ] : usage () ; sys.exit (0) ; 75 if myopt in [ '-i', '--input' ] : FileIn = myval 76 if myopt in [ '-o', '--output' ] : FileOut = myval 77 if myopt in [ '-n', '--node' ] : Node = myval 78 if myopt in [ '-k', '--key' ] : Key = myval 79 if myopt in [ '-t', '--text' ] : Text = myval 80 if myopt in [ '-v', '--value' ] : Value = myval 81 if myopt in [ '-d', '--debug' ] : Debug = True 49 parser.add_argument ( '-i', '--input' , help="input file" , default='iodef.xml', type=str, metavar='<input_file>' ) 50 parser.add_argument ( '-o', '--output' , help="output file" , default=None , type=str, metavar='<output_file>' ) 51 parser.add_argument ( '-n', '--node' , help="xml node in Xpath syntax", default=None, required=True, type=str, metavar='<xml_node>') 52 group1.add_argument ( '-k', '--key' , help="xml key to update" , default=None , type=str , metavar='<xml_key>' ) 53 group1.add_argument ( '-t', '--text' , help="will replace the 'text' part of the Xpath by <text>", default=None, type=str, metavar='<text>' ) 54 parser.add_argument ( '-v', '--value' , help="new value for xml key", default=None, type=str, metavar='<value>' ) 55 parser.add_argument ( '-d', '--debug' , action="store_true", default=False ) 56 parser.add_argument ( '-V', '--verbose', action="store_true", default=False ) 82 57 83 ## Some coherency checking of command line parameters 84 ErrorCount = 0 58 # Parse command line 59 myargs = parser.parse_args() 60 Verbose = myargs.verbose 85 61 86 if FileIn == None : 87 print ( "Error : please specify input file by -i <file>" ) 88 ErrorCount += 1 62 if Verbose : print ( "Command line arguments : " , myargs ) 89 63 90 if Node == None : 91 print ( "Error : please specify -n <node>" ) 92 ErrorCount += 1 93 94 if Key == None and Text == None : 95 print ( "Error : please specify either -t <text> or -k <key> -v <value>" ) 96 ErrorCount += 1 64 FileIn = myargs.input 65 FileOut = myargs.output 66 Node = myargs.node 67 Key = myargs.key 68 Text = myargs.text 69 Value = myargs.value 70 Debug = myargs.debug 97 71 98 if Key != None and Text != None : 99 print ( "Error : please specify only one option between -t "+Text+" and -k "+Key ) 100 ErrorCount += 1 101 72 # Error handling not dealed by argparse 102 73 if Key != None and Value == None : 103 print ( "Error : please specify -v <value> when -k "+Key+" is given") 104 ErrorCount += 1 105 106 if ErrorCount > 0 : 107 usage () 108 sys.exit (1) 74 print ( "Error. When -k|--key=<key> is specified, you must specify -v|--value=<xml_value>" ) 75 sys.exit -1) 109 76 110 77 if FileOut == None : FileOut = FileIn 111 78 112 # # Remove white spaces at beginning and end of line79 # Remove whitespaces at both ends 113 80 Node = Node.rstrip().lstrip() 114 81 … … 120 87 121 88 ## Check that one and only one node is found 122 if len (nodeList) == 0 :89 if len (nodeList) == 0 : 123 90 print ( "Error : node not found" ) 124 print ( "Node : " +Node )91 print ( "Node : " + Node ) 125 92 sys.exit (1) 126 93 127 if len (nodeList) > 1 :128 print ( "Error : " +len(nodeList)+" occurences of node found" )129 print ( "Node : " +Node )130 sys.exit ( 1)94 if len (nodeList) > 1 : 95 print ( "Error : " + len (nodeList)+" occurences of node found" ) 96 print ( "Node : " + Node ) 97 sys.exit (2) 131 98 132 99 ## Update element … … 134 101 135 102 if Debug : 136 print ( 'Node : ' +Node )137 print ( 'Key : ' +Key )138 print ( 'Value : ' +Value )103 print ( 'Node : ' + Node ) 104 print ( 'Key : ' + Key ) 105 print ( 'Value : ' + Value ) 139 106 140 107 if Text != None : 141 108 if Debug : 142 print ( 'Attributes of node: ' +str(elem.attrib) )143 print ( 'Text : ' +str(elem.text) )109 print ( 'Attributes of node: ' + str (elem.attrib) ) 110 print ( 'Text : ' + str (elem.text) ) 144 111 elem.text = Text 145 112 … … 147 114 # To do : check that Key exist (it is added if not : do we want that ?) 148 115 if Debug : 149 print ( 'Attributes of node: ' +str(elem.attrib) )116 print ( 'Attributes of node: ' + str (elem.attrib) ) 150 117 elem.attrib.update ( { Key:Value } ) 151 118 152 153 119 ## Writes XML tree to file 154 120 iodef.write ( FileOut )
Note: See TracChangeset
for help on using the changeset viewer.