Commit 7b743f36bbf8dd6c2e49390ce7e4b7b78f4798b4

Authored by Lucas Moura
Committed by Sergio Oliveira
1 parent c811c353

Update plugins dev documentation

Present how to implement plugins signals with new abstract methods.

Signed-off-by: Lucas Kanashiro <kanashiro.duarte@gmail.com>
Showing 1 changed file with 25 additions and 17 deletions   Show diff stats
docs/source/plugindev.rst
@@ -45,9 +45,9 @@ signals structure, some steps are required: @@ -45,9 +45,9 @@ signals structure, some steps are required:
45 CELERY_RESULT_BACKEND='djcelery.backends.cache:CacheBackend', 45 CELERY_RESULT_BACKEND='djcelery.backends.cache:CacheBackend',
46 ) 46 )
47 47
48 -* The plugin should import the method from colab.signals.tasks in order for the  
49 - plugin to use the necessary method to handle signals  
50 -* In the apps.py file it is necessary to declare a list variable containing all the 48 +* You must create signals.py in plugin root directory to implement both,
  49 + registered signals and connect signals.
  50 +* In the signals.py file it is necessary to declare a list variable containing all the
51 signals that the plugin will dispatch. It is suggested to name the variable 51 signals that the plugin will dispatch. It is suggested to name the variable
52 "registered_signals", but that nomenclature not strictly necessary. 52 "registered_signals", but that nomenclature not strictly necessary.
53 * It is also necessary to declare a variable containing the name of the plugin 53 * It is also necessary to declare a variable containing the name of the plugin
@@ -55,17 +55,10 @@ signals structure, some steps are required: @@ -55,17 +55,10 @@ signals structure, some steps are required:
55 contain any special character, such as dot or comma. It is suggested to name 55 contain any special character, such as dot or comma. It is suggested to name
56 the variable "short_name", but that nomenclature is not strictly 56 the variable "short_name", but that nomenclature is not strictly
57 necessary. 57 necessary.
58 -* In order to actually register the signals, it is necessary to call the method 58 +* In order to actually register the signals, it is necessary to implement the method
59 register_signal, which require the name of the plugin that is registering the 59 register_signal, which require the name of the plugin that is registering the
60 - signals and a list of signals to be registered as parameters. This method  
61 - should be called on the app method named __init__. Since the plugin class is a  
62 - subclass of AppConfig, the constructor of the parent must be calles as weel.  
63 -  
64 -.. code-block:: ṕython  
65 - def __init__(self, app_name, app_module):  
66 - super(ProxyGitlabAppConfig, self).__init__(app_name, app_module)  
67 - register_signal(self.short_name, self.signals_list)  
68 - 60 + signals and a list of signals to be registered as parameters. You must not
  61 + call this method nowhere.
69 * In order to listen for a given signal, it is required to create a handling 62 * In order to listen for a given signal, it is required to create a handling
70 method. This method should be located at a file named tasks.py in the same 63 method. This method should be located at a file named tasks.py in the same
71 directory as the plugins files. It also must be said that this method need to 64 directory as the plugins files. It also must be said that this method need to
@@ -81,12 +74,27 @@ signals structure, some steps are required: @@ -81,12 +74,27 @@ signals structure, some steps are required:
81 74
82 * With signals registered and handling method defined you must connect them. 75 * With signals registered and handling method defined you must connect them.
83 To do it you must call connect_signal passing signal name, sender and handling 76 To do it you must call connect_signal passing signal name, sender and handling
84 - method as arguments. This calling must be into ready function in apps.py, as  
85 - you can see below: 77 + method as arguments. This calling must be into ready function in apps.py.
  78 +
86 79
87 .. code-block:: python 80 .. code-block:: python
88 - def ready(self):  
89 - connect_signal(self.signal_name, self.sender, handling_method) 81 + from colab.plugins.utils.signals import AbstractSignal
  82 + from colab.signals.signals import register_signal, connect_signal
  83 + from colab.plugins.PLUGIN.tasks import HANDLING_METHOD
  84 +
  85 + class PluginSignals(AbstractSignal):
  86 + short_name = PLUGIN_NAME
  87 + signals_list = [SIGNAL1, SIGNAL2]
  88 +
  89 + def registered_signal(self):
  90 + register_signal(self.short_name, self.signals_list)
  91 +
  92 + def connect_signal(self):
  93 + connect_signal(self.signals_list[0], self.short_name,
  94 + HANDLING_METHOD)
  95 + connect_signal(self.signals_list[1], self.short_name,
  96 + HANDLING_METHOD)
  97 +
90 98
91 * To send a broadcast signal you must call send method anywhere passing signal name 99 * To send a broadcast signal you must call send method anywhere passing signal name
92 and sender as arguments. If necessary you can pass another parameters in 100 and sender as arguments. If necessary you can pass another parameters in