Files
tradon/tools/__init__.py
2025-12-26 13:11:43 +00:00

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,
]