def _get_driver( cls, platform: str, variant: Optional[str] ) -> Tuple[Union[Type[AsyncNetworkDriver], Type[AsyncGenericDriver]], Dict[ str, Any]]: """ Parent get driver method for sync Scrapli Args: platform: name of target platform; i.e. `cisco_iosxe`, `arista_eos`, etc. variant: name of the target platform variant Returns: NetworkDriver: final driver class; generally NetworkDriver, but for some community platforms could be GenericDriver, also returns any additional kwargs comming from the community platform (if any) Raises: N/A """ additional_kwargs: Dict[str, Any] = {} final_driver: Union[Type[AsyncGenericDriver], Type[AsyncNetworkDriver]] if platform in cls.CORE_PLATFORM_MAP: final_driver = cls.CORE_PLATFORM_MAP[platform] msg = f"Driver '{final_driver}' selected from scrapli core drivers" else: final_driver, additional_kwargs = cls._get_community_driver( community_platform_name=platform, variant=variant) msg = ( f"Driver '{final_driver}' selected from scrapli community platforms, with the " f"following platform arguments: '{additional_kwargs}'") logger.info(msg) return final_driver, additional_kwargs
def ttp_parse(template: Union[str, TextIOWrapper], output: str) -> Union[List[Any], Dict[str, Any]]: """ Parse output with TTP, try to return structured output Args: template: TextIOWrapper or string path to template to use to parse data output: unstructured output from device to parse Returns: output: structured data Raises: N/A """ try: ttp = getattr(importlib.import_module(name="ttp"), "ttp") except ModuleNotFoundError as exc: title = "Optional Extra Not Installed!" message = ( "Optional extra 'ttp' is not installed!\n" f"To resolve this issue, install '{exc.name}'. You can do this in one of the following" " ways:\n" "1: 'pip install -r requirements-ttp.txt'\n" "2: 'pip install scrapli[ttp]'") user_warning(title=title, message=message) return [] if not isinstance(template, (str, TextIOWrapper)): logger.info( f"invalid template `{template}`; template should be string or TextIOWrapper" ) return [] ttp_parser_template_name = "scrapli_ttp_parse" ttp_parser = ttp() ttp_parser.add_template(template=template, template_name=ttp_parser_template_name) ttp_parser.add_input(data=output, template_name=ttp_parser_template_name) ttp_parser.parse() ttp_result: Dict[str, List[Any]] = ttp_parser.result(structure="dictionary") return ttp_result[ttp_parser_template_name]