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] == '+'