Compare output of GUI and server tag browsers

This commit is contained in:
Kovid Goyal 2015-11-22 10:57:35 +05:30
parent 3387169dca
commit 491cd2478c
2 changed files with 44 additions and 6 deletions

View File

@ -158,6 +158,22 @@ class TagTreeItem(object): # {{{
return self.icon_state_map[0]
return None
def dump_data(self):
fmt = '%s [count=%s]'
if self.type == self.CATEGORY:
return fmt % (self.py_name, len(self.child_tags()))
tag = self.tag
if tag.use_sort_as_name:
name = tag.sort
else:
if not tag.is_hierarchical:
name = tag.original_name
else:
name = tag.name
count = len(self.id_set)
count = count if count > 0 else tag.count
return fmt % (name, count,)
def toggle(self, set_to=None):
'''
set_to: None => advance the state, otherwise a value from TAG_SEARCH_STATES

View File

@ -380,11 +380,8 @@ def dump_categories_tree(data):
ans, indent = [], ' '
def dump_node(node, level=0):
item = items[node['id']]
on = item.get('original_name', '')
if on:
on += ' '
try:
ans.append(indent*level + item['name'] + ' [%scount=%s]' % (on, item['count']))
ans.append(indent*level + item['name'] + ' [count=%s]' % (item['count'],))
except KeyError:
print(item)
raise
@ -395,10 +392,35 @@ def dump_categories_tree(data):
[dump_node(c) for c in root['children']]
return '\n'.join(ans)
def dump_tags_model(m):
from PyQt5.Qt import QModelIndex, Qt
ans, indent = [], ' '
def dump_node(index, level=-1):
if level > -1:
ans.append(indent*level + index.data(Qt.UserRole).dump_data())
for i in xrange(m.rowCount(index)):
dump_node(m.index(i, 0, index), level + 1)
if level == 0:
ans.append('')
dump_node(QModelIndex())
return '\n'.join(ans)
def test_tag_browser(library_path=None):
from calibre.library import db
db = db(library_path).new_api
olddb = db(library_path)
db = olddb.new_api
opts = categories_settings({}, db)
category_data = db.get_categories(sort=opts.sort_by, first_letter_sort=opts.collapse_model == 'first letter')
data = render_categories(db.field_metadata, opts, category_data)
print(dump_categories_tree(data))
srv_data = dump_categories_tree(data)
from calibre.gui2 import Application
from calibre.gui2.tag_browser.model import TagsModel
app = Application([])
m = TagsModel(None)
m.set_database(olddb)
m_data = dump_tags_model(m)
from calibre.gui2.tweak_book.diff.main import Diff
d = Diff(show_as_window=True)
d.string_diff(m_data, srv_data, left_name='GUI', right_name='server')
d.exec_()
del app