diff --git a/oxi/interfaces/base.py b/oxi/interfaces/base.py index 6955b72..29efea8 100644 --- a/oxi/interfaces/base.py +++ b/oxi/interfaces/base.py @@ -28,7 +28,7 @@ class BaseDevice(ABC): @abstractmethod def vlans(self) -> list["Vlans"]: - f""" + """ Parse VLAN configuration from self._raw['vlans']. Expected raw structure: @@ -45,7 +45,7 @@ class BaseDevice(ABC): @abstractmethod def interfaces(self) -> list["Interfaces"]: - f""" + """ Parse Interface configuration from self._raw['interfaces']. Expected raw structure: @@ -70,6 +70,7 @@ class BaseDevice(ABC): ... def _load_template(self): + """Подгрузка темплейтов из папки models/templates""" path = Path(__file__).parent / "models" / "templates" / self.template if not path.exists(): print("-" * 12) @@ -96,6 +97,7 @@ class BaseDevice(ABC): ) def _run_ttp(self) -> dict: + """ Основной парсер """ p = ttp(data=self.config, template=self._loaded_template) p.parse() raw: dict = p.result()[0][0] diff --git a/oxi/interfaces/contract.py b/oxi/interfaces/contract.py index fdd7f1e..21f0f9b 100644 --- a/oxi/interfaces/contract.py +++ b/oxi/interfaces/contract.py @@ -1,5 +1,5 @@ from ipaddress import IPv4Address -from pydantic import BaseModel, Field +from pydantic import BaseModel, ConfigDict, Field class Interfaces(BaseModel): @@ -16,6 +16,8 @@ class System(BaseModel): class Vlans(BaseModel): + model_config = ConfigDict(populate_by_name=True) + vlan_id: int name: str | None = Field(default=None, alias="description") diff --git a/oxi/interfaces/models/keenetic.py b/oxi/interfaces/models/keenetic.py new file mode 100644 index 0000000..42df4f4 --- /dev/null +++ b/oxi/interfaces/models/keenetic.py @@ -0,0 +1,20 @@ +from oxi.interfaces import register_parser +from oxi.interfaces.base import BaseDevice + + +@register_parser(["NDMS", "keenetic", "KeeneticOS"]) +class Keenetic(BaseDevice): + template = "keenetic.ttp" + + def system(self): ... + + def interfaces(self): ... + + def vlans(self): ... + + +if __name__ == "__main__": + with open("../../test2.txt") as file: + data = file.read() + mikr = Keenetic(data) + print(mikr.parse().json()) diff --git a/oxi/interfaces/models/mikrotik.py b/oxi/interfaces/models/mikrotik.py index 721905d..4a49095 100644 --- a/oxi/interfaces/models/mikrotik.py +++ b/oxi/interfaces/models/mikrotik.py @@ -12,11 +12,9 @@ class Mikrotik(BaseDevice): return System(**systems) def interfaces(self) -> "Interfaces": - print(self._raw.get("interfaces")) return [Interfaces(**item) for item in self._raw.get("interfaces")] def vlans(self) -> list["Vlans"]: - print(self._raw.get("vlans")) return [Vlans(**item) for item in self._raw.get("vlans")] @@ -24,5 +22,4 @@ if __name__ == "__main__": with open("../../test.txt") as file: data = file.read() mikr = Mikrotik(data) - mikr.parse() - print(mikr) + print(mikr.parse().json())