Projet

Général

Profil

0001-sql-load-Evolution.parts-lazily-from-database-69109.patch

Benjamin Dauvergne, 15 septembre 2022 13:27

Télécharger (2,35 ko)

Voir les différences:

Subject: [PATCH] sql: load Evolution.parts lazily from database (#69109)

 wcs/sql.py | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 62 insertions(+), 1 deletion(-)
wcs/sql.py
102 102
    return value
103 103

  
104 104

  
105
class LazyPickleList(list):
106
    def __init__(self, dump):
107
        self.dump = dump
108

  
109
    def _load(self):
110
        try:
111
            dump = super().__getattribute__('dump')
112
        except AttributeError:
113
            pass
114
        else:
115
            super().__setitem__(slice(0), pickle.loads(dump))
116
            del self.dump
117

  
118
    def __getattribute__(self, name):
119
        super().__getattribute__('_load')()
120
        return super().__getattribute__(name)
121

  
122
    def __bool__(self):
123
        self._load()
124
        return bool(len(self))
125

  
126
    def __iter__(self):
127
        self._load()
128
        return super().__iter__()
129

  
130
    def __len__(self):
131
        self._load()
132
        return super().__len__()
133

  
134
    def __reversed__(self):
135
        self._load()
136
        return super().__reversed__()
137

  
138
    def __str__(self):
139
        self._load()
140
        return super().__str__()
141

  
142
    def __getitem__(self, index):
143
        self._load()
144
        return super().__getitem__(index)
145

  
146
    def __setitem__(self, index, value):
147
        self._load()
148
        return super().__setitem__(index, value)
149

  
150
    def __delitem__(self, index):
151
        self._load()
152
        return super().__delitem__(index)
153

  
154
    def __iadd__(self, values):
155
        self._load()
156
        return super().__add__(values)
157

  
158
    def __contains__(self, value):
159
        self._load()
160
        return super().__contains__(value)
161

  
162
    def __reduce__(self):
163
        return (list, (), None, iter(self))
164

  
165

  
105 166
def pickle_loads(value):
106 167
    if hasattr(value, 'tobytes'):
107 168
        value = value.tobytes()
......
2574 2635
        if o.time:
2575 2636
            o.time = o.time.timetuple()
2576 2637
        if row[6]:
2577
            o.parts = pickle_loads(row[6])
2638
            o.parts = LazyPickleList(row[6])
2578 2639
        return o
2579 2640

  
2580 2641
    def set_evolution(self, value):
2581
-