diff --git a/src/calibre/db/lazy.py b/src/calibre/db/lazy.py index 1e65a7cc1d..0b73b51ac0 100644 --- a/src/calibre/db/lazy.py +++ b/src/calibre/db/lazy.py @@ -342,3 +342,11 @@ class ProxyMetadata(Metadata): um = ga(self, '_user_metadata') return iter(um.custom_field_keys()) + def get_standard_metadata(self, field, make_copy=False): + field_metadata = ga(self, '_user_metadata') + if field in field_metadata and field_metadata[field]['kind'] == 'field': + if make_copy: + return deepcopy(field_metadata[field]) + return field_metadata[field] + return None + diff --git a/src/calibre/db/tests/reading.py b/src/calibre/db/tests/reading.py index 521139b7b0..cfb9597550 100644 --- a/src/calibre/db/tests/reading.py +++ b/src/calibre/db/tests/reading.py @@ -477,6 +477,16 @@ class ReadingTest(BaseTest): 'Standard field: %s not the same for book %s' % (field, book_id)) self.assertEqual(mi.format_field(field), pmi.format_field(field), 'Standard field format: %s not the same for book %s' % (field, book_id)) + def f(x): + try: + return x['label'] + except: + return x + if field not in {'#series_index'}: + v = pmi.get_standard_metadata(field) + self.assertTrue(v is None or isinstance(v, dict)) + self.assertEqual(f(mi.get_standard_metadata(field, False)), f(v), + 'get_standard_metadata() failed for field %s' % field) for field, meta in cache.field_metadata.custom_iteritems(): if meta['datatype'] != 'composite': self.assertEqual(f(getattr(mi, field)), f(getattr(pmi, field)),