dev #3

Merged
gitark merged 84 commits from dev into main 2026-06-12 16:00:25 +03:00
4 changed files with 28 additions and 7 deletions
Showing only changes of commit a41cb1f7ec - Show all commits

View File

@@ -28,7 +28,7 @@ class BaseDevice(ABC):
@abstractmethod @abstractmethod
def vlans(self) -> list["Vlans"]: def vlans(self) -> list["Vlans"]:
f""" """
Parse VLAN configuration from self._raw['vlans']. Parse VLAN configuration from self._raw['vlans'].
Expected raw structure: Expected raw structure:
@@ -45,7 +45,7 @@ class BaseDevice(ABC):
@abstractmethod @abstractmethod
def interfaces(self) -> list["Interfaces"]: def interfaces(self) -> list["Interfaces"]:
f""" """
Parse Interface configuration from self._raw['interfaces']. Parse Interface configuration from self._raw['interfaces'].
Expected raw structure: Expected raw structure:
@@ -70,6 +70,7 @@ class BaseDevice(ABC):
... ...
def _load_template(self): def _load_template(self):
"""Подгрузка темплейтов из папки models/templates"""
path = Path(__file__).parent / "models" / "templates" / self.template path = Path(__file__).parent / "models" / "templates" / self.template
if not path.exists(): if not path.exists():
print("-" * 12) print("-" * 12)
@@ -96,6 +97,7 @@ class BaseDevice(ABC):
) )
def _run_ttp(self) -> dict: def _run_ttp(self) -> dict:
""" Основной парсер """
p = ttp(data=self.config, template=self._loaded_template) p = ttp(data=self.config, template=self._loaded_template)
p.parse() p.parse()
raw: dict = p.result()[0][0] raw: dict = p.result()[0][0]

View File

@@ -1,5 +1,5 @@
from ipaddress import IPv4Address from ipaddress import IPv4Address
from pydantic import BaseModel, Field from pydantic import BaseModel, ConfigDict, Field
class Interfaces(BaseModel): class Interfaces(BaseModel):
@@ -16,6 +16,8 @@ class System(BaseModel):
class Vlans(BaseModel): class Vlans(BaseModel):
model_config = ConfigDict(populate_by_name=True)
vlan_id: int vlan_id: int
name: str | None = Field(default=None, alias="description") name: str | None = Field(default=None, alias="description")

View File

@@ -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())

View File

@@ -12,11 +12,9 @@ class Mikrotik(BaseDevice):
return System(**systems) return System(**systems)
def interfaces(self) -> "Interfaces": def interfaces(self) -> "Interfaces":
print(self._raw.get("interfaces"))
return [Interfaces(**item) for item in self._raw.get("interfaces")] return [Interfaces(**item) for item in self._raw.get("interfaces")]
def vlans(self) -> list["Vlans"]: def vlans(self) -> list["Vlans"]:
print(self._raw.get("vlans"))
return [Vlans(**item) for item in 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: with open("../../test.txt") as file:
data = file.read() data = file.read()
mikr = Mikrotik(data) mikr = Mikrotik(data)
mikr.parse() print(mikr.parse().json())
print(mikr)