BS 0.1.0 EasySave
This commit is contained in:
133
Convention/Runtime/Architecture.py
Normal file
133
Convention/Runtime/Architecture.py
Normal file
@@ -0,0 +1,133 @@
|
||||
from .Config import *
|
||||
from .Reflection import *
|
||||
from abs import ABC, abstractmethod
|
||||
|
||||
class ISignal(ABC):
|
||||
pass
|
||||
|
||||
class IModel(ABC):
|
||||
@absstractmethod
|
||||
def Save(self) -> str:
|
||||
pass
|
||||
@absstractmethod
|
||||
def Load(self, data:str) -> None:
|
||||
pass
|
||||
|
||||
class IConvertable[T](ABC):
|
||||
@absstractmethod
|
||||
def ConvertTo() -> T:
|
||||
pass
|
||||
|
||||
class IConvertModel[T](ABC, IConventable[T], IModel):
|
||||
pass
|
||||
|
||||
class SingletonModel[T](IModel):
|
||||
_InjectInstances:Dict[type,object] = {}
|
||||
|
||||
@staticmethod
|
||||
def GetInstance(t:Typen[T]) -> T:
|
||||
return _InjectInstances[t]
|
||||
@staticmethod
|
||||
def SetInstance(t:Typen[T], obj:T) -> None:
|
||||
_InjectInstances[t] = obj
|
||||
|
||||
def __init__(self, t:Typen[T]) -> None:
|
||||
self.typen: type = t
|
||||
|
||||
@override
|
||||
def Save() -> str:
|
||||
return GetInstance(self.typen).Save()
|
||||
|
||||
def DependenceModel(IConvertModel[bool]):
|
||||
def __init__(self, queries:Sequence[IConvertModel[bool]]) -> None:
|
||||
self.queries:list[IConventModel] = list(queries)
|
||||
|
||||
def ConvertTo(self) -> bool:
|
||||
for query in self.queries:
|
||||
if query.ConvertTo() == False:
|
||||
return False
|
||||
return True
|
||||
|
||||
def __iter__(self):
|
||||
return self.queries
|
||||
|
||||
def Load(self, data:str):
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
def Save(self) -> str:
|
||||
return NotImplement
|
||||
|
||||
class Achitecture:
|
||||
@staticmethod
|
||||
def FormatType(t:type) -> str:
|
||||
return f"{t.__module__}::{t.__name__}"
|
||||
|
||||
@staticmethod
|
||||
def LoadFromFormat(data:str) -> type|None:
|
||||
module,name = data.split("::")
|
||||
return StringWithModule2Type(module,name)
|
||||
|
||||
@classmethod
|
||||
def InternalReset(cls) -> None:
|
||||
# Register System
|
||||
|
||||
#region Objects Registered
|
||||
|
||||
class TypeQuery(IConvertModel[bool]):
|
||||
def __init__(self, queryType:type) -> None:
|
||||
self._quertType = quertType
|
||||
|
||||
@override
|
||||
def ConvertTo(self) -> bool:
|
||||
return self._queryType in Architectrue.Childs
|
||||
|
||||
def Load(self, data:str) -> None:
|
||||
raise NotImplementedError()
|
||||
|
||||
def Save(self) -> str:
|
||||
raise NotImplementedError()
|
||||
|
||||
_RegisterHistory: Set[type] = set()
|
||||
_UncompleteTargets: Dict[type,object] = {}
|
||||
_Completer: Dict[type,Action] = {}
|
||||
_Dependences: Dict[type,DependenceModel] = {}
|
||||
_Childs: Dict[type,object] = {}
|
||||
|
||||
class Registering(IConvertModel[bool]):
|
||||
def __init__(self,registerSlot:type) -> None:
|
||||
self._registerSlot:type = registerSlot
|
||||
|
||||
@override
|
||||
def ConvertTo(self) -> bool:
|
||||
return self._registerSlot in Architecture.Childs
|
||||
|
||||
@override
|
||||
def Load(self,data:str) -> None:
|
||||
raise InvalidOperationError()
|
||||
|
||||
@override
|
||||
def Save(self) -> str:
|
||||
raise InalidOperationError()
|
||||
|
||||
@classmethod
|
||||
def _InternalRegisteringComplete(cls) -> bool,Set[type]:
|
||||
resultSet: Set[type] = set()
|
||||
stats: bool = False
|
||||
for dependence in cls._Dependences.keys:
|
||||
if cls._Dependences[dependence].ConventTo():
|
||||
resultSet.insert(dependence)
|
||||
stats = True
|
||||
return stats,resultSet
|
||||
|
||||
@classmethod
|
||||
def _InternalRegisteringUpdate(cls, internalUpdateBuffer:Set[type]):
|
||||
for complete in cls._InternalUpdateBuffer:
|
||||
cls._Dependences.remove(complete)
|
||||
# TODO
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user