тут
If you create an object:
devs = Devices(
devices=[
Device(dev=DeviceStorage(fqdn="1.1.1.1", vendor="cisco")),
Device(dev=DeviceStorage(fqdn="1.1.1.2", vendor="juniper")),
]
)
It won't be created, and will throw an exception in post_init:
raise Exception("unable to parse %s as Device: %s" % (dev, e))
Exception: unable to parse Device(dev=DeviceStorage(fqdn='1.1.1.1', vendor='cisco')) as Device: __main__.DeviceStorage() argument after ** must be a mapping, not Device
If you fix this and dump this object to yaml, you'll get a file like this:
devices:
- dev:
fqdn: 1.1.1.1
vendor: cisco
- dev:
fqdn: 1.1.1.2
vendor: juniper
So it seems to be the correct format for keeping device information in a file.
If you try to restore devs from this file, you'll get another exception in post_init:
raise Exception("unable to parse %s as Device: %s" % (dev, e))
Exception: unable to parse {'dev': {'fqdn': '1.1.1.1', 'vendor': 'cisco'}} as Device: DeviceStorage.__init__() got an unexpected keyword argument 'dev'
It seems that Devices should look something like this:
@dataclass
class Devices:
devices: list[Device | dict[str, dict[str, Any]]]
def __post_init__(self):
if isinstance(self.devices, list):
devices = []
for dev in self.devices:
if isinstance(dev, Device):
devices.append(dev)
else:
try:
devices.append(Device(dev=DeviceStorage(**dev["dev"])))
except Exception as e:
raise Exception("unable to parse %s as Device: %s" % (dev, e))
self.devices = devices
Should I create a PR?
тут
If you create an object:
It won't be created, and will throw an exception in post_init:
If you fix this and dump this object to yaml, you'll get a file like this:
So it seems to be the correct format for keeping device information in a file.
If you try to restore devs from this file, you'll get another exception in post_init:
It seems that Devices should look something like this:
Should I create a PR?