From 2b72375347fa661b40f8e88661d2da2364595f11 Mon Sep 17 00:00:00 2001 From: Chris Warrick Date: Fri, 26 Jan 2024 00:53:35 +0100 Subject: [PATCH] =?UTF-8?q?Fix=20#3750=20=E2=80=94=20fix=20TypeError=20in?= =?UTF-8?q?=20nikola=20new=5Fpost=20--available-formats?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.txt | 2 ++ nikola/plugin_manager.py | 5 +++++ nikola/plugins/command/new_post.py | 18 +++++++----------- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 61798a2240..f0fc64cbb8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -7,6 +7,8 @@ Features Bugfixes -------- +* Fix ``nikola new_post --available-formats`` crashing with TypeError + (Issue #3750) * Fix the new plugin manager not loading plugins if the plugin folder is a symlink (Issue #3741) * Fix the ``nikola plugin`` command not working (Issue #3736) diff --git a/nikola/plugin_manager.py b/nikola/plugin_manager.py index 37c32ea264..ae93205bcf 100644 --- a/nikola/plugin_manager.py +++ b/nikola/plugin_manager.py @@ -59,6 +59,7 @@ class PluginCandidate: name: str description: Optional[str] + friendly_name: str plugin_id: str category: str compiler: Optional[str] @@ -72,6 +73,7 @@ class PluginInfo: name: str description: Optional[str] + friendly_name: str plugin_id: str category: str compiler: Optional[str] @@ -129,6 +131,7 @@ def locate_plugins(self) -> List[PluginCandidate]: continue category = config["Nikola"].get("PluginCategory") compiler = config["Nikola"].get("Compiler") + friendly_name = config["Nikola"].get("friendlyname") or name if not category: self.logger.warning(f"{plugin_id} does not specify any category (Nikola.PluginCategory is missing in .plugin file) - plugin will not be loaded") self.has_warnings = True @@ -144,6 +147,7 @@ def locate_plugins(self) -> List[PluginCandidate]: PluginCandidate( name=name, description=description, + friendly_name=friendly_name, plugin_id=plugin_id, category=category, compiler=compiler, @@ -225,6 +229,7 @@ def load_plugins(self, candidates: List[PluginCandidate]) -> None: info = PluginInfo( name=name, description=candidate.description, + friendly_name=candidate.friendly_name, plugin_id=candidate.plugin_id, category=candidate.category, compiler=candidate.compiler, diff --git a/nikola/plugins/command/new_post.py b/nikola/plugins/command/new_post.py index aa9662592f..beb139eeb4 100644 --- a/nikola/plugins/command/new_post.py +++ b/nikola/plugins/command/new_post.py @@ -520,22 +520,18 @@ def print_compilers(self): False ]) - for name, (_, _, pi) in self.site.disabled_compilers.items(): - if pi.details.has_option('Nikola', 'Friendlyname'): - f_name = pi.details.get('Nikola', 'Friendlyname') - else: - f_name = name - if name in compilers_raw: + for plugin in self.site.disabled_compilers.values(): + if plugin.name in compilers_raw: unused_compilers.append([ - name, - f_name, - compilers_raw[name], + plugin.name, + plugin.friendly_name, + compilers_raw[plugin.name], False ]) else: disabled_compilers.append([ - name, - f_name, + plugin.name, + plugin.friendly_name, (), False ])