added code to initialize db with models and recodres
This commit is contained in:
@@ -1,10 +1,15 @@
|
||||
import importlib
|
||||
import inspect
|
||||
import pkgutil
|
||||
import sys
|
||||
import telnetlib
|
||||
from abc import ABC, abstractmethod
|
||||
|
||||
defined_recorder_adapters = None
|
||||
|
||||
# monkey patching of telnet lib
|
||||
from pprint import pprint
|
||||
|
||||
original_read_until = telnetlib.Telnet.read_until
|
||||
original_write = telnetlib.Telnet.write
|
||||
|
||||
@@ -92,6 +97,16 @@ class TelnetAdapter(ABC):
|
||||
|
||||
|
||||
class RecorderAdapter:
|
||||
def __init__(self, address: str, user: str, password: str):
|
||||
self.address = address
|
||||
self.user = user
|
||||
self.password = password
|
||||
|
||||
@classmethod
|
||||
@abstractmethod
|
||||
def get_recorder_params(cls) -> dict:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def _get_name(self):
|
||||
pass
|
||||
@@ -108,13 +123,15 @@ class RecorderAdapter:
|
||||
pass
|
||||
|
||||
|
||||
def get_defined_recorder_adapters():
|
||||
def get_defined_recorder_adapters() -> list:
|
||||
rec_adapters_module = importlib.import_module(".recorder_adapters", package='backend')
|
||||
rec_adapter_class = getattr(rec_adapters_module, "RecorderAdapter") # needed, otherwise subclass check may fail
|
||||
models = []
|
||||
found_packages = list(pkgutil.iter_modules(sys.modules[__name__].__path__))
|
||||
found_packages = list(pkgutil.iter_modules(rec_adapters_module.__path__))
|
||||
for f_p in found_packages:
|
||||
importer = f_p[0]
|
||||
rec_model_module = importer.find_module(f_p[1]).load_module(f_p[1])
|
||||
rec_model = {'id': f_p[1], 'name': f_p[1], 'commands': {}}
|
||||
rec_model = {'id': f_p[1], 'name': f_p[1], 'commands': {}, 'path': rec_model_module.__file__}
|
||||
if hasattr(rec_model_module, 'RECORDER_MODEL_NAME'):
|
||||
rec_model['name'] = rec_model_module.RECORDER_MODEL_NAME
|
||||
if hasattr(rec_model_module, 'REQUIRES_USER'):
|
||||
@@ -122,7 +139,9 @@ def get_defined_recorder_adapters():
|
||||
if hasattr(rec_model_module, 'REQUIRES_PW'):
|
||||
rec_model['requires_password'] = rec_model_module.REQUIRES_PW
|
||||
for name, obj in inspect.getmembers(rec_model_module, inspect.isclass):
|
||||
if issubclass(obj, RecorderAdapter):
|
||||
if issubclass(obj, rec_adapter_class) and name != "RecorderAdapter":
|
||||
rec_model['id'] = rec_model['id'] + "." + obj.__name__
|
||||
rec_model['class'] = obj
|
||||
commands = {}
|
||||
for method_name, method in inspect.getmembers(obj, predicate=inspect.isfunction):
|
||||
if len(method_name) > 0 and "_" == method_name[0]:
|
||||
@@ -141,3 +160,19 @@ def get_defined_recorder_adapters():
|
||||
rec_model["commands"] = commands
|
||||
models.append(rec_model)
|
||||
return models
|
||||
|
||||
|
||||
def get_recorder_adapter_by_id(id: str, **kwargs):
|
||||
global defined_recorder_adapters
|
||||
if defined_recorder_adapters is None:
|
||||
defined_recorder_adapters = get_defined_recorder_adapters()
|
||||
for rec_adapter in defined_recorder_adapters:
|
||||
if id in rec_adapter.get('id', '').split("."):
|
||||
return rec_adapter['class'](**kwargs)
|
||||
return None
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(get_defined_recorder_adapters())
|
||||
get_recorder_adapter_by_id('SMP35x', address="172.22.246.207", password="123mzsmp")
|
||||
exit()
|
||||
|
||||
Reference in New Issue
Block a user