]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
netcmd: models: make MODELS constant keyed by object class instead
authorRob van der Linde <rob@catalyst.net.nz>
Tue, 20 Feb 2024 02:24:48 +0000 (15:24 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 1 Mar 2024 04:45:36 +0000 (04:45 +0000)
This helps with polymorphic querying, mapping object class name to model class.

Signed-off-by: Rob van der Linde <rob@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
python/samba/netcmd/domain/models/model.py
python/samba/netcmd/shell.py

index 3ad26c6b2b87af1e5233377bba5149fb9b136dc4..efb50017bbd07382df3b3d7c6ade019360ccc207 100644 (file)
@@ -40,11 +40,12 @@ class ModelMeta(ABCMeta):
 
     def __new__(mcls, name, bases, namespace, **kwargs):
         cls = super().__new__(mcls, name, bases, namespace, **kwargs)
+        object_class = cls.get_object_class()
 
         if cls.__name__ != "Model":
             cls.fields = dict(inspect.getmembers(cls, lambda f: isinstance(f, Field)))
             cls.meta = mcls
-            MODELS[name] = cls
+            MODELS[object_class] = cls
 
         return cls
 
index 31619eb135462f57ecf847f4345afb9a67fa409d..b68b82d4ee05276fa7b0895fc5d20fe0ee223d80 100644 (file)
@@ -51,7 +51,7 @@ class cmd_shell(Command):
             "samdb": samdb,
             "ldb": ldb,
         })
-        context.update(MODELS)
+        context.update({model.__name__: model for model in MODELS.values()})
 
         banner = rf"""
    _____         __  __ ____
@@ -67,7 +67,7 @@ Variables:
 samdb = {samdb}
 """
         for name, model in MODELS.items():
-            banner += f"{name} = {model}\n"
+            banner += f"{model.__name__}: {name}\n"
 
         readline.parse_and_bind("tab: complete")
         readline.set_completer(rlcompleter.Completer(context).complete)