53 lines
No EOL
1.8 KiB
ReStructuredText
53 lines
No EOL
1.8 KiB
ReStructuredText
Lifecycle Hooks
|
|
===============
|
|
|
|
Introduction
|
|
------------
|
|
In some cases it is useful to have functions triggered by events in an extensions lifecycle. Currently two such lifecycle events can be used, ``on_register``, and ``on_component``.
|
|
|
|
``on_register``
|
|
---------------
|
|
|
|
The ``on_register`` method can be used to have a function call as soon as the extension has been successfully registered to the microscope. For example:
|
|
|
|
.. code-block:: python
|
|
|
|
class MyExtension(BaseExtension):
|
|
def __init__(self):
|
|
|
|
# Track if the extension has been registered
|
|
self.registered = False
|
|
|
|
# Add lifecycle hooks
|
|
self.on_register(self.on_register_handler, args=(), kwargs={})
|
|
|
|
# Superclass init function
|
|
super().__init__("com.myname.myextension", version="0.0.0")
|
|
|
|
def on_register_handler(self, *args, **kwargs):
|
|
self.registered = True
|
|
print("Extension has been registered!")
|
|
|
|
|
|
``on_component``
|
|
----------------
|
|
|
|
The ``on_component`` method can be used to have a function call as soon as a particular LabThings component has been added. This can be used, for example, to get information about the microscope instance as soon as it is available. For example:
|
|
|
|
.. code-block:: python
|
|
|
|
class MyExtension(BaseExtension):
|
|
def __init__(self):
|
|
|
|
# Hold a reference to the microscope object as soon as it is available
|
|
self.microscope = None
|
|
|
|
# Add lifecycle hooks
|
|
self.on_component("com.myname.myextension", self.on_microscope_handler)
|
|
|
|
# Superclass init function
|
|
super().__init__("org.openflexure.microscope", version="0.0.0")
|
|
|
|
def on_microscope_handler(self, microscope_object):
|
|
print("Microscope object has been found!")
|
|
self.microscope = microscope_object |