52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
|
|
import abc
|
||
|
|
from typing import Callable
|
||
|
|
from enum import IntEnum
|
||
|
|
|
||
|
|
from .opf_functions import OPFFunctions, logging, OPFDialogAnswer
|
||
|
|
from UniTAP.dev.modules.opf.parsers import OPFParametersParser
|
||
|
|
|
||
|
|
|
||
|
|
class WrongOPFFunctionSignature(Exception):
|
||
|
|
pass
|
||
|
|
|
||
|
|
|
||
|
|
class OpfHandlerBase:
|
||
|
|
"""
|
||
|
|
Class `OpfHandlerBase` allows working with functions that helps to do required actions during DUT tests.
|
||
|
|
- Use DSC content library `set_dsc_content_library`. If DSC image does not exist, it will be generated.
|
||
|
|
"""
|
||
|
|
__FUNCTIONS_MAP = {
|
||
|
|
19: OPFFunctions.opf_19_handler,
|
||
|
|
103: OPFFunctions.opf_103_handler,
|
||
|
|
}
|
||
|
|
|
||
|
|
def __init__(self):
|
||
|
|
self.__parser = OPFParametersParser()
|
||
|
|
self.__tx = None
|
||
|
|
self.__rx = None
|
||
|
|
self.__callback_before_handling = {}
|
||
|
|
self._dsc_content_library_path = ""
|
||
|
|
|
||
|
|
def _set_roles(self, role_tx, role_rx):
|
||
|
|
self.__tx = role_tx
|
||
|
|
self.__rx = role_rx
|
||
|
|
|
||
|
|
def set_dsc_content_library(self, dsc_content_library_path: str = ""):
|
||
|
|
"""
|
||
|
|
Set new path to DSC content library folder.
|
||
|
|
If path is empty, content library will not use (all images will be generated into OPF functions without saving).
|
||
|
|
|
||
|
|
Arguments:
|
||
|
|
dsc_content_library_path (`str`) - full path to DSC content library folder.
|
||
|
|
"""
|
||
|
|
self._dsc_content_library_path = dsc_content_library_path
|
||
|
|
|
||
|
|
def handle(self, opf_id, reply_answer, *args) -> OPFDialogAnswer:
|
||
|
|
opf_params = self.__parser.parse(opf_id, *args)
|
||
|
|
|
||
|
|
OPFFunctions.dsc_content_library_path = self._dsc_content_library_path
|
||
|
|
return reply_answer(self.__FUNCTIONS_MAP.get(opf_id)(self.__tx, self.__rx, *opf_params))
|
||
|
|
|
||
|
|
def _is_opf_processed(self, opf_id: int):
|
||
|
|
return self.__FUNCTIONS_MAP.get(opf_id) is not None
|