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 ])