]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
netcmd: models: add readonly attribute on fields to exclude it from save
authorRob van der Linde <rob@catalyst.net.nz>
Wed, 22 Nov 2023 01:13:08 +0000 (14:13 +1300)
committerDouglas Bagnall <dbagnall@samba.org>
Wed, 22 Nov 2023 23:35:33 +0000 (23:35 +0000)
There was trouble when saving fields like is system object, these need to be excluded on save.

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

index a718de28348d8c989e2b85f80ef455d83c556e43..0b7e1eb83e49aa1a0b1d61c1fdf1d022f4e553b0 100644 (file)
@@ -45,17 +45,20 @@ class Field(metaclass=ABCMeta):
     but really any field can be a list or single value.
     """
 
-    def __init__(self, name, many=False, default=None, hidden=False):
+    def __init__(self, name, many=False, default=None, hidden=False,
+                 readonly=False):
         """Creates a new field, should be subclassed.
 
         :param name: Ldb field name.
         :param many: If true always convert field to a list when loaded.
         :param default: Default value or callback method (obj is first argument)
         :param hidden: If this is True, exclude the field when calling as_dict()
+        :param readonly: If true don't write this value when calling save.
         """
         self.name = name
         self.many = many
         self.hidden = hidden
+        self.readonly = readonly
 
         # This ensures that fields with many=True are always lists.
         # If this is inconsistent anywhere, it isn't so great to use.
index 3f2fcbe8dda3e1e924dc91016340e59a72c2698f..602c6ca12484ca3a0dc43fda6674c98cf3ba3026 100644 (file)
@@ -336,7 +336,7 @@ class Model(metaclass=ModelMeta):
 
             message = Message(dn=self.dn)
             for attr, field in self.fields.items():
-                if attr != "dn":
+                if attr != "dn" and not field.readonly:
                     value = getattr(self, attr)
                     try:
                         db_value = field.to_db_value(ldb, value, FLAG_MOD_ADD)
@@ -361,7 +361,7 @@ class Model(metaclass=ModelMeta):
             # Any fields that are set to None or an empty list get unset.
             message = Message(dn=self.dn)
             for attr, field in self.fields.items():
-                if attr != "dn":
+                if attr != "dn" and not field.readonly:
                     value = getattr(self, attr)
                     old_value = getattr(existing_obj, attr)