Commit ecd49a760d0e180160148bc4f8fb2b5c4759ed54

Authored by Christian Herdtweck
1 parent 8f9df350

Add option for custom command line args in msodde.py

Custom command line arguments greatly simplifies unit test creation for
the main method.

Also, avoid calling sys.exit in functions (that is good practice if I
recall corretly).
Showing 1 changed file with 14 additions and 6 deletions
oletools/msodde.py
... ... @@ -121,14 +121,14 @@ def existing_file(filename):
121 121 return filename
122 122  
123 123  
124   -def process_args():
  124 +def process_args(cmd_line_args=None):
125 125 parser = ArgParserWithBanner(description='A python tool to detect and extract DDE links in MS Office files')
126 126 parser.add_argument("filepath", help="path of the file to be analyzed",
127 127 type=existing_file, metavar='FILE')
128 128 parser.add_argument("--json", '-j', action='store_true',
129 129 help="Output in json format")
130 130  
131   - return parser.parse_args()
  131 + return parser.parse_args(cmd_line_args)
132 132  
133 133  
134 134 # === FUNCTIONS ==============================================================
... ... @@ -312,8 +312,14 @@ def process_file(filepath):
312 312  
313 313 #=== MAIN =================================================================
314 314  
315   -def main():
316   - args = process_args()
  315 +def main(cmd_line_args=None):
  316 + """ Main function, called if this file is called as a script
  317 +
  318 + Optional argument: command line arguments to be forwarded to ArgumentParser
  319 + in process_args. Per default (cmd_line_args=None), sys.argv is used. Option
  320 + mainly added for unit-testing
  321 + """
  322 + args = process_args(cmd_line_args)
317 323  
318 324 if args.json:
319 325 jout = []
... ... @@ -342,11 +348,13 @@ def main():
342 348 jout.append(dict(type='dde-link', link=line.strip()))
343 349 json.dump(jout, sys.stdout, check_circular=False, indent=4)
344 350 print() # add a newline after closing "]"
345   - sys.exit(return_code) # required if we catch an exception in json-mode
  351 + return return_code # required if we catch an exception in json-mode
346 352 else:
347 353 print ('DDE Links:')
348 354 print(text)
349 355  
  356 + return return_code
  357 +
350 358  
351 359 if __name__ == '__main__':
352   - main()
  360 + sys.exit(main())
... ...