From: Rob van der Linde Date: Thu, 19 Oct 2023 02:05:56 +0000 (+1300) Subject: python: getopt: subclass OptionParser to populate option_class X-Git-Tag: talloc-2.4.2~1127 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=837e1d9fdad79ea3a7fdce1232d8dd834f181a63;p=thirdparty%2Fsamba.git python: getopt: subclass OptionParser to populate option_class The option_class needs to be set correctly for OptionGroups that use self.add_option Override OptionParser `__init__` to change the default Option class to the samba one. Signed-off-by: Rob van der Linde Reviewed-by: Douglas Bagnall Reviewed-by: Andrew Bartlett --- diff --git a/python/samba/getopt.py b/python/samba/getopt.py index 691abe6e360..4fae3c07700 100644 --- a/python/samba/getopt.py +++ b/python/samba/getopt.py @@ -115,6 +115,28 @@ class Option(optparse.Option): return value +class OptionParser(optparse.OptionParser): + """Samba OptionParser, adding support for required=True on Options.""" + + def __init__(self, + usage=None, + option_list=None, + option_class=Option, + version=None, + conflict_handler="error", + description=None, + formatter=None, + add_help_option=True, + prog=None, + epilog=None): + """ + Ensure that option_class defaults to the Samba one. + """ + super().__init__(usage, option_list, option_class, version, + conflict_handler, description, formatter, + add_help_option, prog, epilog) + + class SambaOptions(optparse.OptionGroup): """General Samba-related command line options.""" diff --git a/python/samba/netcmd/__init__.py b/python/samba/netcmd/__init__.py index 6d3e289285a..48fdbd92ee8 100644 --- a/python/samba/netcmd/__init__.py +++ b/python/samba/netcmd/__init__.py @@ -26,7 +26,7 @@ import samba from ldb import ERR_INVALID_CREDENTIALS, LdbError from samba import colour from samba.auth import system_session -from samba.getopt import Option +from samba.getopt import Option, OptionParser from samba.logger import get_samba_logger from samba.samdb import SamDB @@ -180,7 +180,7 @@ class Command(object): traceback.print_tb(etraceback, file=self.errf) def _create_parser(self, prog=None, epilog=None): - parser = optparse.OptionParser( + parser = OptionParser( usage=self.synopsis, description=self.full_description, formatter=PlainHelpFormatter(), diff --git a/python/samba/tests/samba_tool/base.py b/python/samba/tests/samba_tool/base.py index 55d40c7c5e4..f305c1df566 100644 --- a/python/samba/tests/samba_tool/base.py +++ b/python/samba/tests/samba_tool/base.py @@ -25,12 +25,11 @@ import os import random import string from io import StringIO -from optparse import OptionParser import samba.getopt as options import samba.tests from samba.auth import system_session -from samba.netcmd import Option +from samba.getopt import OptionParser from samba.netcmd.main import cmd_sambatool from samba.samdb import SamDB @@ -50,7 +49,7 @@ class SambaToolCmdTest(samba.tests.BlackboxTestCase): def getSamDB(*argv): """a convenience function to get a samdb instance so that we can query it""" - parser = OptionParser(option_class=Option) + parser = OptionParser() sambaopts = options.SambaOptions(parser) credopts = options.CredentialsOptions(parser) parser.add_option("-H", "--URL",