+ return self.cached_author
+
+ def kind_unicode(self):
+ return self.tag_unicode('kind')
+
+ def epoch_unicode(self):
+ return self.tag_unicode('epoch')
+
+ def genre_unicode(self):
+ return self.tag_unicode('genre')
+
+ def translators(self):
+ translators = self.get_extra_info_json().get('translators') or []
+ return [
+ '\xa0'.join(reversed(translator.split(', ', 1))) for translator in translators
+ ]
+
+ def translator(self):
+ translators = self.get_extra_info_json().get('translators')
+ if not translators:
+ return None
+ if len(translators) > 3:
+ translators = translators[:2]
+ others = ' i inni'
+ else:
+ others = ''
+ return ', '.join('\xa0'.join(reversed(translator.split(', ', 1))) for translator in translators) + others
+
+ def cover_source(self):
+ return self.get_extra_info_json().get('cover_source', self.parent.cover_source() if self.parent else '')
+
+ @property
+ def isbn_pdf(self):
+ return self.get_extra_info_json().get('isbn_pdf')
+
+ @property
+ def isbn_epub(self):
+ return self.get_extra_info_json().get('isbn_epub')
+
+ @property
+ def isbn_mobi(self):
+ return self.get_extra_info_json().get('isbn_mobi')
+