Pop Release 6.0.0

The Plugin Oriented Programming implementation has reached version 6.0.0!

This version introduces many changes to the system and established a long researched baseline of functionality.

Why Version 6?

Pop is the 5th major iteration on the concept of Plugin Oriented Programming. It started as the Salt Loader System, then a project called pack, then pack in Julia, followed by another implementation in Python and then, finally, pop.

This release cleans up many of the concepts that were hold overs from earlier systems and starts to add some of the long aspirational features to the platform. It is therefore a worthy version “6”.

Dynamic Names

Version 6 introduces Dynamic Names to pop and implements a critical component of Plugin Oriented Programming.

Dynamic Names is part of the concept around App Merging. App Merging was introduced in pop 5, in that multiple applications can be merged onto the hub and configuration for said apps can also be merged onto the hub via the conf.integrate system.

But Dynamic Names allows for a plugin subsystem to be dynamically expanded by additional apps being installed. With Dynamic Names a plugin subsystem can be dynamically extended by simply installing an additional python package that defines additions to the used Dynamic Name. This makes extending a project via external repos and installs not only easy, but completely transparent.

hub._ and hub.__

One of the issues with the hub is that all references need to fully qualified. Pop 6 introduces hub._ as a dynamic reference to the current module and hub.__ as a dynamic reference to the current plugin subsystem.

Move init.new and __mod_init__ to __init__

To be more pythonic we have introduced the __init__ function as a replacement for the init.new function and for the __mod_init__ function. This helps to consolidate what these functions were used for into a single location.

Contracts dir Autodetected

In pop 5 it was suggested to make a mods and a contracts directory and statically direct the sub to both of them. In pop 6 this is still supported but now a sub can have a contracts directory inside and the contracts will be autoloaded.

Add getattr to the hub

Now getattr can look up nested refs on the hub: getattr(hub, ‘pop.sub.add’)

Don’t Need __init__.py files anymore

Python 3.3 deprecated the need to use __init__.py files. The old loading code was using these files to discern paths. Pop now uses the paths system introduced in Python 3.3.