From a5fa3f7a6f51dbfe28d2ca9a6bf4ac75f4fa7be3 Mon Sep 17 00:00:00 2001 From: Polina Date: Thu, 2 Jul 2026 20:19:25 +0000 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B2=20=C2=AB?= =?UTF-8?q?venv/Lib/site-packages/sqlalchemy/cyextension=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sqlalchemy/cyextension/immutabledict.pyx | 133 ++++++++++++++++++ .../processors.cp314-win_amd64.pyd | Bin 0 -> 58880 bytes .../sqlalchemy/cyextension/processors.pyx | 68 +++++++++ .../resultproxy.cp314-win_amd64.pyd | Bin 0 -> 59392 bytes .../sqlalchemy/cyextension/resultproxy.pyx | 102 ++++++++++++++ 5 files changed, 303 insertions(+) create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/immutabledict.pyx create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/processors.cp314-win_amd64.pyd create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/processors.pyx create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/resultproxy.cp314-win_amd64.pyd create mode 100644 venv/Lib/site-packages/sqlalchemy/cyextension/resultproxy.pyx diff --git a/venv/Lib/site-packages/sqlalchemy/cyextension/immutabledict.pyx b/venv/Lib/site-packages/sqlalchemy/cyextension/immutabledict.pyx new file mode 100644 index 0000000..7fca324 --- /dev/null +++ b/venv/Lib/site-packages/sqlalchemy/cyextension/immutabledict.pyx @@ -0,0 +1,133 @@ +# cyextension/immutabledict.pyx +# Copyright (C) 2005-2024 the SQLAlchemy authors and contributors +# +# +# This module is part of SQLAlchemy and is released under +# the MIT License: https://www.opensource.org/licenses/mit-license.php +from cpython.dict cimport PyDict_New, PyDict_Update, PyDict_Size + + +def _readonly_fn(obj): + raise TypeError( + "%s object is immutable and/or readonly" % obj.__class__.__name__) + + +def _immutable_fn(obj): + raise TypeError( + "%s object is immutable" % obj.__class__.__name__) + + +class ReadOnlyContainer: + + __slots__ = () + + def _readonly(self, *a,**kw): + _readonly_fn(self) + + __delitem__ = __setitem__ = __setattr__ = _readonly + + +class ImmutableDictBase(dict): + def _immutable(self, *a,**kw): + _immutable_fn(self) + + @classmethod + def __class_getitem__(cls, key): + return cls + + __delitem__ = __setitem__ = __setattr__ = _immutable + clear = pop = popitem = setdefault = update = _immutable + + +cdef class immutabledict(dict): + def __repr__(self): + return f"immutabledict({dict.__repr__(self)})" + + @classmethod + def __class_getitem__(cls, key): + return cls + + def union(self, *args, **kw): + cdef dict to_merge = None + cdef immutabledict result + cdef Py_ssize_t args_len = len(args) + if args_len > 1: + raise TypeError( + f'union expected at most 1 argument, got {args_len}' + ) + if args_len == 1: + attribute = args[0] + if isinstance(attribute, dict): + to_merge = attribute + if to_merge is None: + to_merge = dict(*args, **kw) + + if PyDict_Size(to_merge) == 0: + return self + + # new + update is faster than immutabledict(self) + result = immutabledict() + PyDict_Update(result, self) + PyDict_Update(result, to_merge) + return result + + def merge_with(self, *other): + cdef immutabledict result = None + cdef object d + cdef bint update = False + if not other: + return self + for d in other: + if d: + if update == False: + update = True + # new + update is faster than immutabledict(self) + result = immutabledict() + PyDict_Update(result, self) + PyDict_Update( + result, (d if isinstance(d, dict) else dict(d)) + ) + + return self if update == False else result + + def copy(self): + return self + + def __reduce__(self): + return immutabledict, (dict(self), ) + + def __delitem__(self, k): + _immutable_fn(self) + + def __setitem__(self, k, v): + _immutable_fn(self) + + def __setattr__(self, k, v): + _immutable_fn(self) + + def clear(self, *args, **kw): + _immutable_fn(self) + + def pop(self, *args, **kw): + _immutable_fn(self) + + def popitem(self, *args, **kw): + _immutable_fn(self) + + def setdefault(self, *args, **kw): + _immutable_fn(self) + + def update(self, *args, **kw): + _immutable_fn(self) + + # PEP 584 + def __ior__(self, other): + _immutable_fn(self) + + def __or__(self, other): + return immutabledict(dict.__or__(self, other)) + + def __ror__(self, other): + # NOTE: this is used only in cython 3.x; + # version 0.x will call __or__ with args inversed + return immutabledict(dict.__ror__(self, other)) diff --git a/venv/Lib/site-packages/sqlalchemy/cyextension/processors.cp314-win_amd64.pyd b/venv/Lib/site-packages/sqlalchemy/cyextension/processors.cp314-win_amd64.pyd new file mode 100644 index 0000000000000000000000000000000000000000..8ece3f9be121e62f23c34944bb5d63a91e4a6c8a GIT binary patch literal 58880 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 +# +# This module is part of SQLAlchemy and is released under +# the MIT License: https://www.opensource.org/licenses/mit-license.php +import datetime +from datetime import datetime as datetime_cls +from datetime import time as time_cls +from datetime import date as date_cls +import re + +from cpython.object cimport PyObject_Str +from cpython.unicode cimport PyUnicode_AsASCIIString, PyUnicode_Check, PyUnicode_Decode +from libc.stdio cimport sscanf + + +def int_to_boolean(value): + if value is None: + return None + return True if value else False + +def to_str(value): + return PyObject_Str(value) if value is not None else None + +def to_float(value): + return float(value) if value is not None else None + +cdef inline bytes to_bytes(object value, str type_name): + try: + return PyUnicode_AsASCIIString(value) + except Exception as e: + raise ValueError( + f"Couldn't parse {type_name} string '{value!r}' " + "- value is not a string." + ) from e + +def str_to_datetime(value): + if value is not None: + value = datetime_cls.fromisoformat(value) + return value + +def str_to_time(value): + if value is not None: + value = time_cls.fromisoformat(value) + return value + + +def str_to_date(value): + if value is not None: + value = date_cls.fromisoformat(value) + return value + + + +cdef class DecimalResultProcessor: + cdef object type_ + cdef str format_ + + def __cinit__(self, type_, format_): + self.type_ = type_ + self.format_ = format_ + + def process(self, object value): + if value is None: + return None + else: + return self.type_(self.format_ % value) diff --git a/venv/Lib/site-packages/sqlalchemy/cyextension/resultproxy.cp314-win_amd64.pyd b/venv/Lib/site-packages/sqlalchemy/cyextension/resultproxy.cp314-win_amd64.pyd new file mode 100644 index 0000000000000000000000000000000000000000..1241abbf0fa5f01f90595ecfc0c3947a5d628c95 GIT binary patch literal 59392 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 V=S1s7*F^8c)Wq}zRP=xP_rJh3AV&ZI literal 0 HcmV?d00001 diff --git a/venv/Lib/site-packages/sqlalchemy/cyextension/resultproxy.pyx b/venv/Lib/site-packages/sqlalchemy/cyextension/resultproxy.pyx new file mode 100644 index 0000000..121f6a1 --- /dev/null +++ b/venv/Lib/site-packages/sqlalchemy/cyextension/resultproxy.pyx @@ -0,0 +1,102 @@ +# cyextension/resultproxy.pyx +# Copyright (C) 2005-2024 the SQLAlchemy authors and contributors +# +# +# This module is part of SQLAlchemy and is released under +# the MIT License: https://www.opensource.org/licenses/mit-license.php +import operator + +cdef class BaseRow: + cdef readonly object _parent + cdef readonly dict _key_to_index + cdef readonly tuple _data + + def __init__(self, object parent, object processors, dict key_to_index, object data): + """Row objects are constructed by CursorResult objects.""" + + self._parent = parent + + self._key_to_index = key_to_index + + if processors: + self._data = _apply_processors(processors, data) + else: + self._data = tuple(data) + + def __reduce__(self): + return ( + rowproxy_reconstructor, + (self.__class__, self.__getstate__()), + ) + + def __getstate__(self): + return {"_parent": self._parent, "_data": self._data} + + def __setstate__(self, dict state): + parent = state["_parent"] + self._parent = parent + self._data = state["_data"] + self._key_to_index = parent._key_to_index + + def _values_impl(self): + return list(self) + + def __iter__(self): + return iter(self._data) + + def __len__(self): + return len(self._data) + + def __hash__(self): + return hash(self._data) + + def __getitem__(self, index): + return self._data[index] + + def _get_by_key_impl_mapping(self, key): + return self._get_by_key_impl(key, 0) + + cdef _get_by_key_impl(self, object key, int attr_err): + index = self._key_to_index.get(key) + if index is not None: + return self._data[index] + self._parent._key_not_found(key, attr_err != 0) + + def __getattr__(self, name): + return self._get_by_key_impl(name, 1) + + def _to_tuple_instance(self): + return self._data + + +cdef tuple _apply_processors(proc, data): + res = [] + for i in range(len(proc)): + p = proc[i] + if p is None: + res.append(data[i]) + else: + res.append(p(data[i])) + return tuple(res) + + +def rowproxy_reconstructor(cls, state): + obj = cls.__new__(cls) + obj.__setstate__(state) + return obj + + +cdef int is_contiguous(tuple indexes): + cdef int i + for i in range(1, len(indexes)): + if indexes[i-1] != indexes[i] -1: + return 0 + return 1 + + +def tuplegetter(*indexes): + if len(indexes) == 1 or is_contiguous(indexes) != 0: + # slice form is faster but returns a list if input is list + return operator.itemgetter(slice(indexes[0], indexes[-1] + 1)) + else: + return operator.itemgetter(*indexes)