Export Functions
Guide to export functions from your python plugin to be used by other language modules within Plugify.
In the Plugify ecosystem, Python plugins can export functions to make them accessible to other plugins. This guide explains how to define and export functions in Python and provides examples to help you integrate your plugins seamlessly.
Basic Type Mapping
The following table lists how types are exposed to the Python API:
C++ Type | Python Type | Plugify Alias | Ref Support ? |
---|---|---|---|
void | None | void | ❌ |
bool | bool | bool | ✅ |
char | str | char8 | ✅ |
char16_t | str | char16 | ✅ |
int8_t | int | int8 | ✅ |
int16_t | int | int16 | ✅ |
int32_t | int | int32 | ✅ |
int64_t | int | int64 | ✅ |
uint8_t | int | uint8 | ✅ |
uint16_t | int | uint16 | ✅ |
uint32_t | int | uint32 | ✅ |
uint64_t | int | uint64 | ✅ |
uintptr_t | int | ptr64 | ✅ |
uintptr_t | int | ptr32 | ✅ |
float | float | float | ✅ |
double | float | double | ✅ |
void* | Callable | function | ❌ |
plg::string | str | string | ✅ |
plg::any | Any | any | ✅ |
plg::vector<bool> | list[bool] | bool | ✅ |
plg::vector<char> | list[str] | char8 | ✅ |
plg::vector<char16_t> | list[str] | char16 | ✅ |
plg::vector<int8_t> | list[int] | int8 | ✅ |
plg::vector<int16_t> | list[int] | int16 | ✅ |
plg::vector<int32_t> | list[int] | int32 | ✅ |
plg::vector<int64_t> | list[int] | int64 | ✅ |
plg::vector<uint8_t> | list[int] | uint8 | ✅ |
plg::vector<uint16_t> | list[int] | uint16 | ✅ |
plg::vector<uint32_t> | list[int] | uint32 | ✅ |
plg::vector<uint64_t> | list[int] | uint64 | ✅ |
plg::vector<uintptr_t> | list[int] | ptr64 | ✅ |
plg::vector<uintptr_t> | list[int] | ptr32 | ✅ |
plg::vector<float> | list[float] | float | ✅ |
plg::vector<double> | list[float] | double | ✅ |
plg::vector<plg::string> | list[str] | string | ✅ |
plg::vector<plg::any> | list[Any] | any | ✅ |
plg::vector<plg::vec2> | list[Vector2] | vec2 | ✅ |
plg::vector<plg::vec3> | list[Vector3] | vec3 | ✅ |
plg::vector<plg::vec4> | list[Vectpr4] | vec4 | ✅ |
plg::vector<plg::mat4x4> | list[Matrix4x4] | mat4x4 | ✅ |
plg::vec2 | Vector2 | vec2 | ✅ |
plg::vec3 | Vector3 | vec3 | ✅ |
plg::vec4 | Vector4 | vec4 | ✅ |
plg::mat4x4 | Matrix4x4 | mat4x4 | ✅ |
Exporting Functions in Python
Exporting functions in Python is simpler than in C++ because Python is a dynamically-typed language. You only need to define the function and specify it in the plugin manifest. Plugify's Python Language Module handles the rest.
Basic Example
Here’s a simple example of exporting a function in a Python plugin:
Function Definition
Plugin Manifest
To export the function, describe it in the plugin manifest under the exportedMethods
section:
Parameter and Return Type Conventions
Plugify uses specific conventions for parameter and return types to ensure compatibility across plugins. Below are the guidelines for Python:
1. Primitive Types
- Parameter: Pass primitive types (e.g.,
int
,float
) directly. - Return: Return primitive types directly.
2. Strings
- Parameter: Pass strings as
str
. - Return: Return strings as
str
.
3. Lists
- Parameter: Pass lists as
list
. - Return: Return lists as
list
.
4. Dictionaries
- Parameter: Pass dictionaries as
dict
. - Return: Return dictionaries as
dict
.
Advanced Example: Exporting Complex Functions
Here’s an example of exporting a function with complex parameter and return types:
Function Definition
Plugin Manifest
Handling Callbacks
Plugify allows you to export functions that accept callbacks as parameters. Here’s an example:
Function Definition
Plugin Manifest
Best Practices
- Define Functions Clearly: Ensure your functions are well-documented and easy to understand.
- Follow Type Conventions: Adhere to Plugify's type conventions for parameters and return values.
- Test Thoroughly: Test your exported functions to ensure they work as expected when called by other plugins.
- Update the Manifest: Always describe exported functions in the plugin manifest under the
exportedMethods
section.
Conclusion
Exporting functions in Python plugins is simple and straightforward. By defining your functions and describing them in the plugin manifest, you can create robust and interoperable plugins. For more advanced use cases, such as handling callbacks, use the techniques outlined in this guide.