Source code for ReFreSH.MobileSuit.Core.Services.SuitAppShell
from typing import List, Iterable
from ..SuitContext import SuitContext
from ..SuitMethodShell import SuitMethodShell
from ..SuitObjectShell import ISuitShellCollection, SuitObjectShell
from ..SuitShell import SuitShell
from ...RequestStatus import RequestStatus
[docs]
class SuitAppShell(SuitShell, ISuitShellCollection):
"""SuitShell for Client App."""
def __init__(self):
super().__init__(object, lambda _: None, "SuitClient")
self._members: List[SuitShell] = []
@property
def MemberCount(self) -> int:
"""Inherited from base class."""
return len(self._members)
[docs]
def Members(self) -> Iterable[SuitShell]:
"""Ordered members of this"""
for shell in self._members:
if isinstance(shell, SuitMethodShell):
yield shell
elif isinstance(shell, SuitObjectShell):
for objMember in shell.Members():
yield objMember
else:
yield shell
[docs]
@classmethod
def FromClients(cls, clients: Iterable[SuitShell]) -> "SuitAppShell":
r = cls()
r._members.extend(clients)
return r
[docs]
async def Execute(self, context: SuitContext) -> None:
"""Inherited from base class."""
for shell in self._members:
if not shell.MayExecute(context.Request):
continue
await shell.Execute(context)
if context.RequestStatus != RequestStatus.NotHandled:
return
[docs]
def MayExecute(self, request: List[str]) -> bool:
"""Inherited from base class."""
return any(sys.MayExecute(request) for sys in self._members)