diff options
author | Zuul <zuul@review.openstack.org> | 2018-08-28 17:13:22 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2018-08-28 17:13:22 +0000 |
commit | fa46125a8744fea3a0a7809f876ac361ecd65768 (patch) | |
tree | fee452cc064ac070f8b3efe5c9963c687b0f87c6 /oslo_utils/fixture.py | |
parent | 54b5e62fd1ea4d355d36c13174b91ac36fdbc3bb (diff) | |
parent | 63d7649ed5e0252cbaf6bc1f0a02542f458b221f (diff) | |
download | oslo-utils-fa46125a8744fea3a0a7809f876ac361ecd65768.tar.gz |
Merge "UUID sentinel"
Diffstat (limited to 'oslo_utils/fixture.py')
-rw-r--r-- | oslo_utils/fixture.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/oslo_utils/fixture.py b/oslo_utils/fixture.py index 9526154..1872c70 100644 --- a/oslo_utils/fixture.py +++ b/oslo_utils/fixture.py @@ -20,9 +20,12 @@ Test fixtures. .. versionadded:: 1.3 """ +import threading + import fixtures from oslo_utils import timeutils +from oslo_utils import uuidutils class TimeFixture(fixtures.Fixture): @@ -49,3 +52,41 @@ class TimeFixture(fixtures.Fixture): def advance_time_seconds(self, seconds): """Advance overridden time by seconds.""" timeutils.advance_time_seconds(seconds) + + +class _UUIDSentinels(object): + """Registry of dynamically created, named, random UUID strings. + + An instance of this class will dynamically generate attributes as they are + referenced, associating a random UUID string with each. Thereafter, + referring to the same attribute will give the same UUID for the life of the + instance. Plan accordingly. + + Usage: + + from oslo_utils.fixture import uuidsentinel as uuids + ... + foo = uuids.foo + do_a_thing(foo) + # Referencing the same sentinel again gives the same value + assert foo == uuids.foo + # But a different one will be different + assert foo != uuids.bar + """ + def __init__(self): + self._sentinels = {} + self._lock = threading.Lock() + + def __getattr__(self, name): + if name.startswith('_'): + raise ValueError('Sentinels must not start with _') + with self._lock: + if name not in self._sentinels: + self._sentinels[name] = uuidutils.generate_uuid() + return self._sentinels[name] + + +# Singleton sentinel instance. Caveat emptor: using this multiple times in the +# same process (including across multiple modules) will result in the same +# values +uuidsentinel = _UUIDSentinels() |