PlatSim_Genova/TestEnvironment/env/site-packages/serial/abc/model.py
2026-01-30 16:38:33 +01:00

251 lines
6.0 KiB
Python

# Tell the linters what's up:
# pylint:disable=wrong-import-position,consider-using-enumerate,useless-object-inheritance
# mccabe:options:max-complexity=999
from __future__ import nested_scopes, generators, division, absolute_import, with_statement, \
print_function, unicode_literals
from serial.utilities.compatibility import backport
backport()
from abc import ABCMeta, abstractmethod
# We need ABCs to inherit from `ABC` in python 3x, but in python 2x ABC is absent and we need classes to inherit from
# `object` in order to be new-style classes
try:
from abc import ABC
except ImportError:
ABC = object
from ..utilities import collections
class Model(ABC):
__metaclass__ = ABCMeta
_format = None # type: Optional[str]
_meta = None # type: Optional[meta.Object]
_hooks = None # type: Optional[hooks.Object]
@abstractmethod
def __init__(self):
self._format = None # type: Optional[str]
self._meta = None # type: Optional[meta.Meta]
self._hooks = None # type: Optional[hooks.Hooks]
self._url = None # type: Optional[str]
self._xpath = None # type: Optional[str]
self._pointer = None # type: Optional[str]
@classmethod
def __subclasscheck__(cls, subclass):
# type: (object) -> bool
"""
Check a subclass to ensure it has required properties
"""
if cls is subclass or type.__subclasscheck__(cls, subclass):
return True
for attribute in (
'_format',
'_meta',
'_hooks'
):
if not hasattr(subclass, attribute):
return False
return True
def __instancecheck__(self, instance):
# type: (object) -> bool
"""
Check an instance of a subclass to ensure it has required properties
"""
for attribute in (
'_format',
'_meta',
'_hooks',
'_url',
'_xpath',
'_pointer'
):
if not hasattr(self, attribute):
return False
# Perform any instance checks needed for our superclass(es)
try:
return super().__instancecheck__(instance)
except AttributeError: # There is no further instance-checking to perform
return True
@abstractmethod
def _marshal(self):
# type: (...) -> Union[collections.OrderedDict, list]
pass
@abstractmethod
def _validate(self, raise_errors=True):
# type: (bool) -> None
pass
@abstractmethod
def __str__(self):
# type: (...) -> str
pass
@abstractmethod
def __repr__(self):
# type: (...) -> str
pass
@abstractmethod
def __copy__(self):
# type: (...) -> Object
pass
@abstractmethod
def __deepcopy__(self, memo):
# type: (Optional[dict]) -> Object
pass
@abstractmethod
def __eq__(self, other):
# type: (Any) -> bool
pass
@abstractmethod
def __ne__(self, other):
# type: (Any) -> bool
pass
class Object(Model):
@abstractmethod
def _marshal(self):
# type: (...) -> collections.OrderedDict
pass
@abstractmethod
def __setitem__(self, key, value):
# type: (str, Any) -> None
pass
@abstractmethod
def __getitem__(self, key):
# type: (str, Any) -> None
pass
@abstractmethod
def __setattr__(self, property_name, value):
# type: (Object, str, Any) -> None
pass
@abstractmethod
def __getattr__(self, key):
# type: (str) -> Any
pass
@abstractmethod
def __delattr__(self, key):
# type: (str) -> None
pass
class Dictionary(Model):
@classmethod
def __subclasscheck__(cls, subclass):
# type: (object) -> bool
"""
Verify inheritance
"""
if cls is subclass or type.__subclasscheck__(cls, subclass):
return True
if not issubclass(subclass, collections.OrderedDict):
return False
# Perform any subclass checks needed for our superclass(es)
return super().__subclasscheck__(subclass)
def __instancecheck__(self, instance):
# type: (object) -> bool
"""
Check an instance of a subclass to ensure it has required properties
"""
if not isinstance(self, collections.OrderedDict):
return False
# Perform any instance checks needed for our superclass(es)
return super().__instancecheck__(instance)
@abstractmethod
def _marshal(self):
# type: (...) -> collections.OrderedDict
pass
@abstractmethod
def __setitem__(self, key, value):
# type: (str, Any) -> None
pass
def keys(self):
# type: (...) -> Iterable[str]
pass
def values(self):
# type: (...) -> Iterable[Any]
pass
class Array(Model):
@classmethod
def __subclasscheck__(cls, subclass):
# type: (object) -> bool
"""
Verify inheritance
"""
if cls is subclass or type.__subclasscheck__(cls, subclass):
return True
if not issubclass(subclass, list):
return False
# Perform any subclass checks needed for our superclass(es)
return super().__subclasscheck__(subclass)
def __instancecheck__(self, instance):
# type: (object) -> bool
"""
Check an instance of a subclass to ensure it has required properties
"""
if not isinstance(self, list):
return False
# Perform any instance checks needed for our superclass(es)
return super().__instancecheck__(instance)
@abstractmethod
def _marshal(self):
# type: (...) -> list
pass
@abstractmethod
def __setitem__(self, key, value):
# type: (str, Any) -> None
pass
@abstractmethod
def append(self, value):
# type: (Any) -> None
pass