def test_datetime(self): # {{{ ' Test the reading of datetimes stored in the db ' from calibre.utils.date import parse_date from calibre.db.tables import c_parse, UNDEFINED_DATE, _c_speedup # First test parsing of string to UTC time for raw in ('2013-07-22 15:18:29+05:30', ' 2013-07-22 15:18:29+00:00', '2013-07-22 15:18:29', '2003-09-21 23:30:00-06:00'): self.assertTrue(_c_speedup(raw)) ctime = c_parse(raw) pytime = parse_date(raw, assume_utc=True) self.assertEqual(ctime, pytime) self.assertEqual(c_parse(2003).year, 2003) for x in (None, '', 'abc'): self.assertEqual(UNDEFINED_DATE, c_parse(x))
def get_custom_and_extra(self, idx, label=None, num=None, index_is_id=False): if label is not None: data = self.custom_column_label_map[label] if num is not None: data = self.custom_column_num_map[num] idx = idx if index_is_id else self.id(idx) row = self.data._data[idx] ans = row[self.FIELD_MAP[data['num']]] if data['is_multiple'] and data['datatype'] == 'text': ans = ans.split( data['multiple_seps']['cache_to_list']) if ans else [] if data['display'].get('sort_alpha', False): ans.sort(key=lambda x: x.lower()) if data['datatype'] == 'datetime' and isinstance(ans, string_or_bytes): from calibre.db.tables import c_parse, UNDEFINED_DATE ans = c_parse(ans) if ans is UNDEFINED_DATE: ans = None if data['datatype'] != 'series': return (ans, None) ign, lt = self.custom_table_names(data['num']) extra = self.conn.get('''SELECT extra FROM %s WHERE book=?''' % lt, (idx, ), all=False) return (ans, extra)
def __init__(self, db, composites, datetimes, val, series_col, series_sort_col): from calibre.db.tables import c_parse self.db = db self._composites = composites for num in datetimes: val[num] = c_parse(val[num]) if val[num] is UNDEFINED_DATE: val[num] = None list.__init__(self, val) self._must_do = len(composites) > 0 self._series_col = series_col self._series_sort_col = series_sort_col self._series_sort = None
def get_custom(self, idx, label=None, num=None, index_is_id=False): if label is not None: data = self.custom_column_label_map[label] if num is not None: data = self.custom_column_num_map[num] row = self.data._data[idx] if index_is_id else self.data[idx] ans = row[self.FIELD_MAP[data['num']]] if data['is_multiple'] and data['datatype'] == 'text': ans = ans.split(data['multiple_seps']['cache_to_list']) if ans else [] if data['display'].get('sort_alpha', False): ans.sort(key=lambda x:x.lower()) if data['datatype'] == 'datetime' and isinstance(ans, string_or_bytes): from calibre.db.tables import c_parse, UNDEFINED_DATE ans = c_parse(ans) if ans is UNDEFINED_DATE: ans = None return ans
def get_custom_and_extra(self, idx, label=None, num=None, index_is_id=False): if label is not None: data = self.custom_column_label_map[label] if num is not None: data = self.custom_column_num_map[num] idx = idx if index_is_id else self.id(idx) row = self.data._data[idx] ans = row[self.FIELD_MAP[data['num']]] if data['is_multiple'] and data['datatype'] == 'text': ans = ans.split(data['multiple_seps']['cache_to_list']) if ans else [] if data['display'].get('sort_alpha', False): ans.sort(key=lambda x: x.lower()) if data['datatype'] == 'datetime' and isinstance(ans, string_or_bytes): from calibre.db.tables import c_parse, UNDEFINED_DATE ans = c_parse(ans) if ans is UNDEFINED_DATE: ans = None if data['datatype'] != 'series': return (ans, None) ign,lt = self.custom_table_names(data['num']) extra = self.conn.get('''SELECT extra FROM %s WHERE book=?'''%lt, (idx,), all=False) return (ans, extra)