python: getopt: subclass OptionParser to populate option_class
authorRob van der Linde <rob@catalyst.net.nz>
Thu, 19 Oct 2023 02:05:56 +0000 (15:05 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Tue, 24 Oct 2023 23:31:29 +0000 (23:31 +0000)
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 <rob@catalyst.net.nz>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
python/samba/getopt.py
python/samba/netcmd/__init__.py
python/samba/tests/samba_tool/base.py

index 691abe6e360b62b2af7535f63b2951b272d51768..4fae3c07700ea086689eeb901672a30f4c84dc91 100644 (file)
@@ -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."""
 
index 6d3e289285a4debeacc09848a84a1c49f9b16771..48fdbd92ee843655afab39a13042e1d55c233a1a 100644 (file)
@@ -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(),
index 55d40c7c5e43111c4dff29f52e31da8ab05cba39..f305c1df566520784bb9a34a382728cb7fb53f57 100644 (file)
@@ -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",