Add get_standard_metadata() to ProxyMetadata

This commit is contained in:
Kovid Goyal 2013-07-24 12:50:26 +05:30
parent 7460446395
commit 821179170a
2 changed files with 18 additions and 0 deletions

View File

@ -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

View File

@ -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)),