mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
New implementation of CacheRow
This commit is contained in:
parent
3f3944e95b
commit
7e7f0954ce
@ -132,47 +132,35 @@ def _match(query, value, matchkind):
|
|||||||
pass
|
pass
|
||||||
return False
|
return False
|
||||||
|
|
||||||
class CacheRow(object):
|
class CacheRow(list):
|
||||||
|
|
||||||
def __init__(self, db, composites, val):
|
def __init__(self, db, composites, val):
|
||||||
self.db = db
|
self.db = db
|
||||||
self.composites = composites
|
self._composites = composites
|
||||||
self._mydata = val
|
list.__init__(self, val)
|
||||||
self._must_do = len(composites) > 0
|
self._must_do = len(composites) > 0
|
||||||
|
|
||||||
def __getitem__(self, col):
|
def __getitem__(self, col):
|
||||||
rec = self._mydata
|
if self._must_do:
|
||||||
if self._must_do and col in self.composites:
|
is_comp = False
|
||||||
|
if isinstance(col, slice):
|
||||||
|
for c in range(col.start, col.stop):
|
||||||
|
if c in self._composites:
|
||||||
|
is_comp = True
|
||||||
|
break
|
||||||
|
elif col in self._composites:
|
||||||
|
is_comp = True
|
||||||
|
if is_comp:
|
||||||
|
id = list.__getitem__(self, 0)
|
||||||
self._must_do = False
|
self._must_do = False
|
||||||
mi = self.db.get_metadata(rec[0], index_is_id=True)
|
mi = self.db.get_metadata(id, index_is_id=True)
|
||||||
for c in self.composites:
|
for c in self._composites:
|
||||||
rec[c] = mi.get(self.composites[c])
|
self[c] = mi.get(self._composites[c])
|
||||||
return rec[col]
|
return list.__getitem__(self, col)
|
||||||
|
|
||||||
def __setitem__ (self, col, val):
|
def __getslice__(self, i, j):
|
||||||
self._mydata[col] = val
|
return self.__getitem__(slice(i, j))
|
||||||
|
|
||||||
def append(self, val):
|
|
||||||
self._mydata.append(val)
|
|
||||||
|
|
||||||
def get(self, col, default):
|
|
||||||
try:
|
|
||||||
return self.__getitem__(col)
|
|
||||||
except:
|
|
||||||
return default
|
|
||||||
|
|
||||||
def __len__(self):
|
|
||||||
return len(self._mydata)
|
|
||||||
|
|
||||||
def __iter__(self):
|
|
||||||
for v in self._mydata:
|
|
||||||
yield v
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.__unicode__()
|
|
||||||
|
|
||||||
def __unicode__(self):
|
|
||||||
return unicode(self._mydata)
|
|
||||||
|
|
||||||
class ResultCache(SearchQueryParser): # {{{
|
class ResultCache(SearchQueryParser): # {{{
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user