1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-22 05:57:43 +03:00

python getopt: Add bytes option type

Add a new option type to the python command line options.
  Option("--size", type="bytes", metavar="SIZE")
To allow the input of file and memory sizes using unit suffixes i.e.
2Gb, 4KiB ...

Signed-off-by: Gary Lockyer <gary@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
Gary Lockyer 2019-06-21 13:05:23 +12:00 committed by Gary Lockyer
parent b27817d491
commit b8446c0802

View File

@ -20,6 +20,7 @@
__docformat__ = "restructuredText"
import optparse
from copy import copy
import os
from samba.credentials import (
Credentials,
@ -285,3 +286,47 @@ class CredentialsOptionsDouble(CredentialsOptions):
if self.no_pass2:
self.creds2.set_cmdline_callbacks()
return self.creds2
# 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")
#
def check_bytes(option, opt, value):
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