proj_flow.base.registry

The proj_flow.base.registry allows building extension points, with ability to register the plugins with a decorator.

class proj_flow.base.registry.Registry(name: str)

Provides simple registry with the decorator attached to it, which implements extension point for plugin system. An extension point is a value created from this generic, with extendable interface type as the generic argument.

Known decorators

proj_flow.api.release.project_suites
Argument:

ProjectSuite

Used by:

src.proj_flow.log.release.add_release()

Project version reader and updater, package file name builder.

proj_flow.log.release.version_updaters
Argument:

VersionUpdaters

Used by:

src.proj_flow.log.release.add_release()

Additional version updaters, for instance, path to schema reference on GitHub.

proj_flow.log.rich_text.api.changelog_generators
Argument:

ChangelogGenerator

Used by:

src.proj_flow.ext.github.cli.release()

Changelog note generator used in CHANGELOG file. Not to confuse with generator, which may be used internally by Hosting.add_release.

Example

class Animal(ABC)
    @abstractmethod
    def speak(self): ...

animals = Registry[Animal]("Animal")

def speak_all():
    for animal in animals.get():
        animal.speak()

@animals.add
class Dog(Animal):
    def speak(self):
        print("woof!")
name: str
container: List[T]
add(cls: Type[T])
get()
find(filter: Callable[[T], K]) Tuple[T | None, K | None]
first() T | None
proj_flow.base.registry.quoted(s: str) str
proj_flow.base.registry.verbose_info()