Fix uuidsentinel to follow getattr protocol

This patch changes the exception type raise by uuidsentinel when the
sentinel name starts with '_'. The __getattr__ protocol requires to
raise an AttributeError if the attribute value cannot be returned.

Closes-Bug: #1885281
Change-Id: I1076a957a19507e7d96ef429c0ae5d0ee8a90e66
This commit is contained in:
Balazs Gibizer 2020-06-26 15:34:52 +02:00
parent b9938230f9
commit bc562f3393
2 changed files with 2 additions and 2 deletions

View File

@ -79,7 +79,7 @@ class _UUIDSentinels(object):
def __getattr__(self, name): def __getattr__(self, name):
if name.startswith('_'): if name.startswith('_'):
raise ValueError('Sentinels must not start with _') raise AttributeError('Sentinels must not start with _')
with self._lock: with self._lock:
if name not in self._sentinels: if name not in self._sentinels:
self._sentinels[name] = uuidutils.generate_uuid() self._sentinels[name] = uuidutils.generate_uuid()

View File

@ -80,5 +80,5 @@ class UUIDSentinelsTest(test_base.BaseTestCase):
self.assertIsInstance(uuids.foo, str) self.assertIsInstance(uuids.foo, str)
def test_with_underline_prefix(self): def test_with_underline_prefix(self):
ex = self.assertRaises(ValueError, getattr, uuids, '_foo') ex = self.assertRaises(AttributeError, getattr, uuids, '_foo')
self.assertIn("Sentinels must not start with _", six.text_type(ex)) self.assertIn("Sentinels must not start with _", six.text_type(ex))