From db6bea71c1a2eea9eabc4285411b369cc3527950 Mon Sep 17 00:00:00 2001 From: Baldur Helgason Date: Thu, 12 Jun 2025 17:49:14 +0000 Subject: [PATCH] Remove the values from the AttributeError message when attribute is not found --- factory/builder.py | 5 +++-- tests/test_base.py | 7 ++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/factory/builder.py b/factory/builder.py index e76e7556..d66069a2 100644 --- a/factory/builder.py +++ b/factory/builder.py @@ -366,8 +366,9 @@ def __getattr__(self, name): return value else: raise AttributeError( - "The parameter %r is unknown. Evaluated attributes are %r, " - "definitions are %r." % (name, self.__values, self.__declarations)) + "The parameter %r is unknown. Available attributes are: %s." + % (name, ", ".join(list(self.__declarations))) + ) def __setattr__(self, name, value): """Prevent setting attributes once __init__ is done.""" diff --git a/tests/test_base.py b/tests/test_base.py index d3b32570..af324fc6 100644 --- a/tests/test_base.py +++ b/tests/test_base.py @@ -256,9 +256,14 @@ class Meta: model = TestObject one = declarations.LazyAttribute(lambda a: a.does_not_exist) + two = 2 - with self.assertRaises(AttributeError): + with self.assertRaises(AttributeError) as exc: TestObjectFactory() + self.assertEqual( + str(exc.exception), + "The parameter 'does_not_exist' is unknown. Available attributes are: one, two.", + ) def test_inheritance_with_sequence(self): """Tests that sequence IDs are shared between parent and son."""