introduce DeviceAction enum and supports_action methods
This commit is contained in:
parent
adceae61f9
commit
77a693c4fc
|
@ -16,6 +16,7 @@
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
import attr
|
import attr
|
||||||
import collections
|
import collections
|
||||||
|
import enum
|
||||||
import glob
|
import glob
|
||||||
import logging
|
import logging
|
||||||
import math
|
import math
|
||||||
|
@ -109,6 +110,7 @@ def asdict(inst):
|
||||||
r[field.name] = v
|
r[field.name] = v
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
|
||||||
# This code is not going to make much sense unless you have read
|
# This code is not going to make much sense unless you have read
|
||||||
# http://curtin.readthedocs.io/en/latest/topics/storage.html. The
|
# http://curtin.readthedocs.io/en/latest/topics/storage.html. The
|
||||||
# Disk, Partition etc classes correspond to entries in curtin's
|
# Disk, Partition etc classes correspond to entries in curtin's
|
||||||
|
@ -116,6 +118,14 @@ def asdict(inst):
|
||||||
# in the FilesystemModel or FilesystemController classes.
|
# in the FilesystemModel or FilesystemController classes.
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceAction(enum.Enum):
|
||||||
|
INFO = enum.auto()
|
||||||
|
EDIT = enum.auto()
|
||||||
|
PARTITION = enum.auto()
|
||||||
|
FORMAT = enum.auto()
|
||||||
|
DELETE = enum.auto()
|
||||||
|
|
||||||
|
|
||||||
@attr.s
|
@attr.s
|
||||||
class _Formattable:
|
class _Formattable:
|
||||||
# Base class for anything that can be formatted and mounted,
|
# Base class for anything that can be formatted and mounted,
|
||||||
|
@ -135,6 +145,9 @@ class _Formattable:
|
||||||
def constructed_device(self):
|
def constructed_device(self):
|
||||||
return self._constructed_device
|
return self._constructed_device
|
||||||
|
|
||||||
|
def supports_action(self, action):
|
||||||
|
return getattr(self, "_supports_" + action.name)
|
||||||
|
|
||||||
|
|
||||||
@attr.s
|
@attr.s
|
||||||
class _Device(_Formattable, ABC):
|
class _Device(_Formattable, ABC):
|
||||||
|
@ -240,6 +253,14 @@ class Disk(_Device):
|
||||||
return self.serial
|
return self.serial
|
||||||
return self.path
|
return self.path
|
||||||
|
|
||||||
|
_supports_INFO = True
|
||||||
|
_supports_EDIT = False
|
||||||
|
_supports_PARTITION = property(lambda self: self.free > 0)
|
||||||
|
_supports_FORMAT = property(
|
||||||
|
lambda self: len(self._partitions) == 0 and
|
||||||
|
self._constructed_device is None)
|
||||||
|
_supports_DELETE = False
|
||||||
|
|
||||||
|
|
||||||
@attr.s
|
@attr.s
|
||||||
class Partition(_Formattable):
|
class Partition(_Formattable):
|
||||||
|
@ -276,6 +297,14 @@ class Partition(_Formattable):
|
||||||
def path(self):
|
def path(self):
|
||||||
return "%s%s" % (self.device.path, self._number)
|
return "%s%s" % (self.device.path, self._number)
|
||||||
|
|
||||||
|
_supports_INFO = False
|
||||||
|
_supports_EDIT = True
|
||||||
|
_supports_PARTITION = False
|
||||||
|
_supports_FORMAT = property(
|
||||||
|
lambda self: self.flag not in ('boot', 'bios_grub') and
|
||||||
|
self._constructed_device is None)
|
||||||
|
_supports_DELETE = _supports_FORMAT
|
||||||
|
|
||||||
|
|
||||||
@attr.s
|
@attr.s
|
||||||
class Filesystem:
|
class Filesystem:
|
||||||
|
@ -309,6 +338,16 @@ class Mount:
|
||||||
device = attr.ib(default=None) # Filesystem
|
device = attr.ib(default=None) # Filesystem
|
||||||
path = attr.ib(default=None)
|
path = attr.ib(default=None)
|
||||||
|
|
||||||
|
def can_delete(self):
|
||||||
|
# Can't delete /boot/efi mount, anything else is fine.
|
||||||
|
if not isinstance(self.device.volume, Partition):
|
||||||
|
# Can't be /boot/efi if volume is not a partition
|
||||||
|
return True
|
||||||
|
if self.device.volume.flag == "boot":
|
||||||
|
# /boot/efi
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def align_up(size, block_size=1 << 20):
|
def align_up(size, block_size=1 << 20):
|
||||||
return (size + block_size - 1) & ~(block_size - 1)
|
return (size + block_size - 1) & ~(block_size - 1)
|
||||||
|
|
Loading…
Reference in New Issue