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))
|
self.create_setter(name, setter))
|
||||||
|
|
||||||
def run_tests(self, tests):
|
def run_tests(self, tests):
|
||||||
cl = self.cloned_library
|
|
||||||
results = {}
|
results = {}
|
||||||
for test in tests:
|
for test in tests:
|
||||||
results[test] = []
|
results[test] = []
|
||||||
for val in test.vals:
|
for val in test.vals:
|
||||||
|
cl = self.cloned_library
|
||||||
cache = self.init_cache(cl)
|
cache = self.init_cache(cl)
|
||||||
cache.set_field(test.name, {1: val})
|
cache.set_field(test.name, {1: val})
|
||||||
cached_res = cache.field_for(test.name, 1)
|
cached_res = cache.field_for(test.name, 1)
|
||||||
@ -65,11 +65,16 @@ class WritingTest(BaseTest):
|
|||||||
test.name, old_sqlite_res, sqlite_res))
|
test.name, old_sqlite_res, sqlite_res))
|
||||||
del db
|
del db
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_one_one(self):
|
def test_one_one(self):
|
||||||
'Test setting of values in one-one fields'
|
'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 (
|
for name, getter, setter in (
|
||||||
('pubdate', 'pubdate', 'set_pubdate'),
|
('pubdate', 'pubdate', 'set_pubdate'),
|
||||||
('timestamp', 'timestamp', 'set_timestamp'),
|
('timestamp', 'timestamp', 'set_timestamp'),
|
||||||
@ -78,6 +83,25 @@ class WritingTest(BaseTest):
|
|||||||
tests.append(self.create_test(
|
tests.append(self.create_test(
|
||||||
name, ('2011-1-12', UNDEFINED_DATE, None), getter, setter))
|
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)
|
self.run_tests(tests)
|
||||||
|
|
||||||
def tests():
|
def tests():
|
||||||
|
@ -98,10 +98,14 @@ def get_adapter(name, metadata):
|
|||||||
|
|
||||||
if name == 'title':
|
if name == 'title':
|
||||||
return lambda x: ans(x) or _('Unknown')
|
return lambda x: ans(x) or _('Unknown')
|
||||||
|
if name == 'author_sort':
|
||||||
|
return lambda x: ans(x) or ''
|
||||||
if name == 'authors':
|
if name == 'authors':
|
||||||
return lambda x: ans(x) or (_('Unknown'),)
|
return lambda x: ans(x) or (_('Unknown'),)
|
||||||
if name in {'timestamp', 'last_modified'}:
|
if name in {'timestamp', 'last_modified'}:
|
||||||
return lambda x: ans(x) or UNDEFINED_DATE
|
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
|
return ans
|
||||||
# }}}
|
# }}}
|
||||||
@ -148,13 +152,17 @@ class Writer(object):
|
|||||||
if dt == 'composite' or field.name in {
|
if dt == 'composite' or field.name in {
|
||||||
'id', 'cover', 'size', 'path', 'formats', 'news'}:
|
'id', 'cover', 'size', 'path', 'formats', 'news'}:
|
||||||
self.set_books_func = dummy
|
self.set_books_func = dummy
|
||||||
|
elif self.name[0] == '#' and self.name.endswith('_index'):
|
||||||
|
# TODO: Implement this
|
||||||
|
pass
|
||||||
elif field.is_many:
|
elif field.is_many:
|
||||||
# TODO: Implement this
|
# TODO: Implement this
|
||||||
pass
|
pass
|
||||||
|
# TODO: Remember to change commas to | when writing authors to sqlite
|
||||||
else:
|
else:
|
||||||
self.set_books_func = (one_one_in_books if field.metadata['table']
|
self.set_books_func = (one_one_in_books if field.metadata['table']
|
||||||
== 'books' else one_one_in_other)
|
== 'books' else one_one_in_other)
|
||||||
if self.name in {'timestamp', 'uuid'}:
|
if self.name in {'timestamp', 'uuid', 'sort'}:
|
||||||
self.accept_vals = bool
|
self.accept_vals = bool
|
||||||
|
|
||||||
def set_books(self, book_id_val_map, db):
|
def set_books(self, book_id_val_map, db):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user