From 47bcd99264e43b341216b9525665de4ee034662c Mon Sep 17 00:00:00 2001 From: GRiker Date: Wed, 14 Nov 2012 09:00:58 -0700 Subject: [PATCH] Added library_name as available output field for CSV and XML catalogs. --- src/calibre/customize/__init__.py | 14 ++++++++++++-- src/calibre/library/catalogs/__init__.py | 2 +- src/calibre/library/catalogs/csv_xml.py | 10 ++++++++-- src/calibre/library/catalogs/epub_mobi.py | 4 +++- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/calibre/customize/__init__.py b/src/calibre/customize/__init__.py index 2570efebe1..ceeea863d3 100644 --- a/src/calibre/customize/__init__.py +++ b/src/calibre/customize/__init__.py @@ -447,8 +447,8 @@ class CatalogPlugin(Plugin): # {{{ # Return a list of requested fields, with opts.sort_by first all_std_fields = set( ['author_sort','authors','comments','cover','formats', - 'id','isbn','ondevice','pubdate','publisher','rating', - 'series_index','series','size','tags','timestamp', + 'id','isbn','library_name','ondevice','pubdate','publisher', + 'rating','series_index','series','size','tags','timestamp', 'title_sort','title','uuid','languages','identifiers']) all_custom_fields = set(db.custom_field_keys()) for field in list(all_custom_fields): @@ -460,6 +460,16 @@ class CatalogPlugin(Plugin): # {{{ if opts.fields != 'all': # Make a list from opts.fields requested_fields = set(opts.fields.split(',')) + + # Validate requested_fields + if requested_fields - all_fields: + from calibre.library import current_library_name + invalid_fields = sorted(list(requested_fields - all_fields)) + print("invalid --fields specified: %s" % ', '.join(invalid_fields)) + print("available fields in '%s': %s" % + (current_library_name(), ', '.join(sorted(list(all_fields))))) + raise ValueError("unable to generate catalog with specified fields") + fields = list(all_fields & requested_fields) else: fields = list(all_fields) diff --git a/src/calibre/library/catalogs/__init__.py b/src/calibre/library/catalogs/__init__.py index a5c98955e8..fdc8a53eb3 100644 --- a/src/calibre/library/catalogs/__init__.py +++ b/src/calibre/library/catalogs/__init__.py @@ -9,7 +9,7 @@ __docformat__ = 'restructuredtext en' FIELDS = ['all', 'title', 'title_sort', 'author_sort', 'authors', 'comments', - 'cover', 'formats','id', 'isbn', 'ondevice', 'pubdate', 'publisher', + 'cover', 'formats','id', 'isbn', 'library_name','ondevice', 'pubdate', 'publisher', 'rating', 'series_index', 'series', 'size', 'tags', 'timestamp', 'uuid', 'languages', 'identifiers'] diff --git a/src/calibre/library/catalogs/csv_xml.py b/src/calibre/library/catalogs/csv_xml.py index 0b7df385a1..90843bf154 100644 --- a/src/calibre/library/catalogs/csv_xml.py +++ b/src/calibre/library/catalogs/csv_xml.py @@ -48,17 +48,18 @@ class CSV_XML(CatalogPlugin): "Applies to: CSV, XML output formats"))] def run(self, path_to_output, opts, db, notification=DummyReporter()): + from calibre.library import current_library_name from calibre.utils.date import isoformat from calibre.utils.html2text import html2text - from lxml import etree from calibre.utils.logging import default_log as log + from lxml import etree self.fmt = path_to_output.rpartition('.')[2] self.notification = notification if opts.verbose: opts_dict = vars(opts) - log("%s(): Generating %s" % (self.name,self.fmt.upper())) + log("%s('%s'): Generating %s" % (self.name, current_library_name(), self.fmt.upper())) if opts.connected_device['is_device_connected']: log(" connected_device: %s" % opts.connected_device['name']) if opts_dict['search_text']: @@ -110,6 +111,8 @@ class CSV_XML(CatalogPlugin): for field in fields: if field.startswith('#'): item = db.get_field(entry['id'],field,index_is_id=True) + elif field == 'library_name': + item = current_library_name() elif field == 'title_sort': item = entry['sort'] else: @@ -215,6 +218,9 @@ class CSV_XML(CatalogPlugin): fmt.append(E.format(f.replace(os.sep, '/'))) record.append(fmt) + if 'library_name' in fields: + record.append(E.library_name(current_library_name())) + with open(path_to_output, 'w') as f: f.write(etree.tostring(root, encoding='utf-8', xml_declaration=True, pretty_print=True)) diff --git a/src/calibre/library/catalogs/epub_mobi.py b/src/calibre/library/catalogs/epub_mobi.py index 0645416ecf..3b36642c10 100644 --- a/src/calibre/library/catalogs/epub_mobi.py +++ b/src/calibre/library/catalogs/epub_mobi.py @@ -14,6 +14,7 @@ from calibre import strftime from calibre.customize import CatalogPlugin from calibre.customize.conversion import OptionRecommendation, DummyReporter from calibre.ebooks import calibre_cover +from calibre.library import current_library_name from calibre.library.catalogs import AuthorSortMismatchException, EmptyCatalogException from calibre.ptempfile import PersistentTemporaryFile from calibre.utils.localization import get_lang @@ -208,8 +209,9 @@ class EPUB_MOBI(CatalogPlugin): build_log = [] - build_log.append(u"%s(): Generating %s %sin %s environment, locale: '%s'" % + build_log.append(u"%s('%s'): Generating %s %sin %s environment, locale: '%s'" % (self.name, + current_library_name(), self.fmt, 'for %s ' % opts.output_profile if opts.output_profile else '', 'CLI' if opts.cli_environment else 'GUI',