NRLMMD-GEOIPS / NRLMMD-GEOIPS/pluginify

`retry_get_plugin` raises `TypeError` when called for yaml-based interfaces

Open
#20 0 comments 0 reactions 1 assignee View on GitHub

@coleman-m is already working on this.

Since May 22, 2026.

Dominant language
Python
Stars
1
Forks
0
PR merge metrics
No merged PRs in 30d

Description

Requested Update

Description
  • When get_yaml_plugin falls back to retry_get_plugin, the fallback attempts interface_obj.__class__.__base__(), which raises TypeError: Can't instantiate abstract class BaseYamlInterface with abstract method validator. This masks the real error and prevents any useful diagnostic from reaching the caller.
Background and Motivation
  • BaseYamlInterface inherits from BaseInterface and has an abstract validator method. Calling __base__() on a concrete interface subclass therefore tries to instantiate BaseYamlInterface directly, which fails.
  • This path is only hit when the happy path of get_yaml_plugin fails (e.g. plugin name not found in the registered file), so it is normally hidden behind successful lookups. It surfaced while developing tests for PR #17.
Code to demonstrate issue
  • Trigger any path that causes get_yaml_plugin to fall through to retry_get_plugin for a yaml-based interface. For example, splice a fake registry entry whose name field in the on-disk YAML does not match the registry key, then call:
self.real_reg_validator.get_yaml_plugin(configs, "<mismatched-name>")

Expected: a helpful error indicating the plugin could not be found. Actual:

TypeError: Can't instantiate abstract class BaseYamlInterface with abstract method validator

raised from pluginify/plugin_registry.py:847 at the line base_interface_class = interface_obj.__class__.__base__().

Checklist for Completion
  • Investigate the intent of the __base__() call in retry_get_plugin -- it appears to assume the base class is concrete, which is not true for yaml-based interfaces.
  • Replace the abstract-class instantiation with a working construct (likely just use interface_obj itself, or look up the class without instantiating).
  • Add a regression test that exercises the fallback path for a yaml-based interface.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.