From 1b65a307981d4d4cc7b94b6c3ac459c3b79dffd0 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Sun, 1 Feb 2026 13:50:22 -0600 Subject: [PATCH] Making some metadata entries immutable --- fanficfare/configurable.py | 26 ++++++++++++++++++++++++++ fanficfare/story.py | 6 ++++++ 2 files changed, 32 insertions(+) diff --git a/fanficfare/configurable.py b/fanficfare/configurable.py index 0542d46b..dbcf62e9 100644 --- a/fanficfare/configurable.py +++ b/fanficfare/configurable.py @@ -521,6 +521,22 @@ def get_valid_scalar_entries(): def get_valid_entries(): return get_valid_list_entries() + get_valid_scalar_entries() +## Metadata entries that are not allowed to be changed. +def get_immutable_entries(): + return list([ + 'authorId', + 'authorUrl', + 'seriesUrl', + 'storyId', + 'storyUrl', + 'langcode', + 'numChapters', + 'site', + 'anthology', + 'newforanthology', + 'cover_image', + ]) + # Moved here for test_config. def make_generate_cover_settings(param): vlist = [] @@ -587,6 +603,7 @@ class Configuration(ConfigParser): self.listTypeEntries = get_valid_list_entries() self.validEntries = get_valid_entries() + self.immutableEntries = get_immutable_entries() self.url_config_set = False @@ -631,6 +648,12 @@ class Configuration(ConfigParser): def getValidMetaList(self): return self.validEntries + self.getConfigList("extra_valid_entries") + def isImmutableMetaEntry(self, key): + return key in self.getImmutableMetaList() + + def getImmutableMetaList(self): + return self.immutableEntries + # used by adapters & writers, non-convention naming style def hasConfig(self, key): return self.has_config(self.sectionslist, key) @@ -1099,6 +1122,9 @@ class Configurable(object): def isValidMetaEntry(self, key): return self.configuration.isValidMetaEntry(key) + def isImmutableMetaEntry(self, key): + return self.configuration.isImmutableMetaEntry(key) + def getValidMetaList(self): return self.configuration.getValidMetaList() diff --git a/fanficfare/story.py b/fanficfare/story.py index 856abbdb..58e2311a 100644 --- a/fanficfare/story.py +++ b/fanficfare/story.py @@ -1138,6 +1138,9 @@ class Story(Requestable): removeallentities=False, doreplacements=True, seen_list={}): + if self.isImmutableMetaEntry(key): + doreplacements = False + # check for a cached value to speed processing if self.metadata_cache.is_cached_scalar(key,removeallentities,doreplacements): return self.metadata_cache.get_cached_scalar(key,removeallentities,doreplacements) @@ -1306,6 +1309,9 @@ class Story(Requestable): #print("getList(%s,%s)"%(listname,includelist)) retlist = [] + if self.isImmutableMetaEntry(listname): + doreplacements = False + # check for a cached value to speed processing if not skip_cache and self.metadata_cache.is_cached_list(listname,removeallentities,doreplacements): return self.metadata_cache.get_cached_list(listname,removeallentities,doreplacements)