basic msd rw api

This commit is contained in:
Maxim Devaev 2022-07-23 04:41:54 +03:00
parent 06bf0fcd17
commit 2eef9bd263
5 changed files with 45 additions and 5 deletions

View File

@ -70,6 +70,7 @@ class MsdApi:
for (param, key, validator) in [ for (param, key, validator) in [
("image", "name", (lambda arg: str(arg).strip() and valid_msd_image_name(arg))), ("image", "name", (lambda arg: str(arg).strip() and valid_msd_image_name(arg))),
("cdrom", "cdrom", valid_bool), ("cdrom", "cdrom", valid_bool),
("rw", "rw", valid_bool),
] ]
if request.query.get(param) is not None if request.query.get(param) is not None
} }

View File

@ -93,7 +93,12 @@ class MsdMultiNotSupported(MsdOperationError):
class MsdCdromNotSupported(MsdOperationError): class MsdCdromNotSupported(MsdOperationError):
def __init__(self) -> None: def __init__(self) -> None:
super().__init__("This MSD does not support CD-ROM emulation") super().__init__("This MSD does not support CD-ROM switching")
class MsdRwNotSupported(MsdOperationError):
def __init__(self) -> None:
super().__init__("This MSD does not support RW switching")
# ===== # =====
@ -114,7 +119,13 @@ class BaseMsd(BasePlugin):
# ===== # =====
async def set_params(self, name: Optional[str]=None, cdrom: Optional[bool]=None) -> None: async def set_params(
self,
name: Optional[str]=None,
cdrom: Optional[bool]=None,
rw: Optional[bool]=None,
) -> None:
raise NotImplementedError() raise NotImplementedError()
async def set_connected(self, connected: bool) -> None: async def set_connected(self, connected: bool) -> None:

View File

@ -50,6 +50,7 @@ class Plugin(BaseMsd):
"features": { "features": {
"multi": False, "multi": False,
"cdrom": False, "cdrom": False,
"rw": False,
}, },
} }
@ -63,7 +64,13 @@ class Plugin(BaseMsd):
# ===== # =====
async def set_params(self, name: Optional[str]=None, cdrom: Optional[bool]=None) -> None: async def set_params(
self,
name: Optional[str]=None,
cdrom: Optional[bool]=None,
rw: Optional[bool]=None,
) -> None:
raise MsdDisabledError() raise MsdDisabledError()
async def set_connected(self, connected: bool) -> None: async def set_connected(self, connected: bool) -> None:

View File

@ -56,6 +56,7 @@ from .. import MsdDisconnectedError
from .. import MsdImageNotSelected from .. import MsdImageNotSelected
from .. import MsdUnknownImageError from .. import MsdUnknownImageError
from .. import MsdImageExistsError from .. import MsdImageExistsError
from .. import MsdRwNotSupported
from .. import BaseMsd from .. import BaseMsd
from .. import MsdImageWriter from .. import MsdImageWriter
@ -222,6 +223,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
"features": { "features": {
"multi": True, "multi": True,
"cdrom": True, "cdrom": True,
"rw": False,
}, },
} }
@ -254,8 +256,17 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
# ===== # =====
@aiotools.atomic @aiotools.atomic
async def set_params(self, name: Optional[str]=None, cdrom: Optional[bool]=None) -> None: async def set_params(
self,
name: Optional[str]=None,
cdrom: Optional[bool]=None,
rw: Optional[bool]=None,
) -> None:
async with self.__state.busy(): async with self.__state.busy():
if rw is not None:
raise MsdRwNotSupported()
assert self.__state.storage assert self.__state.storage
assert self.__state.vd assert self.__state.vd

View File

@ -49,6 +49,7 @@ from .. import MsdConnectedError
from .. import MsdDisconnectedError from .. import MsdDisconnectedError
from .. import MsdMultiNotSupported from .. import MsdMultiNotSupported
from .. import MsdCdromNotSupported from .. import MsdCdromNotSupported
from .. import MsdRwNotSupported
from .. import BaseMsd from .. import BaseMsd
from .. import MsdImageWriter from .. import MsdImageWriter
@ -141,6 +142,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
"features": { "features": {
"multi": False, "multi": False,
"cdrom": False, "cdrom": False,
"rw": False,
}, },
} }
@ -178,12 +180,20 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
# ===== # =====
@aiotools.atomic @aiotools.atomic
async def set_params(self, name: Optional[str]=None, cdrom: Optional[bool]=None) -> None: async def set_params(
self,
name: Optional[str]=None,
cdrom: Optional[bool]=None,
rw: Optional[bool]=None,
) -> None:
async with self.__working(): async with self.__working():
if name is not None: if name is not None:
raise MsdMultiNotSupported() raise MsdMultiNotSupported()
if cdrom is not None: if cdrom is not None:
raise MsdCdromNotSupported() raise MsdCdromNotSupported()
if rw is not None:
raise MsdRwNotSupported()
@aiotools.atomic @aiotools.atomic
async def set_connected(self, connected: bool) -> None: async def set_connected(self, connected: bool) -> None: