Automation Mojo Extension Package
Project description
Automation Mojo Extension Package
This is a python package that provides a mechanism for extending other python packages. This package is different from other python extension packages in that it uses the python Protocol typing in order to query module hierarchies for extensions.
Declaring an Extension Protocol
For example, if we want to be able to create instance of object like these from a factory.
class Hey:
def __str__(self):
return "Hey"
class Ho:
def __str__(self):
return "Ho"
# The following class defines a protocol that defines an extenstion type.
# Extensions
class MyExtTypeProtocol(ExtProtocol):
ext_protocol_name = "mojo-myextypeprotocol"
@classmethod
def give_me_a_hey(cls):
...
@classmethod
def give_me_a_ho(cls):
...
Implementing an Extension Protocol
The code below is implementing the extension protocol defined above. When a class implements an extension protocol, it will inherit from the protocol it is implementing. By inheriting from the protocol, it pulls in the ext_protocol_name variable which ensures that the derived type is declared to implement a given protocol.
Another important thing to look at in the code below is the class variable PRECEDENCE. The PRECEDENCE number indicates to the SuperFactory which extensions to return when an extension is queried based on precedence of overload and relevance. The higher number precedence is considered by the SuperFactory to have the most relevance.
class MyExtTypeFactory(ExtFactory, MyExtTypeProtocol):
PRECEDENCE = 10
@classmethod
def give_me_a_hey(cls):
return Hey
@classmethod
def give_me_a_ho(cls):
return Ho
Configuration for Custom Extensions
In order to be able to extend packages, you must tell the mojo-extension code where the root packages are that need to be searched for extension factories. Then what we do is we register the root modules under which the factory types will be found.
Setting the MJR_CONFIGURED_FACTORY_MODULES Variable from Python
from mojo.extension.extensionconfiguration import ExtensionConfiguration
from mojo.extension.wellknown import ConfiguredSuperFactorySingleton
ExtensionConfiguration.MJR_CONFIGURED_FACTORY_MODULES = [
"mypkg.factories",
]
Setting the MJR_CONFIGURED_FACTORY_MODULES Environment Variable
MJR_CONFIGURED_FACTORY_MODULES=mypkg.a.factories,mypkg.b.factories
Setting the MJR_CONFIGURED_FACTORY_MODULES in the Startup Config
[MOJO-EXTENSION]
MJR_CONFIGURED_FACTORY_MODULES=mypkg.a.factories,mypkg.b.factories
Loading Custom Factories
In order to load extension factories, we utilize the ConfiguredSuperFactorySingleton singleton object that is maintained by the mojo-extension package. You can get a reference to the super factory singleton by using code similar to the code below:
from mojo.extension.wellknown import ConfiguredSuperFactorySingleton
superfactory = ConfiguredSuperFactorySingleton()
Then when we want to get the type from the extension, we utilize the protocol that was declared and ask for the type using the function on the protocol that will return the type.
hey_type = self._super_factory.get_override_types_by_order(MyExtTypeProtocol.give_me_a_hey)
ho_type = self._super_factory.get_override_types_by_order(MyExtTypeProtocol.give_me_a_ho)
hey = hey_type()
ho = ho_type()
print("")
print(f"{hey}... {ho}... {hey}... {ho}...")
References
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file mojo_extension-1.3.18.tar.gz
.
File metadata
- Download URL: mojo_extension-1.3.18.tar.gz
- Upload date:
- Size: 9.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.0 CPython/3.12.1 Darwin/23.4.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9fc04db47058980e3270cd96b53b6fad18c65f869b124d18b7eec8aa549d14a0 |
|
MD5 | 2f1ba5300588e68e3a136a97162c700d |
|
BLAKE2b-256 | c1758cbfe5e0410f82618a60b3dbcca8ee3e72a97af8f8310ad2c844d4961f46 |
File details
Details for the file mojo_extension-1.3.18-py3-none-any.whl
.
File metadata
- Download URL: mojo_extension-1.3.18-py3-none-any.whl
- Upload date:
- Size: 11.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.0 CPython/3.12.1 Darwin/23.4.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d30c54565c1b3d8f7ff30276bce5dbc578766fccc9ea1541880510c708577951 |
|
MD5 | d3ee95d173f2dc348b6c2842b9fe6c4f |
|
BLAKE2b-256 | dbf8343901b7c75e1aec8e7e82f418385389e17f91b574d9d1f298324aabcec4 |