class CustomHelpFormat: """Customizable help formatter factory.""" def __init__(self): self.indent_increment = 2 self.max_help_position = 24 self.width = None self.raw_description = False self.raw_text = False self.arg_defaults = False self.metavar_type = False def __call__(self, prog): formatter = CustomizableHelpFormatter(prog, indent_increment=self.indent_increment, max_help_position=self.max_help_position, width=self.width) if self.raw_description: formatter.enable_raw_descrption() if self.raw_text: formatter.enable_raw_text() if self.arg_defaults: formatter.enable_arg_defaults() if self.metavar_type: formatter.enable_metavar_type() return formatter class CustomizableHelpFormatter(HelpFormatter): """Customizable help formatter.""" def bind_sub(self, method): """Bind method from subclass to self.""" setattr(self, method.__name__, method.__get__(self)) def enable_raw_descrption(self): self.bind_sub(RawDescriptionHelpFormatter._fill_text) def enable_raw_text(self): self.bind_sub(RawTextHelpFormatter._split_lines) def enable_arg_defaults(self): self.bind_sub(ArgumentDefaultsHelpFormatter._get_help_string) def enable_metavar_type(self): self.bind_sub(MetavarTypeHelpFormatter._get_default_metavar_for_optional) self.bind_sub(MetavarTypeHelpFormatter._get_default_metavar_for_positional)