Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
resultproxy.pyx103 linesDownload Raw Back to cyextension
1# cyextension/resultproxy.pyx
2# Copyright (C) 2005-2024 the SQLAlchemy authors and contributors
3# <see AUTHORS file>
4#
5# This module is part of SQLAlchemy and is released under
6# the MIT License: https://www.opensource.org/licenses/mit-license.php
7import operator
8
9cdef class BaseRow:
10    cdef readonly object _parent
11    cdef readonly dict _key_to_index
12    cdef readonly tuple _data
13
14    def __init__(self, object parent, object processors, dict key_to_index, object data):
15        """Row objects are constructed by CursorResult objects."""
16
17        self._parent = parent
18
19        self._key_to_index = key_to_index
20
21        if processors:
22            self._data = _apply_processors(processors, data)
23        else:
24            self._data = tuple(data)
25
26    def __reduce__(self):
27        return (
28            rowproxy_reconstructor,
29            (self.__class__, self.__getstate__()),
30        )
31
32    def __getstate__(self):
33        return {"_parent": self._parent, "_data": self._data}
34
35    def __setstate__(self, dict state):
36        parent = state["_parent"]
37        self._parent = parent
38        self._data = state["_data"]
39        self._key_to_index = parent._key_to_index
40
41    def _values_impl(self):
42        return list(self)
43
44    def __iter__(self):
45        return iter(self._data)
46
47    def __len__(self):
48        return len(self._data)
49
50    def __hash__(self):
51        return hash(self._data)
52
53    def __getitem__(self, index):
54        return self._data[index]
55
56    def _get_by_key_impl_mapping(self, key):
57        return self._get_by_key_impl(key, 0)
58
59    cdef _get_by_key_impl(self, object key, int attr_err):
60        index = self._key_to_index.get(key)
61        if index is not None:
62            return self._data[<int>index]
63        self._parent._key_not_found(key, attr_err != 0)
64
65    def __getattr__(self, name):
66        return self._get_by_key_impl(name, 1)
67
68    def _to_tuple_instance(self):
69        return self._data
70
71
72cdef tuple _apply_processors(proc, data):
73    res = []
74    for i in range(len(proc)):
75        p = proc[i]
76        if p is None:
77            res.append(data[i])
78        else:
79            res.append(p(data[i]))
80    return tuple(res)
81
82
83def rowproxy_reconstructor(cls, state):
84    obj = cls.__new__(cls)
85    obj.__setstate__(state)
86    return obj
87
88
89cdef int is_contiguous(tuple indexes):
90    cdef int i
91    for i in range(1, len(indexes)):
92        if indexes[i-1] != indexes[i] -1:
93            return 0
94    return 1
95
96
97def tuplegetter(*indexes):
98    if len(indexes) == 1 or is_contiguous(indexes) != 0:
99        # slice form is faster but returns a list if input is list
100        return operator.itemgetter(slice(indexes[0], indexes[-1] + 1))
101    else:
102        return operator.itemgetter(*indexes)
103 
codekingpro/portable-devtools · Team Ai