Clear metadata cache after adapter metadata fetch. Cached metadata values may not be replace_metadata processed if fetched before their conditional dependencies. Revealed by AO3 one-shots using title for chapter name.

This commit is contained in:
Jim Miller 2021-01-17 13:45:16 -06:00
parent 210a6a5589
commit fd46963301
2 changed files with 17 additions and 1 deletions

View file

@ -296,6 +296,18 @@ class BaseSiteAdapter(Configurable):
def getStoryMetadataOnly(self,get_cover=True):
if not self.metadataDone:
self.doExtractChapterUrlsAndMetadata(get_cover=get_cover)
## Due to some adapters calling getMetadata()etc, values
## may have been cached during metadata collection and
## *before* other values that their replace_metadata
## depends on.
##
## Re-arranging the collection order isn't a good
## solution--title could depend on category just as easily
## as category on title.
##
## This clears the cache before title page etc and Calibre
## at least.
self.story.clear_processed_metadata_cache()
if not self.story.getMetadataRaw('dateUpdated'):
if self.story.getMetadataRaw('datePublished'):

View file

@ -477,7 +477,7 @@ class Story(Configurable):
self.replacements_prepped = False
self.chapter_error_count = 0
def prepare_replacements(self):
if not self.replacements_prepped and not self.is_lightweight():
# logger.debug("prepare_replacements")
@ -504,6 +504,10 @@ class Story(Configurable):
self.in_ex_cludes[ie] = set_in_ex_clude(ies)
self.replacements_prepped = True
def clear_processed_metadata_cache(self):
self.processed_metadata_cache = {}
self.processed_metadata_list_cache = {}
def set_chapters_range(self,first=None,last=None):
self.chapter_first=first
self.chapter_last=last