From 5b8380aeeeb93b952d8efab7a774419ef184a954 Mon Sep 17 00:00:00 2001 From: IluaAir Date: Tue, 17 Mar 2026 01:07:23 +0300 Subject: [PATCH] Add system method to Quasar model and update TTP template - Implemented a new `system` method in the `Quasar` model to extract and format system information, including version handling. - Updated the TTP template to adjust the grouping and ignore patterns for better parsing of system details, ensuring compatibility with the new method. --- oxi/interfaces/models/quasar.py | 23 ++++++++++++++++++++++ oxi/interfaces/models/templates/quasar.ttp | 12 +++++++---- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/oxi/interfaces/models/quasar.py b/oxi/interfaces/models/quasar.py index cce3a97..a41db15 100644 --- a/oxi/interfaces/models/quasar.py +++ b/oxi/interfaces/models/quasar.py @@ -5,6 +5,23 @@ from oxi.interfaces import BaseDevice, register_parser class Quasar(BaseDevice): template = "quasar.ttp" + def system(self) -> dict: + raw = self.raw.get("system", {}) + items = raw if isinstance(raw, list) else [raw] + selected = next( + (item for item in items if item.get("assembly_version")), + items[0] if items else {}, + ) + result = dict(selected) + result["version"] = ( + result.pop("assembly_version", None) + or result.pop("engine_version", None) + or "" + ) + result.pop("assembly_version", None) + result.pop("engine_version", None) + return result + def interfaces(self) -> list[dict]: ether_interfaces: dict = self.raw["interfaces"] interfaces: list[dict] = [] @@ -28,3 +45,9 @@ if __name__ == "__main__": quasar = Quasar(data) qt = quasar.parse() print(qt) + print() + with open("./test8.txt") as file: + data = file.read() + quasar = Quasar(data) + qt = quasar.parse() + print(qt) diff --git a/oxi/interfaces/models/templates/quasar.ttp b/oxi/interfaces/models/templates/quasar.ttp index e633654..6cfbf67 100644 --- a/oxi/interfaces/models/templates/quasar.ttp +++ b/oxi/interfaces/models/templates/quasar.ttp @@ -46,16 +46,20 @@ default_system = { -# Engine {{ version }} -# Product Name {{ model }} -# Product Serial Number {{ serial_number }} +#{{ ignore("\s+Assembly\s+") }}{{ assembly_version }} +#{{ ignore("\s+Product Name\s+") }}{{ model | ORPHRASE }} +#{{ ignore("\s+Product Serial Number\s+") }}{{ serial_number }} + + +#{{ ignore("\s+Engine\s+") }}{{ engine_version }} +#{{ ignore("\s+Product Name\s+") }}{{ model | ORPHRASE }} +#{{ ignore("\s+Product Serial Number\s+") }}{{ serial_number }} {{ ignore("\\s*") }}config {{ interface }} ipv4 address {{ ip_address }}/{{ mask }} gateway {{ gateway }} {{ ignore }} -{{ ignore("\\s*") }}config interface {{ interface | _start_ }} fec none mode force-up enable {{ ignore("\\s*") }}config interface {{ interface | _start_ }} description {{ description | ORPHRASE | strip('"')}} \ No newline at end of file