From: Rob van der Linde Date: Thu, 28 Sep 2023 02:22:17 +0000 (+1300) Subject: netcmd: models: add FieldError subclass which stores the field X-Git-Tag: tevent-0.16.0~316 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=83d321e764a3fc1124ff656a4a7714d262c835e0;p=thirdparty%2Fsamba.git netcmd: models: add FieldError subclass which stores the field This is so that errors on the CLI show the field name Signed-off-by: Rob van der Linde Reviewed-by: Douglas Bagnall Reviewed-by: Andrew Bartlett --- diff --git a/python/samba/netcmd/domain/models/exceptions.py b/python/samba/netcmd/domain/models/exceptions.py index 805c7a221b7..b28b423f64d 100644 --- a/python/samba/netcmd/domain/models/exceptions.py +++ b/python/samba/netcmd/domain/models/exceptions.py @@ -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 diff --git a/python/samba/netcmd/domain/models/model.py b/python/samba/netcmd/domain/models/model.py index 3a95595736a..a1eee7116a1 100644 --- a/python/samba/netcmd/domain/models/model.py +++ b/python/samba/netcmd/domain/models/model.py @@ -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, []):