]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
netcmd: models: add FieldError subclass which stores the field
authorRob van der Linde <rob@catalyst.net.nz>
Thu, 28 Sep 2023 02:22:17 +0000 (15:22 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 29 Sep 2023 02:18:34 +0000 (02:18 +0000)
This is so that errors on the CLI show the field name

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/exceptions.py
python/samba/netcmd/domain/models/model.py

index 805c7a221b7598d9518d1db06d388d41d0e15df1..b28b423f64df6b964e5e86483851cba3e2eb9842 100644 (file)
@@ -24,6 +24,18 @@ class ModelError(Exception):
     pass
 
 
+class FieldError(ModelError):
+    """A ModelError on a specific field."""
+
+    def __init__(self, *args, field=None):
+        self.field = field
+        super().__init__(*args)
+
+    def __str__(self):
+        message = super().__str__()
+        return f"{self.field.name}: {message}"
+
+
 class MultipleObjectsReturned(ModelError):
     pass
 
index 3a95595736a0af4aa131f16deb05979b5312745f..a1eee7116a127ab1ea4064ef6d1d0640e9cecf18 100644 (file)
@@ -27,7 +27,7 @@ from ldb import ERR_NO_SUCH_OBJECT, FLAG_MOD_ADD, FLAG_MOD_REPLACE, LdbError,\
     Message, MessageElement, SCOPE_BASE, SCOPE_SUBTREE, binary_encode
 from samba.sd_utils import SDUtils
 
-from .exceptions import DeleteError, DoesNotExist, ModelError,\
+from .exceptions import DeleteError, DoesNotExist, FieldError,\
     MultipleObjectsReturned, ProtectError, UnprotectError
 from .fields import DateTimeField, DnField, Field, GUIDField, IntegerField,\
     StringField
@@ -362,7 +362,7 @@ class Model(metaclass=ModelMeta):
                     try:
                         db_value = field.to_db_value(ldb, value, FLAG_MOD_ADD)
                     except ValueError as e:
-                        raise ModelError(e)
+                        raise FieldError(e, field=field)
 
                     # Don't add empty fields.
                     if db_value is not None and len(db_value):
@@ -391,7 +391,7 @@ class Model(metaclass=ModelMeta):
                             db_value = field.to_db_value(ldb, value,
                                                          FLAG_MOD_REPLACE)
                         except ValueError as e:
-                            raise ModelError(e)
+                            raise FieldError(e, field=field)
 
                         # When a field returns None or empty list, delete attr.
                         if db_value in (None, []):