Aura SL5 Hooks: Added
HOOK_PLUGIN_LOAD = ‘on_plugin_load’ HOOK_FILE_LOAD = ‘on_file_load’ HOOK_RELOAD = ‘on_reload’ HOOK_UPSTREAM = ‘on_folder_change’
on_folder_change() and on_reload() to trigger logic after hot-reloads. Use this to “daisy chain” execution to parent scripts like secure_packer.py for complex packages.
Developer Guide: Plugin Lifecycle Hooks¶
Aura SL5 allows plugins (Maps) to define specific “Hooks” that are executed automatically when the module’s state changes. This is essential for advanced workflows like the Secure Private Map system.
The on_folder_change hook Hook¶
Implemented on_folder_change hook detection. The reloader now scans up the directory
The on_reload() Hook¶
The on_reload() function is an optional function you can define in any Map module.
Behavior¶
Trigger: Executed immediately after a module is successfully hot-reloaded (file modification + voice trigger).
Context: Runs within the main application thread.
Safety: Wrapped in a
try/exceptblock. Errors here will be logged but will not crash the application.
Usage Pattern: The “Daisy Chain”¶
For complex packages (like Private Maps), you often have many sub-files, but only one central script (secure_packer.py) should handle the logic.
You can use the hook to delegate the task upwards:
# Example: Delegating logic to a parent script
import importlib.util
from pathlib import Path
import logging
logger = logging.getLogger(__name__)
def on_reload():
"""
Searches for 'secure_packer.py' in parent directories and executes it.
"""
logger.info("🔄 Map modified. Triggering packer...")
current_path = Path(__file__).resolve()
search_dir = current_path.parent
packer_script = None
# Search upwards (max 4 levels)
for _ in range(4):
candidate = search_dir / "secure_packer.py"
if candidate.exists():
packer_script = candidate
break
if search_dir.name in ["maps", "config"]: break
search_dir = search_dir.parent
if packer_script:
try:
# Dynamic Import & Execution
spec = importlib.util.spec_from_file_location("packer_dyn", packer_script)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
if hasattr(module, 'on_reload'):
module.on_reload()
except Exception as e:
logger.error(f"❌ Failed to run packer: {e}")