From 2be2fb844dd2dd54e2a097097a6cd13e499363b4 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 21 Apr 2015 08:52:59 +0530 Subject: [PATCH] Content server: Fix errors when library contains enough virtual libraries to cause grouping. Fixes #1446282 [virtual libraries fail on web access](https://bugs.launchpad.net/calibre/+bug/1446282) --- src/calibre/library/server/browse.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py index c89280ea91..87b3573873 100644 --- a/src/calibre/library/server/browse.py +++ b/src/calibre/library/server/browse.py @@ -507,7 +507,7 @@ class BrowseServer(object): items = get_category_items(category, items, datatype, self.opts.url_prefix) else: - getter = lambda x: unicode(getattr(x, 'sort', x.name)) + getter = lambda x: unicode(getattr(x, 'sort', None) or x.name) starts = set([]) for x in items: val = getter(x) @@ -571,7 +571,10 @@ class BrowseServer(object): raise cherrypy.HTTPError(404, 'category not found') category_meta = self.db.field_metadata - datatype = category_meta[category]['datatype'] + try: + datatype = category_meta[category]['datatype'] + except KeyError: + datatype = 'text' try: group = unhexlify(group) @@ -582,7 +585,7 @@ class BrowseServer(object): items = categories[category] entries = [] - getter = lambda x: unicode(getattr(x, 'sort', x.name)) + getter = lambda x: unicode(getattr(x, 'sort', None) or x.name) for x in items: val = getter(x) if not val: @@ -870,7 +873,7 @@ class BrowseServer(object): continue if m['datatype'] == 'comments' or field == 'comments' or ( m['datatype'] == 'composite' and - m['display'].get('contains_html', False)): + m['display'].get('contains_html', False)): val = mi.get(field, '') if val and val.strip(): comments.append((m['name'], comments_to_html(val)))