1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-11 05:18:09 +03:00

python: getopt: move SambaOption to the top of the file

This is needed for the next commit

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>
This commit is contained in:
Rob van der Linde 2023-10-05 11:32:30 +13:00 committed by Andrew Bartlett
parent c688e73358
commit 96959b7267

View File

@ -35,6 +35,51 @@ from samba._glue import get_burnt_commandline
OptionError = optparse.OptionValueError
def check_bytes(option, opt, value):
"""Custom option type to allow the input of sizes using byte, kb, mb ...
units, e.g. 2Gb, 4KiB ...
e.g. Option("--size", type="bytes", metavar="SIZE")
"""
multipliers = {"B": 1,
"KB": 1024,
"MB": 1024 * 1024,
"GB": 1024 * 1024 * 1024}
# strip out any spaces
v = value.replace(" ", "")
# extract the numeric prefix
digits = ""
while v and v[0:1].isdigit() or v[0:1] == '.':
digits += v[0]
v = v[1:]
try:
m = float(digits)
except ValueError:
msg = ("{0} option requires a numeric value, "
"with an optional unit suffix").format(opt)
raise optparse.OptionValueError(msg)
# strip out the 'i' and convert to upper case so
# kib Kib kb KB are all equivalent
suffix = v.upper().replace("I", "")
try:
return m * multipliers[suffix]
except KeyError as k:
msg = ("{0} invalid suffix '{1}', "
"should be B, Kb, Mb or Gb").format(opt, v)
raise optparse.OptionValueError(msg)
class SambaOption(optparse.Option):
TYPES = optparse.Option.TYPES + ("bytes",)
TYPE_CHECKER = copy(optparse.Option.TYPE_CHECKER)
TYPE_CHECKER["bytes"] = check_bytes
class SambaOptions(optparse.OptionGroup):
"""General Samba-related command line options."""
@ -364,48 +409,3 @@ class CredentialsOptionsDouble(CredentialsOptions):
if self.no_pass2:
self.creds2.set_cmdline_callbacks()
return self.creds2
def check_bytes(option, opt, value):
"""Custom option type to allow the input of sizes using byte, kb, mb ...
units, e.g. 2Gb, 4KiB ...
e.g. Option("--size", type="bytes", metavar="SIZE")
"""
multipliers = {"B": 1,
"KB": 1024,
"MB": 1024 * 1024,
"GB": 1024 * 1024 * 1024}
# strip out any spaces
v = value.replace(" ", "")
# extract the numeric prefix
digits = ""
while v and v[0:1].isdigit() or v[0:1] == '.':
digits += v[0]
v = v[1:]
try:
m = float(digits)
except ValueError:
msg = ("{0} option requires a numeric value, "
"with an optional unit suffix").format(opt)
raise optparse.OptionValueError(msg)
# strip out the 'i' and convert to upper case so
# kib Kib kb KB are all equivalent
suffix = v.upper().replace("I", "")
try:
return m * multipliers[suffix]
except KeyError as k:
msg = ("{0} invalid suffix '{1}', "
"should be B, Kb, Mb or Gb").format(opt, v)
raise optparse.OptionValueError(msg)
class SambaOption(optparse.Option):
TYPES = optparse.Option.TYPES + ("bytes",)
TYPE_CHECKER = copy(optparse.Option.TYPE_CHECKER)
TYPE_CHECKER["bytes"] = check_bytes