future proofing is good, but...

since print() was made a function in py3, i can predict at some point
that return will be made a func as well. sure, good.
but "return()" *currently* returns an empty tuple. We want to
explicitly return None for testing purposes.
This commit is contained in:
2019-12-11 04:33:15 -05:00
parent a1bc613979
commit d7d85c7d9d
24 changed files with 156 additions and 156 deletions

View File

@@ -86,7 +86,7 @@ class Partition(object):
else:
continue
self.flags.append(_BlockDev.PartFlag(flag_id))
return()
return(None)
def _initFstype(self):
_err = ('{0} is not a valid partition filesystem type; '
@@ -102,7 +102,7 @@ class Partition(object):
raise ValueError(_err)
if self.fs_type not in aif.constants.GPT_GUID_IDX.keys():
raise ValueError(_err)
return()
return(None)
def format(self):
# This is a safeguard. We do *not* want to partition a disk that is mounted.
@@ -119,7 +119,7 @@ class Partition(object):
if self.flags:
for f in self.flags:
_BlockDev.part.set_part_flag(self.device, self.devpath, f, True)
return()
return(None)
#
# def detect(self):
@@ -155,7 +155,7 @@ class Disk(object):
self.is_hiformatted = False
self.is_partitioned = False
self.partitions = []
return()
return(None)
def diskFormat(self):
if self.is_lowformatted:
@@ -170,7 +170,7 @@ class Disk(object):
_BlockDev.part.create_table(self.devpath, self.table_type, True)
self.is_lowformatted = True
self.is_partitioned = False
return()
return(None)
def getPartitions(self):
# For GPT, this *technically* should be 34 -- or, more precisely, 2048 (see FAQ in manual), but the alignment
@@ -196,11 +196,11 @@ class Disk(object):
p = Partition(part, self.disk, start_sector, partnum, self.table_type, part_type = parttype)
start_sector = p.end + 1
self.partitions.append(p)
return()
return(None)
def partFormat(self):
if self.is_partitioned:
return()
return(None)
if not self.is_lowformatted:
self.diskFormat()
# This is a safeguard. We do *not* want to partition a disk that is mounted.
@@ -208,7 +208,7 @@ class Disk(object):
if not self.partitions:
self.getPartitions()
if not self.partitions:
return()
return(None)
for p in self.partitions:
p.format()
p.is_hiformatted = True

View File

@@ -144,18 +144,18 @@ class Disk(object):
self.is_hiformatted = False
self.is_partitioned = False
self.partitions = []
return()
return(None)
def diskFormat(self):
if self.is_lowformatted:
return()
return(None)
# This is a safeguard. We do *not* want to low-format a disk that is mounted.
aif.utils.checkMounted(self.devpath)
self.disk.deleteAllPartitions()
self.disk.commit()
self.is_lowformatted = True
self.is_partitioned = False
return()
return(None)
def getPartitions(self):
# For GPT, this *technically* should be 34 -- or, more precisely, 2048 (see FAQ in manual), but the alignment
@@ -181,11 +181,11 @@ class Disk(object):
p = Partition(part, self.disk, start_sector, partnum, self.table_type, part_type = parttype)
start_sector = p.end + 1
self.partitions.append(p)
return()
return(None)
def partFormat(self):
if self.is_partitioned:
return()
return(None)
if not self.is_lowformatted:
self.diskFormat()
# This is a safeguard. We do *not* want to partition a disk that is mounted.
@@ -193,11 +193,11 @@ class Disk(object):
if not self.partitions:
self.getPartitions()
if not self.partitions:
return()
return(None)
for p in self.partitions:
self.disk.addPartition(partition = p, constraint = self.device.optimalAlignedConstraint)
self.disk.commit()
p.devpath = p.partition.path
p.is_hiformatted = True
self.is_partitioned = True
return()
return(None)

View File

@@ -56,7 +56,7 @@ class FS(object):
cmd.append(self.devpath)
subprocess.run(cmd)
self.formatted = True
return()
return(None)
class Mount(object):
@@ -86,7 +86,7 @@ class Mount(object):
def mount(self):
if self.mounted:
return()
return(None)
os.makedirs(self.target, exist_ok = True)
opts = self._parseOpts()
_BlockDev.fs.mount(self.source,
@@ -94,21 +94,21 @@ class Mount(object):
self.fs.fstype,
(','.join(opts) if opts else None))
self.mounted = True
return()
return(None)
def unmount(self, lazy = False, force = False):
self.updateMount()
if not self.mounted and not force:
return()
return(None)
_BlockDev.fs.unmount(self.target,
lazy,
force)
self.mounted = False
return()
return(None)
def updateMount(self):
if self.source in [p.device for p in psutil.disk_partitions(all = True)]:
self.mounted = True
else:
self.mounted = False
return()
return(None)

View File

@@ -47,7 +47,7 @@ class FS(object):
cmd.append(self.devpath)
subprocess.run(cmd)
self.formatted = True
return()
return(None)
class Mount(object):
@@ -76,7 +76,7 @@ class Mount(object):
def mount(self):
if self.mounted:
return()
return(None)
os.makedirs(self.target, exist_ok = True)
opts = self._parseOpts()
# TODO: logging
@@ -87,12 +87,12 @@ class Mount(object):
cmd.extend([self.source, self.target])
subprocess.run(cmd)
self.mounted = True
return()
return(None)
def unmount(self, lazy = False, force = False):
self.updateMount()
if not self.mounted and not force:
return()
return(None)
# TODO: logging
cmd = ['/usr/bin/umount']
if lazy:
@@ -102,11 +102,11 @@ class Mount(object):
cmd.append(self.target)
subprocess.run(cmd)
self.mounted = False
return()
return(None)
def updateMount(self):
if self.source in [p.device for p in psutil.disk_partitions(all = True)]:
self.mounted = True
else:
self.mounted = False
return()
return(None)

View File

@@ -40,7 +40,7 @@ class LuksSecretFile(LuksSecret):
self.passphrase = secrets.token_bytes(self.size)
if not isinstance(self.passphrase, bytes):
self.passphrase = self.passphrase.encode('utf-8')
return()
return(None)
class LUKS(object):
@@ -72,7 +72,7 @@ class LUKS(object):
'(aif.disk.luks.LuksSecretPassphrase or '
'aif.disk.luks.LuksSecretFile)')
self.secrets.append(secretobj)
return()
return(None)
def createSecret(self, secrets_xml = None):
if not secrets_xml: # Find all of them from self
@@ -116,11 +116,11 @@ class LUKS(object):
passphrase = None,
bytesize = kf.attrib.get('size', 4096))
self.secrets.append(secretobj)
return()
return(None)
def create(self):
if self.created:
return()
return(None)
if not self.secrets:
raise RuntimeError('Cannot create a LUKS volume with no secrets added')
for idx, secret in enumerate(self.secrets):
@@ -138,28 +138,28 @@ class LUKS(object):
self.secrets[0].passphrase,
secret.passphrase)
self.created = True
return()
return(None)
def lock(self):
if not self.created:
raise RuntimeError('Cannot lock a LUKS volume before it is created')
if self.locked:
return()
return(None)
_BlockDev.crypto.luks_close(self.name)
self.locked = True
return()
return(None)
def unlock(self, passphrase = None):
if not self.created:
raise RuntimeError('Cannot unlock a LUKS volume before it is created')
if not self.locked:
return()
return(None)
_BlockDev.crypto.luks_open_blob(self.source,
self.name,
self.secrets[0].passphrase,
False) # read-only
self.locked = False
return()
return(None)
def updateInfo(self):
if self.locked:
@@ -177,7 +177,7 @@ class LUKS(object):
info[k] = v
info['_cipher'] = '{cipher}-{mode}'.format(**info)
self.info = info
return()
return(None)
def writeConf(self, conf = '/etc/crypttab'):
if not self.secrets:
@@ -204,4 +204,4 @@ class LUKS(object):
if luksinfo not in conflines:
with open(conf, 'a') as fh:
fh.write('{0}\n'.format(luksinfo))
return()
return(None)

View File

@@ -40,7 +40,7 @@ class LuksSecretFile(LuksSecret):
self.passphrase = secrets.token_bytes(self.size)
if not isinstance(self.passphrase, bytes):
self.passphrase = self.passphrase.encode('utf-8')
return()
return(None)
class LUKS(object):
@@ -71,7 +71,7 @@ class LUKS(object):
'(aif.disk.luks.LuksSecretPassphrase or '
'aif.disk.luks.LuksSecretFile)')
self.secrets.append(secretobj)
return()
return(None)
def createSecret(self, secrets_xml = None):
if not secrets_xml: # Find all of them from self
@@ -115,11 +115,11 @@ class LUKS(object):
passphrase = None,
bytesize = kf.attrib.get('size', 4096))
self.secrets.append(secretobj)
return()
return(None)
def create(self):
if self.created:
return()
return(None)
if not self.secrets:
raise RuntimeError('Cannot create a LUKS volume with no secrets added')
for idx, secret in enumerate(self.secrets):
@@ -147,13 +147,13 @@ class LUKS(object):
subprocess.run(cmd, input = self.secrets[0].passphrase)
os.remove(tmpfile[1])
self.created = True
return()
return(None)
def lock(self):
if not self.created:
raise RuntimeError('Cannot lock a LUKS volume before it is created')
if self.locked:
return()
return(None)
# TODO: logging
cmd = ['cryptsetup',
'--batch-mode',
@@ -161,13 +161,13 @@ class LUKS(object):
self.name]
subprocess.run(cmd)
self.locked = True
return()
return(None)
def unlock(self, passphrase = None):
if not self.created:
raise RuntimeError('Cannot unlock a LUKS volume before it is created')
if not self.locked:
return()
return(None)
cmd = ['cryptsetup',
'--batch-mode',
'luksOpen',
@@ -176,7 +176,7 @@ class LUKS(object):
self.name]
subprocess.run(cmd, input = self.secrets[0].passphrase)
self.locked = False
return()
return(None)
def updateInfo(self):
if self.locked:
@@ -225,7 +225,7 @@ class LUKS(object):
elif k == 'uuid':
v = uuid.UUID(hex = v)
self.info = info
return()
return(None)
def writeConf(self, conf = '/etc/crypttab'):
if not self.secrets:
@@ -252,4 +252,4 @@ class LUKS(object):
if luksinfo not in conflines:
with open(conf, 'a') as fh:
fh.write('{0}\n'.format(luksinfo))
return()
return(None)

View File

@@ -42,7 +42,7 @@ class PV(object):
except _BlockDev.LVMError:
self.meta = None
self.is_pooled = False
return()
return(None)
for k in dir(_meta):
if k.startswith('_'):
continue
@@ -52,7 +52,7 @@ class PV(object):
meta[k] = v
self.meta = meta
self.is_pooled = True
return()
return(None)
def prepare(self):
try:
@@ -97,7 +97,7 @@ class PV(object):
0,
opts)
self._parseMeta()
return()
return(None)
class VG(object):
@@ -130,7 +130,7 @@ class VG(object):
raise ValueError('pvobj must be of type aif.disk.lvm.PV')
pvobj.prepare()
self.pvs.append(pvobj)
return()
return(None)
def create(self):
if not self.pvs:
@@ -149,7 +149,7 @@ class VG(object):
pv._parseMeta()
self.created = True
self.updateInfo()
return()
return(None)
def createLV(self, lv_xml = None):
if not self.created:
@@ -165,21 +165,21 @@ class VG(object):
lv.create()
# self.lvs.append(lv)
self.updateInfo()
return()
return(None)
def start(self):
_BlockDev.lvm.vgactivate(self.name)
self.updateInfo()
return()
return(None)
def stop(self):
_BlockDev.lvm.vgdeactivate(self.name)
self.updateInfo()
return()
return(None)
def updateInfo(self):
if not self.created:
return()
return(None)
_info = _BlockDev.lvm.vginfo(self.name)
# TODO: parity with lvm_fallback.VG.updateInfo
# key names currently (probably) don't match and need to confirm the information's all present
@@ -192,7 +192,7 @@ class VG(object):
v = getattr(_info, k)
info[k] = v
self.info = info
return()
return(None)
class LV(object):
@@ -247,7 +247,7 @@ class LV(object):
target = 'B'))
if self.size >= _sizes['total']:
self.size = 0
return()
return(None)
def create(self):
if not self.pvs:
@@ -268,7 +268,7 @@ class LV(object):
self.created = True
self.updateInfo()
self.vg.updateInfo()
return()
return(None)
def start(self):
_BlockDev.lvm.lvactivate(self.vg.name,
@@ -276,18 +276,18 @@ class LV(object):
True,
None)
self.updateInfo()
return()
return(None)
def stop(self):
_BlockDev.lvm.lvdeactivate(self.vg.name,
self.name,
None)
self.updateInfo()
return()
return(None)
def updateInfo(self):
if not self.created:
return()
return(None)
_info = _BlockDev.lvm.lvinfo(self.vg.name, self.name)
# TODO: parity with lvm_fallback.LV.updateInfo
# key names currently (probably) don't match and need to confirm the information's all present
@@ -300,4 +300,4 @@ class LV(object):
v = getattr(_info, k)
info[k] = v
self.info = info
return()
return(None)

View File

@@ -43,7 +43,7 @@ class PV(object):
if _meta.returncode != 0:
self.meta = None
self.is_pooled = False
return()
return(None)
_meta = json.loads(_meta.stdout.decode('utf-8'))['report'][0]['pv'][0]
for k, v in _meta.items():
# We *could* regex this but the pattern would be a little more complex than idea,
@@ -64,7 +64,7 @@ class PV(object):
meta[k] = v
self.meta = meta
self.is_pooled = True
return()
return(None)
def prepare(self):
if not self.meta:
@@ -80,7 +80,7 @@ class PV(object):
self.devpath]
subprocess.run(cmd)
self._parseMeta()
return()
return(None)
class VG(object):
@@ -113,7 +113,7 @@ class VG(object):
raise ValueError('pvobj must be of type aif.disk.lvm.PV')
pvobj.prepare()
self.pvs.append(pvobj)
return()
return(None)
def create(self):
if not self.pvs:
@@ -129,7 +129,7 @@ class VG(object):
pv._parseMeta()
self.created = True
self.updateInfo()
return()
return(None)
def createLV(self, lv_xml = None):
if not self.created:
@@ -145,7 +145,7 @@ class VG(object):
lv.create()
# self.lvs.append(lv)
self.updateInfo()
return()
return(None)
def start(self):
cmd = ['vgchange',
@@ -154,7 +154,7 @@ class VG(object):
self.name]
subprocess.run(cmd)
self.updateInfo()
return()
return(None)
def stop(self):
cmd = ['vgchange',
@@ -163,7 +163,7 @@ class VG(object):
self.name]
subprocess.run(cmd)
self.updateInfo()
return()
return(None)
def updateInfo(self):
info = {}
@@ -178,7 +178,7 @@ class VG(object):
if _info.returncode != 0:
self.info = None
self.created = False
return()
return(None)
_info = json.loads(_info.stdout.decode('utf-8'))['report'][0]['vg'][0]
for k, v in _info.items():
# ints
@@ -196,7 +196,7 @@ class VG(object):
v = None
info[k] = v
self.info = info
return()
return(None)
class LV(object):
@@ -250,7 +250,7 @@ class LV(object):
target = 'B'))
if self.size >= _sizes['total']:
self.size = 0
return()
return(None)
def create(self):
if not self.pvs:
@@ -267,7 +267,7 @@ class LV(object):
self.created = True
self.updateInfo()
self.vg.updateInfo()
return()
return(None)
def start(self):
cmd = ['lvchange',
@@ -276,7 +276,7 @@ class LV(object):
self.qualified_name]
subprocess.run(cmd)
self.updateInfo()
return()
return(None)
def stop(self):
cmd = ['lvchange',
@@ -285,7 +285,7 @@ class LV(object):
self.qualified_name]
subprocess.run(cmd)
self.updateInfo()
return()
return(None)
def updateInfo(self):
info = {}
@@ -300,7 +300,7 @@ class LV(object):
if _info.returncode != 0:
self.info = None
self.created = False
return()
return(None)
_info = json.loads(_info.stdout.decode('utf-8'))['report'][0]['vg'][0]
for k, v in _info.items():
# ints
@@ -330,4 +330,4 @@ class LV(object):
v = None
info[k] = v
self.info = info
return()
return(None)

View File

@@ -44,7 +44,7 @@ class Member(object):
except _BlockDev.MDRaidError:
self.is_superblocked = False
self.superblock = None
return()
return(None)
for k in dir(_block):
if k.startswith('_'):
continue
@@ -60,7 +60,7 @@ class Member(object):
block[k] = v
self.superblock = block
self.is_superblocked = True
return()
return(None)
def prepare(self):
try:
@@ -69,7 +69,7 @@ class Member(object):
pass
_BlockDev.md.destroy(self.devpath)
self._parseDeviceBlock()
return()
return(None)
class Array(object):
@@ -121,7 +121,7 @@ class Array(object):
raise ValueError('memberobj must be of type aif.disk.mdadm.Member')
memberobj.prepare()
self.members.append(memberobj)
return()
return(None)
def create(self):
if not self.members:
@@ -147,7 +147,7 @@ class Array(object):
self.writeConf()
self.devpath = self.info['device']
self.state = 'new'
return()
return(None)
def start(self, scan = False):
if not any((self.members, self.devpath)):
@@ -162,12 +162,12 @@ class Array(object):
True,
None)
self.state = 'assembled'
return()
return(None)
def stop(self):
_BlockDev.md.deactivate(self.name)
self.state = 'disassembled'
return()
return(None)
def updateStatus(self):
_status = _BlockDev.md.detail(self.name)
@@ -189,7 +189,7 @@ class Array(object):
v = uuid.UUID(hex = v)
info[k] = v
self.info = info
return()
return(None)
def writeConf(self, conf = '/etc/mdadm.conf'):
conf = os.path.realpath(conf)
@@ -214,4 +214,4 @@ class Array(object):
if nodev:
with open(conf, 'a') as fh:
fh.write('{0}\n'.format(arrayinfo))
return()
return(None)

View File

@@ -49,7 +49,7 @@ class Member(object):
# TODO: logging?
self.is_superblocked = False
self.superblock = None
return()
return(None)
block = {}
for idx, line in enumerate(super.stdout.decode('utf-8').splitlines()):
line = line.strip()
@@ -116,7 +116,7 @@ class Member(object):
block[k] = v
self.superblock = block
self.is_superblocked = True
return()
return(None)
def prepare(self):
if self.is_superblocked:
@@ -124,7 +124,7 @@ class Member(object):
subprocess.run(['mdadm', '--misc', '--zero-superblock', self.devpath])
self.is_superblocked = False
self._parseDeviceBlock()
return()
return(None)
class Array(object):
@@ -174,7 +174,7 @@ class Array(object):
raise ValueError('memberobj must be of type aif.disk.mdadm.Member')
memberobj.prepare()
self.members.append(memberobj)
return()
return(None)
def create(self):
if not self.members:
@@ -199,7 +199,7 @@ class Array(object):
self.updateStatus()
self.writeConf()
self.state = 'new'
return()
return(None)
def start(self, scan = False):
if not any((self.members, self.devpath)):
@@ -214,13 +214,13 @@ class Array(object):
subprocess.run(cmd)
self.updateStatus()
self.state = 'assembled'
return()
return(None)
def stop(self):
# TODO: logging
subprocess.run(['mdadm', '--stop', self.devpath])
self.state = 'disassembled'
return()
return(None)
def updateStatus(self):
_info = mdstat.parse()
@@ -228,7 +228,7 @@ class Array(object):
if k != self.name:
del(_info['devices'][k])
self.info = copy.deepcopy(_info)
return()
return(None)
def writeConf(self, conf = '/etc/mdadm.conf'):
conf = os.path.realpath(conf)
@@ -250,4 +250,4 @@ class Array(object):
if nodev:
with open(conf, 'a') as fh:
fh.write('{0}\n'.format(arrayinfo))
return()
return(None)