mirror of
https://github.com/checktheroads/hyperglass
synced 2024-05-11 05:55:08 +00:00
49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
"""Base Connection Class."""
|
|
|
|
# Standard Library
|
|
import typing as t
|
|
from abc import ABC, abstractmethod
|
|
|
|
# Project
|
|
from hyperglass.types import Series
|
|
from hyperglass.plugins import OutputPluginManager
|
|
|
|
# Local
|
|
from ._construct import Construct
|
|
|
|
if t.TYPE_CHECKING:
|
|
# Project
|
|
from hyperglass.models.api import Query
|
|
from hyperglass.models.data import OutputDataModel
|
|
from hyperglass.compat._sshtunnel import SSHTunnelForwarder
|
|
from hyperglass.models.config.devices import Device
|
|
|
|
|
|
class Connection(ABC):
|
|
"""Base transport driver class."""
|
|
|
|
def __init__(self, device: "Device", query_data: "Query") -> None:
|
|
"""Initialize connection to device."""
|
|
self.device = device
|
|
self.query_data = query_data
|
|
self.query_type = self.query_data.query_type
|
|
self.query_target = self.query_data.query_target
|
|
self._query = Construct(device=self.device, query=self.query_data)
|
|
self.query = self._query.queries()
|
|
self.plugin_manager = OutputPluginManager()
|
|
|
|
@abstractmethod
|
|
def setup_proxy(self: "Connection") -> "SSHTunnelForwarder":
|
|
"""Return a preconfigured sshtunnel.SSHTunnelForwarder instance."""
|
|
pass
|
|
|
|
async def response(self, output: Series[str]) -> t.Union["OutputDataModel", str]:
|
|
"""Send output through common parsers."""
|
|
|
|
response = self.plugin_manager.execute(output=output, query=self.query_data)
|
|
|
|
if response is None:
|
|
response = ()
|
|
|
|
return response
|