diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py index 5e7de43d45..a122f539c6 100644 --- a/src/calibre/library/server/browse.py +++ b/src/calibre/library/server/browse.py @@ -17,6 +17,7 @@ from calibre.utils.ordered_dict import OrderedDict from calibre.utils.filenames import ascii_filename from calibre.utils.config import prefs from calibre.library.comments import comments_to_html +from calibre.library.server import custom_fields_to_display def render_book_list(ids, suffix=''): # {{{ pages = [] @@ -495,7 +496,7 @@ class BrowseServer(object): other_fmts = [x for x in fmts if x.lower() != fmt.lower()] if other_fmts: ofmts = [u'{3}'\ - .format(fmt, fname, id_, fmt.upper()) for fmt in + .format(f, fname, id_, f.upper()) for f in other_fmts] ofmts = ', '.join(ofmts) args['other_formats'] = u'%s: ' % \ @@ -545,8 +546,11 @@ class BrowseServer(object): ofmts = ', '.join(ofmts) args['formats'] = ofmts fields, comments = [], [] + displayed_custom_fields = custom_fields_to_display(self.db) for field, m in list(mi.get_all_standard_metadata(False).items()) + \ list(mi.get_all_user_metadata(False).items()): + if m['is_custom'] and field not in displayed_custom_fields: + continue if m['datatype'] == 'comments' or field == 'comments': comments.append((m['name'], comments_to_html(mi.get(field, '')))) diff --git a/src/calibre/library/server/content.py b/src/calibre/library/server/content.py index 8c5fef4ee1..d95cd1818c 100644 --- a/src/calibre/library/server/content.py +++ b/src/calibre/library/server/content.py @@ -140,7 +140,7 @@ class ContentServer(object): updated = self.build_time else: with cover as f: - updated = fromtimestamp(os.stat(f.name).st_mtime) + updated = fromtimestamp(os.fstat(f.fileno()).st_mtime) cover = f.read() cherrypy.response.headers['Last-Modified'] = self.last_modified(updated) diff --git a/src/calibre/startup.py b/src/calibre/startup.py index 1046cd93b3..b5741c1991 100644 --- a/src/calibre/startup.py +++ b/src/calibre/startup.py @@ -120,7 +120,8 @@ if not _run_once: object.__setattr__(self, 'name', name) def __getattribute__(self, attr): - if attr == 'name': + if attr in ('name', '__enter__', '__str__', '__unicode__', + '__repr__'): return object.__getattribute__(self, attr) fobject = object.__getattribute__(self, 'fobject') return getattr(fobject, attr) @@ -141,6 +142,10 @@ if not _run_once: def __unicode__(self): return repr(self).decode('utf-8') + def __enter__(self): + fobject = object.__getattribute__(self, 'fobject') + fobject.__enter__() + return self m = mode[0] random = len(mode) > 1 and mode[1] == '+'