From d7d94c3aebb1ce12c1385c5ecf3207a97fea9687 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 7 Feb 2014 08:39:44 +0530 Subject: [PATCH] calibredb set_metadata: Fix setting series_index with the -f argument not working --- src/calibre/library/cli.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/calibre/library/cli.py b/src/calibre/library/cli.py index 69e4bc811f..3eb0fc7996 100644 --- a/src/calibre/library/cli.py +++ b/src/calibre/library/cli.py @@ -643,9 +643,21 @@ def command_set_metadata(args, dbpath): val = field_from_string(field, val, fields[field]) vals[field] = val mi = db.get_metadata(book_id, index_is_id=True, get_cover=False) - for field, val in sorted(vals.iteritems(), key=lambda k: 1 if - k[0].endswith('_index') else 0): - mi.set(field, val) + for field, val in sorted( # ensure series_index fields are set last + vals.iteritems(), key=lambda k: 1 if k[0].endswith('_index') else 0): + if field.endswith('_index'): + try: + val = float(val) + except Exception: + print >>sys.stderr, 'The value %r is not a valid series index' % val + raise SystemExit(1) + sname = mi.get(field[:-6]) + if not sname: + print >>sys.stderr, 'Cannot set index for series before setting the series name' + raise SystemExit(1) + mi.set(field[:-6], sname, extra=val) + else: + mi.set(field, val) db.set_metadata(book_id, mi, force_changes=True) db.clean() do_show_metadata(db, book_id, False)