mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Finish writing one-one fields
This commit is contained in:
parent
7f63b4bc40
commit
2e8e0f6daf
@ -41,11 +41,11 @@ class WritingTest(BaseTest):
|
||||
self.create_setter(name, setter))
|
||||
|
||||
def run_tests(self, tests):
|
||||
cl = self.cloned_library
|
||||
results = {}
|
||||
for test in tests:
|
||||
results[test] = []
|
||||
for val in test.vals:
|
||||
cl = self.cloned_library
|
||||
cache = self.init_cache(cl)
|
||||
cache.set_field(test.name, {1: val})
|
||||
cached_res = cache.field_for(test.name, 1)
|
||||
@ -65,11 +65,16 @@ class WritingTest(BaseTest):
|
||||
test.name, old_sqlite_res, sqlite_res))
|
||||
del db
|
||||
|
||||
|
||||
|
||||
def test_one_one(self):
|
||||
'Test setting of values in one-one fields'
|
||||
tests = []
|
||||
tests = [self.create_test('#yesno', (True, False, 'true', 'false', None))]
|
||||
for name, getter, setter in (
|
||||
('series_index', 'series_index', 'set_series_index'),
|
||||
('#float', None, None),
|
||||
):
|
||||
vals = ['1.5', None, 0, 1.0]
|
||||
tests.append(self.create_test(name, tuple(vals), getter, setter))
|
||||
|
||||
for name, getter, setter in (
|
||||
('pubdate', 'pubdate', 'set_pubdate'),
|
||||
('timestamp', 'timestamp', 'set_timestamp'),
|
||||
@ -78,6 +83,25 @@ class WritingTest(BaseTest):
|
||||
tests.append(self.create_test(
|
||||
name, ('2011-1-12', UNDEFINED_DATE, None), getter, setter))
|
||||
|
||||
for name, getter, setter in (
|
||||
('title', 'title', 'set_title'),
|
||||
('uuid', 'uuid', 'set_uuid'),
|
||||
('author_sort', 'author_sort', 'set_author_sort'),
|
||||
('sort', 'title_sort', 'set_title_sort'),
|
||||
('#comments', None, None),
|
||||
('comments', 'comments', 'set_comment'),
|
||||
):
|
||||
vals = ['something', None]
|
||||
if name not in {'comments', '#comments'}:
|
||||
# Setting text column to '' returns None in the new backend
|
||||
# and '' in the old. I think None is more correct.
|
||||
vals.append('')
|
||||
if name == 'comments':
|
||||
# Again new behavior of deleting comment rather than setting
|
||||
# empty string is more correct.
|
||||
vals.remove(None)
|
||||
tests.append(self.create_test(name, tuple(vals), getter, setter))
|
||||
|
||||
self.run_tests(tests)
|
||||
|
||||
def tests():
|
||||
|
@ -98,10 +98,14 @@ def get_adapter(name, metadata):
|
||||
|
||||
if name == 'title':
|
||||
return lambda x: ans(x) or _('Unknown')
|
||||
if name == 'author_sort':
|
||||
return lambda x: ans(x) or ''
|
||||
if name == 'authors':
|
||||
return lambda x: ans(x) or (_('Unknown'),)
|
||||
if name in {'timestamp', 'last_modified'}:
|
||||
return lambda x: ans(x) or UNDEFINED_DATE
|
||||
if name == 'series_index':
|
||||
return lambda x: 1.0 if ans(x) is None else ans(x)
|
||||
|
||||
return ans
|
||||
# }}}
|
||||
@ -148,13 +152,17 @@ class Writer(object):
|
||||
if dt == 'composite' or field.name in {
|
||||
'id', 'cover', 'size', 'path', 'formats', 'news'}:
|
||||
self.set_books_func = dummy
|
||||
elif self.name[0] == '#' and self.name.endswith('_index'):
|
||||
# TODO: Implement this
|
||||
pass
|
||||
elif field.is_many:
|
||||
# TODO: Implement this
|
||||
pass
|
||||
# TODO: Remember to change commas to | when writing authors to sqlite
|
||||
else:
|
||||
self.set_books_func = (one_one_in_books if field.metadata['table']
|
||||
== 'books' else one_one_in_other)
|
||||
if self.name in {'timestamp', 'uuid'}:
|
||||
if self.name in {'timestamp', 'uuid', 'sort'}:
|
||||
self.accept_vals = bool
|
||||
|
||||
def set_books(self, book_id_val_map, db):
|
||||
|
Loading…
x
Reference in New Issue
Block a user