On 2022-08-10 19:23 -0700, Jakub Kicinski wrote: > A very short and very incomplete generic python library. > > Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx> > --- > tools/net/ynl/samples/ynl.py | 342 +++++++++++++++++++++++++++++++++++ > 1 file changed, 342 insertions(+) > create mode 100644 tools/net/ynl/samples/ynl.py > > diff --git a/tools/net/ynl/samples/ynl.py b/tools/net/ynl/samples/ynl.py > new file mode 100644 > index 000000000000..59c178e063f1 > --- /dev/null > +++ b/tools/net/ynl/samples/ynl.py > @@ -0,0 +1,342 @@ [...] > +class YnlFamily: > + def __init__(self, def_path, schema=None): > + with open(def_path, "r") as stream: > + self.yaml = yaml.safe_load(stream) > + > + if schema: > + with open(os.path.dirname(os.path.dirname(file_name)) + '/schema.yaml', "r") as stream: > + schema = yaml.safe_load(stream) > + > + jsonschema.validate(self.yaml, schema) > + The schema validation part was not working. I got it going with the following changes. It then flags some problems in ethtool.yaml. diff --git a/tools/net/ynl/samples/ethtool.py b/tools/net/ynl/samples/ethtool.py index 63c8e29f8e5d..4c5a4629748d 100755 --- a/tools/net/ynl/samples/ethtool.py +++ b/tools/net/ynl/samples/ethtool.py @@ -14,7 +14,7 @@ def main(): parser.add_argument('--ifindex', dest='ifindex', type=str) args = parser.parse_args() - ynl = YnlFamily(args.spec) + ynl = YnlFamily(args.spec, args.schema) if args.dev_name: channels = ynl.channels_get({'header': {'dev_name': args.dev_name}}) diff --git a/tools/net/ynl/samples/ynl.py b/tools/net/ynl/samples/ynl.py index 59c178e063f1..35c894b0ec19 100644 --- a/tools/net/ynl/samples/ynl.py +++ b/tools/net/ynl/samples/ynl.py @@ -247,7 +247,7 @@ class YnlFamily: self.yaml = yaml.safe_load(stream) if schema: - with open(os.path.dirname(os.path.dirname(file_name)) + '/schema.yaml', "r") as stream: + with open(schema, "r") as stream: schema = yaml.safe_load(stream) jsonschema.validate(self.yaml, schema)