mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Restrict writing of enum fields to allowed values only
This commit is contained in:
parent
01641c8b6e
commit
376bcdddaa
@ -159,7 +159,17 @@ class WritingTest(BaseTest):
|
||||
self.assertEqual(tuple(map(f.for_book, (1,2,3))), ('Two', 'Two', 'three'))
|
||||
del cache2
|
||||
|
||||
# TODO: Test different column types
|
||||
# TODO: Test different column types rating, #rating, series, #series,
|
||||
|
||||
# Enum
|
||||
self.assertFalse(cache.set_field('#enum', {1:'Not allowed'}))
|
||||
self.assertEqual(cache.set_field('#enum', {1:'One', 2:'One', 3:'Three'}), {1, 3})
|
||||
self.assertEqual(cache.set_field('#enum', {1:None}), set([1]))
|
||||
cache2 = self.init_cache(cl)
|
||||
for c in (cache, cache2):
|
||||
for i, val in {1:None, 2:'One', 3:'Three'}.iteritems():
|
||||
self.assertEqual(c.field_for('#enum', i), val)
|
||||
del cache2
|
||||
|
||||
def tests():
|
||||
return unittest.TestLoader().loadTestsFromTestCase(WritingTest)
|
||||
|
@ -295,7 +295,8 @@ class Writer(object):
|
||||
pass
|
||||
# TODO: Remember to change commas to | when writing authors to sqlite
|
||||
elif field.is_many:
|
||||
self.set_books_func = many_one
|
||||
self.set_books_func = (self.set_books_for_enum if dt ==
|
||||
'enumeration' else many_one)
|
||||
else:
|
||||
self.set_books_func = (one_one_in_books if field.metadata['table']
|
||||
== 'books' else one_one_in_other)
|
||||
@ -311,3 +312,13 @@ class Writer(object):
|
||||
allow_case_change)
|
||||
return dirtied
|
||||
|
||||
def set_books_for_enum(self, book_id_val_map, db, field,
|
||||
allow_case_change):
|
||||
allowed = set(field.metadata['display']['enum_values'])
|
||||
book_id_val_map = {k:v for k, v in book_id_val_map.iteritems() if v is
|
||||
None or v in allowed}
|
||||
if not book_id_val_map:
|
||||
return set()
|
||||
return many_one(book_id_val_map, db, field, False)
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user