98 lines
2.5 KiB
Python
Executable File
98 lines
2.5 KiB
Python
Executable File
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
# this repository contains the full copyright notices and license terms.
|
|
import posixpath
|
|
from functools import cached_property
|
|
from weakref import WeakKeyDictionary
|
|
|
|
try:
|
|
from werkzeug.security import safe_join
|
|
except ImportError:
|
|
safe_join = posixpath.join
|
|
|
|
from .decimal_ import decistmt
|
|
from .misc import (
|
|
entry_points, escape_wildcard, file_open, find_dir, find_path, firstline,
|
|
get_smtp_server, grouped_slice, import_module, is_full_text,
|
|
is_instance_method, likify, lstrip_wildcard, pairwise_longest,
|
|
reduce_domain, reduce_ids, remove_forbidden_chars, resolve,
|
|
rstrip_wildcard, slugify, sortable_values, sql_pairing, strip_wildcard,
|
|
unescape_wildcard)
|
|
|
|
_NOT_FOUND = object()
|
|
|
|
|
|
class cached_property(cached_property):
|
|
_cache = None
|
|
|
|
def __get__(self, instance, owner=None):
|
|
if instance is None:
|
|
return self
|
|
cache = getattr(instance, '__dict__', None)
|
|
if cache is None: # __slots__
|
|
if self._cache is None:
|
|
self._cache = WeakKeyDictionary()
|
|
val = self._cache.get(instance, _NOT_FOUND)
|
|
if val is _NOT_FOUND:
|
|
self._cache[instance] = val = self.func(instance)
|
|
return val
|
|
else:
|
|
return super().__get__(instance, owner)
|
|
|
|
def __delete__(self, instance):
|
|
cache = getattr(instance, '__dict__', None)
|
|
try:
|
|
if cache:
|
|
del cache[self.attrname]
|
|
elif self._cache:
|
|
del self._cache[instance]
|
|
except KeyError:
|
|
pass
|
|
|
|
|
|
class ClassProperty(property):
|
|
def __get__(self, cls, owner):
|
|
return self.fget.__get__(None, owner)()
|
|
|
|
|
|
def cursor_dict(cursor, size=None):
|
|
size = cursor.arraysize if size is None else size
|
|
while True:
|
|
rows = cursor.fetchmany(size)
|
|
if not rows:
|
|
break
|
|
for row in rows:
|
|
yield {d[0]: v for d, v in zip(cursor.description, row)}
|
|
|
|
|
|
__all__ = [
|
|
ClassProperty,
|
|
cached_property,
|
|
cursor_dict,
|
|
decistmt,
|
|
entry_points,
|
|
escape_wildcard,
|
|
file_open,
|
|
find_dir,
|
|
find_path,
|
|
firstline,
|
|
get_smtp_server,
|
|
grouped_slice,
|
|
import_module,
|
|
is_full_text,
|
|
is_instance_method,
|
|
likify,
|
|
lstrip_wildcard,
|
|
pairwise_longest,
|
|
reduce_domain,
|
|
reduce_ids,
|
|
remove_forbidden_chars,
|
|
resolve,
|
|
rstrip_wildcard,
|
|
safe_join,
|
|
slugify,
|
|
sortable_values,
|
|
sql_pairing,
|
|
strip_wildcard,
|
|
unescape_wildcard,
|
|
]
|