mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Avoiding iterating over id_map for ever item lookup
This commit is contained in:
parent
c56b41612b
commit
b5afce1a85
@ -940,6 +940,13 @@ class Cache:
|
|||||||
rmap = {icu_lower(v) if isinstance(v, str) else v:k for k, v in iteritems(self.fields[field].table.id_map)}
|
rmap = {icu_lower(v) if isinstance(v, str) else v:k for k, v in iteritems(self.fields[field].table.id_map)}
|
||||||
return {name:rmap.get(icu_lower(name) if isinstance(name, str) else name, None) for name in item_names}
|
return {name:rmap.get(icu_lower(name) if isinstance(name, str) else name, None) for name in item_names}
|
||||||
|
|
||||||
|
@read_api
|
||||||
|
def get_item_name_map(self, field, normalize_func=None):
|
||||||
|
' Return mapping of item values to ids '
|
||||||
|
if normalize_func is None:
|
||||||
|
return {v:k for k, v in self.fields[field].table.id_map.items()}
|
||||||
|
return {normalize_func(v):k for k, v in self.fields[field].table.id_map.items()}
|
||||||
|
|
||||||
@read_api
|
@read_api
|
||||||
def author_data(self, author_ids=None):
|
def author_data(self, author_ids=None):
|
||||||
'''
|
'''
|
||||||
|
@ -322,10 +322,14 @@ def render_data(mi, use_roman_numbers=True, all_fields=False, pref_name='book_di
|
|||||||
field_list = [(x, all_fields or display) for x, display in field_list]
|
field_list = [(x, all_fields or display) for x, display in field_list]
|
||||||
db, _ = db_for_mi(mi)
|
db, _ = db_for_mi(mi)
|
||||||
db = db.new_api
|
db = db.new_api
|
||||||
|
field_maps = {}
|
||||||
|
|
||||||
def item_id_if_has_note(field, item_val):
|
def item_id_if_has_note(field, item_val):
|
||||||
if db.field_supports_notes(field):
|
if db.field_supports_notes(field):
|
||||||
item_id = db.get_item_id(field, item_val)
|
nmap = field_maps.get(field)
|
||||||
|
if nmap is None:
|
||||||
|
nmap = field_maps[field] = db.get_item_name_map(field)
|
||||||
|
item_id = nmap.get(item_val)
|
||||||
if item_id is not None:
|
if item_id is not None:
|
||||||
if db.notes_for(field, item_id):
|
if db.notes_for(field, item_id):
|
||||||
return item_id
|
return item_id
|
||||||
|
Loading…
x
Reference in New Issue
Block a user