fixed error in assertion text
[p2pool.git] / p2pool / util / fixargparse.py
1 from __future__ import absolute_import
2
3 import argparse
4 import sys
5
6
7 class FixedArgumentParser(argparse.ArgumentParser):
8     '''
9     fixes argparse's handling of empty string arguments
10 and changes @filename behaviour to accept multiple arguments on each line
11     '''
12     
13     def _read_args_from_files(self, arg_strings):
14         # expand arguments referencing files
15         new_arg_strings = []
16         for arg_string in arg_strings:
17             
18             # for regular arguments, just add them back into the list
19             if not arg_string or arg_string[0] not in self.fromfile_prefix_chars:
20                 new_arg_strings.append(arg_string)
21             
22             # replace arguments referencing files with the file content
23             else:
24                 try:
25                     args_file = open(arg_string[1:])
26                     try:
27                         arg_strings = []
28                         for arg_line in args_file.read().splitlines():
29                             for arg in self.convert_arg_line_to_args(arg_line):
30                                 arg_strings.append(arg)
31                         arg_strings = self._read_args_from_files(arg_strings)
32                         new_arg_strings.extend(arg_strings)
33                     finally:
34                         args_file.close()
35                 except IOError:
36                     err = sys.exc_info()[1]
37                     self.error(str(err))
38         
39         # return the modified argument list
40         return new_arg_strings
41     
42     def convert_arg_line_to_args(self, arg_line):
43         return [arg for arg in arg_line.split() if arg.strip()]