diff options
author | Alex Gaynor <alex.gaynor@gmail.com> | 2017-07-08 21:50:01 -0400 |
---|---|---|
committer | Paul Kehrer <paul.l.kehrer@gmail.com> | 2017-07-08 20:50:01 -0500 |
commit | 0c9aed91697c5bc1eb16c2254406149e2395fdae (patch) | |
tree | b0ea4d4d81357e0aab15d70f1823486aebfbb9a8 /src/cryptography/utils.py | |
parent | ae487bb5c70516505653a7884b5be5de26c5d96e (diff) | |
download | cryptography-0c9aed91697c5bc1eb16c2254406149e2395fdae.tar.gz cryptography-0c9aed91697c5bc1eb16c2254406149e2395fdae.tar.bz2 cryptography-0c9aed91697c5bc1eb16c2254406149e2395fdae.zip |
Fixed #3747 -- cache extensions on x.509 objects (#3769)
* Fixed #3747 -- cache extensions on x.509 objects
* be kind to cpython, save a dict lookup
* flake8
* changelog
Diffstat (limited to 'src/cryptography/utils.py')
-rw-r--r-- | src/cryptography/utils.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py index d28dc71d..efb12e21 100644 --- a/src/cryptography/utils.py +++ b/src/cryptography/utils.py @@ -145,3 +145,17 @@ def deprecated(value, module_name, message, warning_class): if not isinstance(module, _ModuleWithDeprecations): sys.modules[module_name] = _ModuleWithDeprecations(module) return _DeprecatedValue(value, message, warning_class) + + +def cached_property(func): + cached_name = "_cached_{0}".format(func) + sentinel = object() + + def inner(instance): + cache = getattr(instance, cached_name, sentinel) + if cache is not sentinel: + return cache + result = func(instance) + setattr(instance, cached_name, result) + return result + return property(inner) |