Submit
Path:
~
/
/
opt
/
alt
/
python38
/
lib
/
python3.8
/
site-packages
/
File Content:
cached_property.py
# -*- coding: utf-8 -*- __author__ = 'Daniel Greenfeld' __email__ = 'pydanny@gmail.com' __version__ = '1.3.0' __license__ = 'BSD' from time import time import threading class cached_property(object): """ A property that is only computed once per instance and then replaces itself with an ordinary attribute. Deleting the attribute resets the property. Source: https://github.com/bottlepy/bottle/commit/fa7733e075da0d790d809aa3d2f53071897e6f76 """ # noqa def __init__(self, func): self.__doc__ = getattr(func, '__doc__') self.func = func def __get__(self, obj, cls): if obj is None: return self value = obj.__dict__[self.func.__name__] = self.func(obj) return value class threaded_cached_property(object): """ A cached_property version for use in environments where multiple threads might concurrently try to access the property. """ def __init__(self, func): self.__doc__ = getattr(func, '__doc__') self.func = func self.lock = threading.RLock() def __get__(self, obj, cls): if obj is None: return self obj_dict = obj.__dict__ name = self.func.__name__ with self.lock: try: # check if the value was computed before the lock was acquired return obj_dict[name] except KeyError: # if not, do the calculation and release the lock return obj_dict.setdefault(name, self.func(obj)) class cached_property_with_ttl(object): """ A property that is only computed once per instance and then replaces itself with an ordinary attribute. Setting the ttl to a number expresses how long the property will last before being timed out. """ def __init__(self, ttl=None): if callable(ttl): func = ttl ttl = None else: func = None self.ttl = ttl self._prepare_func(func) def __call__(self, func): self._prepare_func(func) return self def __get__(self, obj, cls): if obj is None: return self now = time() obj_dict = obj.__dict__ name = self.__name__ try: value, last_updated = obj_dict[name] except KeyError: pass else: ttl_expired = self.ttl and self.ttl < now - last_updated if not ttl_expired: return value value = self.func(obj) obj_dict[name] = (value, now) return value def __delete__(self, obj): obj.__dict__.pop(self.__name__, None) def __set__(self, obj, value): obj.__dict__[self.__name__] = (value, time()) def _prepare_func(self, func): self.func = func if func: self.__doc__ = func.__doc__ self.__name__ = func.__name__ self.__module__ = func.__module__ # Aliases to make cached_property_with_ttl easier to use cached_property_ttl = cached_property_with_ttl timed_cached_property = cached_property_with_ttl class threaded_cached_property_with_ttl(cached_property_with_ttl): """ A cached_property version for use in environments where multiple threads might concurrently try to access the property. """ def __init__(self, ttl=None): super(threaded_cached_property_with_ttl, self).__init__(ttl) self.lock = threading.RLock() def __get__(self, obj, cls): with self.lock: return super(threaded_cached_property_with_ttl, self).__get__(obj, cls) # Alias to make threaded_cached_property_with_ttl easier to use threaded_cached_property_ttl = threaded_cached_property_with_ttl timed_threaded_cached_property = threaded_cached_property_with_ttl
Submit
FILE
FOLDER
Name
Size
Permission
Action
Babel-2.9.1-py3.8.egg-info
---
0755
Cerberus-1.3.4-py3.8.egg-info
---
0755
Jinja2-3.0.3-py3.8.egg-info
---
0755
PyJWT-2.1.0-py3.8.egg-info
---
0755
PyMySQL-0.7.11-py3.8.egg-info
---
0755
__pycache__
---
0755
_distutils_hack
---
0755
aiodns
---
0755
aiodns-3.0.0-py3.8.egg-info
---
0755
asn1crypto
---
0755
asn1crypto-0.22.0-py3.8.egg-info
---
0755
async_lru-1.0.2-py3.8.egg-info
---
0755
async_timeout
---
0755
async_timeout-1.3.0-py3.8.egg-info
---
0755
attr
---
0755
attrs-17.4.0-py3.8.egg-info
---
0755
babel
---
0755
blinker
---
0755
blinker-1.4-py3.8.egg-info
---
0755
cached_property-1.3.0-py3.8.egg-info
---
0755
cerberus
---
0755
certifi
---
0755
certifi-2018.4.16-py3.8.egg-info
---
0755
chardet
---
0755
chardet-3.0.4-py3.8.egg-info
---
0755
click
---
0755
click-6.6-py3.8.egg-info
---
0755
daemon
---
0755
dateutil
---
0755
distro-1.6.0-py3.8.egg-info
---
0755
funcsigs
---
0755
funcsigs-1.0.2-py3.8.egg-info
---
0755
geoip2
---
0755
geoip2-4.2.0-py3.8.egg-info
---
0755
humanize
---
0755
humanize-0.0.0-py3.8.egg-info
---
0755
idna
---
0755
idna-2.5-py3.8.egg-info
---
0755
jinja2
---
0755
jsonschema
---
0755
jsonschema-3.2.0-py3.8.egg-info
---
0755
jwt
---
0755
lockfile
---
0755
lockfile-0.12.2-py3.8.egg-info
---
0755
mock
---
0755
mock-3.0.5-py3.8.egg-info
---
0755
packaging
---
0755
packaging-16.8-py3.8.egg-info
---
0755
pbr
---
0755
pbr-1.8.1-py3.8.egg-info
---
0755
peewee_migrate
---
0755
peewee_migrate-0.6.4-py3.8.egg-info
---
0755
pip
---
0755
pip-20.2.4.dist-info
---
0755
pkg_resources
---
0755
ply
---
0755
ply-3.8-py3.8.egg-info
---
0755
pycparser
---
0755
pycparser-2.14-py3.8.egg-info
---
0755
pymysql
---
0755
pyparsing-2.1.10-py3.8.egg-info
---
0755
python_daemon-2.3.0-py3.8.egg-info
---
0755
python_dateutil-2.6.0-py3.8.egg-info
---
0755
python_pam-1.8.4-py3.8.egg-info
---
0755
pytz
---
0755
pytz-2017.2-py3.8.egg-info
---
0755
requests
---
0755
requests-2.26.0-py3.8.egg-info
---
0755
sdnotify
---
0755
sentry_sdk
---
0755
sentry_sdk-0.7.10-py3.8.egg-info
---
0755
setuptools
---
0755
setuptools-57.4.0.dist-info
---
0755
six-1.12.0-py3.8.egg-info
---
0755
typing_extensions-3.7.4.3-py3.8.egg-info
---
0755
urllib3
---
0755
urllib3-1.26.6-py3.8.egg-info
---
0755
PySocks-1.5.7-py3.8.egg-info
322 bytes
0644
async_lru.py
6124 bytes
0644
cached_property.py
3900 bytes
0644
distro.py
48414 bytes
0644
distutils-precedence.pth
152 bytes
0644
pam.py
7556 bytes
0644
pyparsing.py
229867 bytes
0644
sdnotify-0.3.2-py3.8.egg-info
1133 bytes
0644
six.py
32452 bytes
0644
socks.py
29952 bytes
0644
sockshandler.py
2913 bytes
0644
typing_extensions.py
83727 bytes
0644
N4ST4R_ID | Naxtarrr