refactoring

This commit is contained in:
Devaev Maxim
2020-12-21 01:59:49 +03:00
parent 2cb210c975
commit 42475809fc
6 changed files with 43 additions and 65 deletions

View File

@@ -109,10 +109,7 @@ class BaseMsd(BasePlugin):
async def set_params(self, name: Optional[str]=None, cdrom: Optional[bool]=None) -> None:
raise NotImplementedError()
async def connect(self) -> None:
raise NotImplementedError()
async def disconnect(self) -> None:
async def set_connected(self, connected: bool) -> None:
raise NotImplementedError()
@contextlib.asynccontextmanager

View File

@@ -66,10 +66,7 @@ class Plugin(BaseMsd):
async def set_params(self, name: Optional[str]=None, cdrom: Optional[bool]=None) -> None:
raise MsdDisabledError()
async def connect(self) -> None:
raise MsdDisabledError()
async def disconnect(self) -> None:
async def set_connected(self, connected: bool) -> None:
raise MsdDisabledError()
@contextlib.asynccontextmanager

View File

@@ -255,36 +255,32 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
self.__state.vd.cdrom = cdrom
@aiotools.atomic
async def connect(self) -> None:
async def set_connected(self, connected: bool) -> None:
async with self.__state.busy():
assert self.__state.vd
if connected:
if self.__state.vd.connected or self.__drive.get_image_path():
raise MsdConnectedError()
if self.__state.vd.image is None:
raise MsdImageNotSelected()
if self.__state.vd.connected or self.__drive.get_image_path():
raise MsdConnectedError()
if self.__state.vd.image is None:
raise MsdImageNotSelected()
assert self.__state.vd.image.in_storage
assert self.__state.vd.image.in_storage
if not os.path.exists(self.__state.vd.image.path):
raise MsdUnknownImageError()
if not os.path.exists(self.__state.vd.image.path):
raise MsdUnknownImageError()
await self.__unlock_drive()
self.__drive.set_cdrom_flag(self.__state.vd.cdrom)
self.__drive.set_image_path(self.__state.vd.image.path)
await self.__unlock_drive()
self.__drive.set_cdrom_flag(self.__state.vd.cdrom)
self.__drive.set_image_path(self.__state.vd.image.path)
self.__state.vd.connected = True
else:
if not (self.__state.vd.connected or self.__drive.get_image_path()):
raise MsdDisconnectedError()
@aiotools.atomic
async def disconnect(self) -> None:
async with self.__state.busy():
assert self.__state.vd
await self.__unlock_drive()
self.__drive.set_image_path("")
if not (self.__state.vd.connected or self.__drive.get_image_path()):
raise MsdDisconnectedError()
await self.__unlock_drive()
self.__drive.set_image_path("")
self.__state.vd.connected = False
self.__state.vd.connected = connected
@contextlib.asynccontextmanager
async def write_image(self, name: str) -> AsyncGenerator[None, None]:

View File

@@ -176,32 +176,26 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
raise MsdCdromNotSupported()
@aiotools.atomic
async def connect(self) -> None:
async def set_connected(self, connected: bool) -> None:
async with self.__working():
async with self.__region:
if self.__connected:
raise MsdConnectedError()
self.__gpio.switch_to_server()
self.__connected = True
get_logger(0).info("MSD switched to Server")
@aiotools.atomic
async def disconnect(self) -> None:
async with self.__working():
async with self.__region:
if not self.__connected:
raise MsdDisconnectedError()
self.__gpio.switch_to_local()
try:
await self.__load_device_info()
except Exception:
if connected:
if self.__connected:
self.__gpio.switch_to_server()
raise
self.__connected = False
get_logger(0).info("MSD switched to KVM: %s", self.__device_info)
raise MsdConnectedError()
self.__gpio.switch_to_server()
get_logger(0).info("MSD switched to Server")
else:
if not self.__connected:
raise MsdDisconnectedError()
self.__gpio.switch_to_local()
try:
await self.__load_device_info()
except Exception:
if self.__connected:
self.__gpio.switch_to_server()
raise
get_logger(0).info("MSD switched to KVM: %s", self.__device_info)
self.__connected = connected
@contextlib.asynccontextmanager
async def write_image(self, name: str) -> AsyncGenerator[None, None]: