code: def process_parser(self):
          
  
          try:
              # Parse with --help to enforce exit
              usage_sections = docopt.docopt(self.parser, ['--help'])
          except SystemExit as e:
              parser = inspect.trace()[-2][0].f_locals
  
          '''
          docopt represents all values as strings and doesn't automatically cast, we probably want to do
          some testing to see if we can convert the default value (Option.value) to a particular type.
          '''
  
          def guess_type(s):
              try:
                  v = float(s)
                  v = int(s)
                  v = s
              except ValueError:
                  pass
  
              return type(v)
  
          self.script_groups = ['Arguments']
          self.nodes = OrderedDict()
          self.containers = OrderedDict()
          self.containers['default'] = []
  
          for option in parser['options']:
              if option.long in ['--help', '--version']:
                  continue
  
              option.type = guess_type(option.value)
              option_name = option.long.strip('-')
              node = DocOptNode(option_name, option=option)
  
              self.nodes[option_name] = node
              self.containers['default'].append(option_name)
  
          self.class_name = os.path.splitext(os.path.basename(self.script_path))[0]
          self.script_path = self.script_path
          self.script_description = self.parser
docs: We can't use the exception catch trick for docopt because the module prevents access to
          it's innards __all__ = ['docopt']. Instead call with --help enforced, catch sys.exit and
          work up to the calling docopt function to pull out the elements. This is horrible.
  
          :return: