2019-09-23 23:20:14 +00:00
<!doctype html>
< html lang = "en" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1, minimum-scale=1" / >
2020-02-04 20:46:17 +00:00
< meta name = "generator" content = "pdoc 0.7.4" / >
< title > src.onionrplugins API documentation< / title >
2019-09-23 23:20:14 +00:00
< meta name = "description" content = "Onionr - Private P2P Communication …" / >
< link href = 'https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css' rel = 'stylesheet' >
< link href = 'https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/8.0.0/sanitize.min.css' rel = 'stylesheet' >
< link href = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github.min.css" rel = "stylesheet" >
2020-02-04 20:46:17 +00:00
< style > . flex { display : flex !important } body { line-height : 1.5 em } # content { padding : 20 px } # sidebar { padding : 30 px ; overflow : hidden } . http-server-breadcrumbs { font-size : 130 % ; margin : 0 0 15 px 0 } # footer { font-size : .75 em ; padding : 5 px 30 px ; border-top : 1 px solid #ddd ; text-align : right } # footer p { margin : 0 0 0 1 em ; display : inline-block } # footer p : last-child { margin-right : 30 px } h1 , h2 , h3 , h4 , h5 { font-weight : 300 } h1 { font-size : 2.5 em ; line-height : 1.1 em } h2 { font-size : 1.75 em ; margin : 1 em 0 .50 em 0 } h3 { font-size : 1.4 em ; margin : 25 px 0 10 px 0 } h4 { margin : 0 ; font-size : 105 % } a { color : #058 ; text-decoration : none ; transition : color .3 s ease-in-out } a : hover { color : #e82 } . title code { font-weight : bold } h2 [ id ^ = "header-" ] { margin-top : 2 em } . ident { color : #900 } pre code { background : #f8f8f8 ; font-size : .8 em ; line-height : 1.4 em } code { background : #f2f2f1 ; padding : 1 px 4 px ; overflow-wrap : break-word } h1 code { background : transparent } pre { background : #f8f8f8 ; border : 0 ; border-top : 1 px solid #ccc ; border-bottom : 1 px solid #ccc ; margin : 1 em 0 ; padding : 1 ex } # http-server-module-list { display : flex ; flex-flow : column } # http-server-module-list div { display : flex } # http-server-module-list dt { min-width : 10 % } # http-server-module-list p { margin-top : 0 } . toc ul , # index { list-style-type : none ; margin : 0 ; padding : 0 } # index code { background : transparent } # index h3 { border-bottom : 1 px solid #ddd } # index ul { padding : 0 } # index h4 { font-weight : bold } # index h4 + ul { margin-bottom : .6 em } @ media ( min-width : 200ex ) { # index . two-column { column-count : 2 } } @ media ( min-width : 300ex ) { # index . two-column { column-count : 3 } } dl { margin-bottom : 2 em } dl dl : last-child { margin-bottom : 4 em } dd { margin : 0 0 1 em 3 em } # header-classes + dl > dd { margin-bottom : 3 em } dd dd { margin-left : 2 em } dd p { margin : 10 px 0 } . name { background : #eee ; font-weight : bold ; font-size : .85 em ; padding : 5 px 10 px ; display : inline-block ; min-width : 40 % } . name : hover { background : #e0e0e0 } . name > span : first-child { white-space : nowrap } . name . class > span : nth-child ( 2 ) { margin-left : .4 em } . inherited { color : #999 ; border-left : 5 px solid #eee ; padding-left : 1 em } . inheritance em { font-style : normal ; font-weight : bold } . desc h2 { font-weight : 400 ; font-size : 1.25 em } . desc h3 { font-size : 1 em } . desc dt code { background : inherit } . source summary , . git-link-div { color : #666 ; text-align : right ; font-weight : 400 ; font-size : .8 em ; text-transform : uppercase } . source summary > * { white-space : nowrap ; cursor : pointer } . git-link { color : inherit ; margin-left : 1 em } . source pre { max-height : 500 px ; overflow : auto ; margin : 0 } . source pre code { font-size : 12 px ; overflow : visible } . hlist { list-style : none } . hlist li { display : inline } . hlist li : after { content : ',\2002' } . hlist li : last-child : after { content : none } . hlist . hlist { display : inline ; padding-left : 1 em } img { max-width : 100 % } . admonition { padding : .1 em .5 em ; margin-bottom : 1 em } . admonition-title { font-weight : bold } . admonition . note , . admonition . info , . admonition . important { background : #aef } . admonition . todo , . admonition . versionadded , . admonition . tip , . admonition . hint { background : #dfd } . admonition . warning , . admonition . versionchanged , . admonition . deprecated { background : #fd4 } . admonition . error , . admonition . danger , . admonition . caution { background : lightpink } < / style >
2019-09-23 23:20:14 +00:00
< style media = "screen and (min-width: 700px)" > @ media screen and ( min-width : 700px ) { # sidebar { width : 30 % } # content { width : 70 % ; max-width : 100 ch ; padding : 3 em 4 em ; border-left : 1 px solid #ddd } pre code { font-size : 1 em } . item . name { font-size : 1 em } main { display : flex ; flex-direction : row-reverse ; justify-content : flex-end } . toc ul ul , # index ul { padding-left : 1.5 em } . toc > ul > li { margin-top : .5 em } } < / style >
< style media = "print" > @ media print { # sidebar h1 { page-break-before : always } . source { display : none } } @ media print { * { background : transparent !important ; color : #000 !important ; box-shadow : none !important ; text-shadow : none !important } a [ href ] : after { content : " (" attr ( href ) ")" ; font-size : 90 % } a [ href ] [ title ] : after { content : none } abbr [ title ] : after { content : " (" attr ( title ) ")" } . ir a : after , a [ href ^ = "javascript:" ] : after , a [ href ^ = "#" ] : after { content : "" } pre , blockquote { border : 1 px solid #999 ; page-break-inside : avoid } thead { display : table-header-group } tr , img { page-break-inside : avoid } img { max-width : 100 % !important } @ page { margin : 0 . 5cm } p , h2 , h3 { orphans : 3 ; widows : 3 } h1 , h2 , h3 , h4 , h5 , h6 { page-break-after : avoid } } < / style >
< / head >
< body >
< main >
< article id = "content" >
< header >
2020-02-04 20:46:17 +00:00
< h1 class = "title" > Module < code > src.onionrplugins< / code > < / h1 >
2019-09-23 23:20:14 +00:00
< / header >
< section id = "section-intro" >
< p > Onionr - Private P2P Communication< / p >
< p > This file deals with management of modules/plugins.< / p >
< details class = "source" >
2020-02-04 20:46:17 +00:00
< summary >
< span > Expand source code< / span >
< / summary >
2019-09-23 23:20:14 +00:00
< pre > < code class = "python" > ' ' '
Onionr - Private P2P Communication
This file deals with management of modules/plugins.
' ' '
' ' '
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see < https://www.gnu.org/licenses/> .
' ' '
import os, re, importlib
from . import onionrevents as events
import config, logger
from utils import identifyhome
# set data dir
dataDir = identifyhome.identify_home()
_pluginsfolder = dataDir + ' plugins/'
_instances = dict()
config.reload()
2020-02-04 20:46:17 +00:00
def reload(stop_event = True):
2019-09-23 23:20:14 +00:00
' ' '
Reloads all the plugins
' ' '
check()
try:
enabled_plugins = get_enabled_plugins()
if stop_event is True:
logger.debug(' Reloading all plugins...' )
else:
logger.debug(' Loading all plugins...' )
if stop_event is True:
for plugin in enabled_plugins:
2020-02-04 20:46:17 +00:00
stop(plugin)
2019-09-23 23:20:14 +00:00
for plugin in enabled_plugins:
2020-02-04 20:46:17 +00:00
start(plugin)
2019-09-23 23:20:14 +00:00
return True
except:
logger.error(' Failed to reload plugins.' )
return False
2020-02-04 20:46:17 +00:00
def enable(name, start_event = True):
2019-09-23 23:20:14 +00:00
' ' '
Enables a plugin
' ' '
check()
if exists(name):
enabled_plugins = get_enabled_plugins()
if not name in enabled_plugins:
try:
2020-02-04 20:46:17 +00:00
events.call(get_plugin(name), ' enable' )
2019-09-23 23:20:14 +00:00
except ImportError as e: # Was getting import error on Gitlab CI test " data"
# NOTE: If you are experiencing issues with plugins not being enabled, it might be this resulting from an error in the module
# can happen inconsistently (especially between versions)
logger.debug(' Failed to enable module; Import error: %s' % e)
return False
else:
enabled_plugins.append(name)
config.set(' plugins.enabled' , enabled_plugins, savefile=True)
if start_event is True:
start(name)
return True
else:
return False
else:
logger.error(' Failed to enable plugin \" %s\" , disabling plugin.' % name, terminal=True)
logger.debug(' Plugins folder not found: %s' % get_plugins_folder(str(name).lower()))
disable(name)
return False
2020-02-04 20:46:17 +00:00
def disable(name, stop_event = True):
2019-09-23 23:20:14 +00:00
' ' '
Disables a plugin
' ' '
check()
if is_enabled(name):
enabled_plugins = get_enabled_plugins()
enabled_plugins.remove(name)
config.set(' plugins.enabled' , enabled_plugins, True)
if exists(name):
2020-02-04 20:46:17 +00:00
events.call(get_plugin(name), ' disable' )
2019-09-23 23:20:14 +00:00
if stop_event is True:
stop(name)
2020-02-04 20:46:17 +00:00
def start(name):
2019-09-23 23:20:14 +00:00
' ' '
Starts the plugin
' ' '
check()
if exists(name):
try:
plugin = get_plugin(name)
if plugin is None:
raise Exception(' Failed to import module.' )
else:
2020-02-04 20:46:17 +00:00
events.call(plugin, ' start' )
2019-09-23 23:20:14 +00:00
return plugin
except:
logger.error(' Failed to start module \" %s\" .' % name)
else:
logger.error(' Failed to start nonexistant module \" %s\" .' % name)
return None
2020-02-04 20:46:17 +00:00
def stop(name):
2019-09-23 23:20:14 +00:00
' ' '
Stops the plugin
' ' '
check()
if exists(name):
try:
plugin = get_plugin(name)
if plugin is None:
raise Exception(' Failed to import module.' )
else:
2020-02-04 20:46:17 +00:00
events.call(plugin, ' stop' )
2019-09-23 23:20:14 +00:00
return plugin
except:
logger.error(' Failed to stop module \" %s\" .' % name)
else:
logger.error(' Failed to stop nonexistant module \" %s\" .' % name)
return None
# credit: https://stackoverflow.com/a/29589414
def import_module_from_file(full_path_to_module):
" " "
Import a module given the full path/filename of the .py file
Python 3.4
" " "
module = None
# Get module name and path from full path
module_dir, module_file = os.path.split(full_path_to_module)
module_name, module_ext = os.path.splitext(module_file)
module_name = module_dir # Module name must be unique otherwise it will get written in other imports
# Get module " spec" from filename
spec = importlib.util.spec_from_file_location(module_name,full_path_to_module)
module = spec.loader.load_module()
return module
def get_plugin(name):
' ' '
Returns the instance of a module
' ' '
check()
if str(name).lower() in _instances:
return _instances[str(name).lower()]
else:
_instances[str(name).lower()] = import_module_from_file(get_plugins_folder(str(name).lower(), False) + ' main.py' )
return get_plugin(name)
def get_plugins():
' ' '
Returns a list of plugins (deprecated)
' ' '
return _instances
def exists(name):
' ' '
Return value indicates whether or not the plugin exists
' ' '
return os.path.isdir(get_plugins_folder(str(name).lower()))
def get_enabled_plugins():
' ' '
Returns a list of the enabled plugins
' ' '
check()
return list(config.get(' plugins.enabled' , list()))
def is_enabled(name):
' ' '
Return value indicates whether or not the plugin is enabled
' ' '
return name in get_enabled_plugins()
def get_plugins_folder(name = None, absolute = True):
' ' '
Returns the path to the plugins folder
' ' '
path = ' '
if name is None:
path = _pluginsfolder
else:
# only allow alphanumeric characters
#path = _pluginsfolder + str(name.lower())
path = _pluginsfolder + re.sub(' [^0-9a-zA-Z_]+' , ' ' , str(name).lower())
if absolute is True:
path = os.path.abspath(path)
return path + ' /'
def get_plugin_data_folder(name, absolute = True):
' ' '
Returns the location of a plugin' s data folder
' ' '
return get_plugins_folder(name, absolute)
def check():
' ' '
Checks to make sure files exist
' ' '
if not config.is_set(' plugins' ):
logger.debug(' Generating plugin configuration data...' )
config.set(' plugins' , {' enabled' : []}, True)
if not os.path.exists(os.path.dirname(get_plugins_folder())):
logger.debug(' Generating plugin data folder...' )
try:
os.makedirs(os.path.dirname(get_plugins_folder()))
except FileExistsError:
pass
return< / code > < / pre >
< / details >
< / section >
< section >
< h2 class = "section-title" id = "header-submodules" > Sub-modules< / h2 >
< dl >
2020-02-04 20:46:17 +00:00
< dt > < code class = "name" > < a title = "src.onionrplugins.onionrevents" href = "onionrevents.html" > src.onionrplugins.onionrevents< / a > < / code > < / dt >
2019-09-23 23:20:14 +00:00
< dd >
< section class = "desc" > < p > Onionr - Private P2P Communication …< / p > < / section >
< / dd >
2020-02-04 20:46:17 +00:00
< dt > < code class = "name" > < a title = "src.onionrplugins.onionrpluginapi" href = "onionrpluginapi.html" > src.onionrplugins.onionrpluginapi< / a > < / code > < / dt >
2019-09-23 23:20:14 +00:00
< dd >
< section class = "desc" > < p > Onionr - Private P2P Communication …< / p > < / section >
< / dd >
< / dl >
< / section >
< section >
< / section >
< section >
< h2 class = "section-title" id = "header-functions" > Functions< / h2 >
< dl >
2020-02-04 20:46:17 +00:00
< dt id = "src.onionrplugins.check" > < code class = "name flex" >
2019-09-23 23:20:14 +00:00
< span > def < span class = "ident" > check< / span > < / span > (< span > )< / span >
< / code > < / dt >
< dd >
< section class = "desc" > < p > Checks to make sure files exist< / p > < / section >
< details class = "source" >
2020-02-04 20:46:17 +00:00
< summary >
< span > Expand source code< / span >
< / summary >
2019-09-23 23:20:14 +00:00
< pre > < code class = "python" > def check():
' ' '
Checks to make sure files exist
' ' '
if not config.is_set(' plugins' ):
logger.debug(' Generating plugin configuration data...' )
config.set(' plugins' , {' enabled' : []}, True)
if not os.path.exists(os.path.dirname(get_plugins_folder())):
logger.debug(' Generating plugin data folder...' )
try:
os.makedirs(os.path.dirname(get_plugins_folder()))
except FileExistsError:
pass
return< / code > < / pre >
< / details >
< / dd >
2020-02-04 20:46:17 +00:00
< dt id = "src.onionrplugins.disable" > < code class = "name flex" >
< span > def < span class = "ident" > disable< / span > < / span > (< span > name, stop_event=True)< / span >
2019-09-23 23:20:14 +00:00
< / code > < / dt >
< dd >
< section class = "desc" > < p > Disables a plugin< / p > < / section >
< details class = "source" >
2020-02-04 20:46:17 +00:00
< summary >
< span > Expand source code< / span >
< / summary >
< pre > < code class = "python" > def disable(name, stop_event = True):
2019-09-23 23:20:14 +00:00
' ' '
Disables a plugin
' ' '
check()
if is_enabled(name):
enabled_plugins = get_enabled_plugins()
enabled_plugins.remove(name)
config.set(' plugins.enabled' , enabled_plugins, True)
if exists(name):
2020-02-04 20:46:17 +00:00
events.call(get_plugin(name), ' disable' )
2019-09-23 23:20:14 +00:00
if stop_event is True:
stop(name)< / code > < / pre >
< / details >
< / dd >
2020-02-04 20:46:17 +00:00
< dt id = "src.onionrplugins.enable" > < code class = "name flex" >
< span > def < span class = "ident" > enable< / span > < / span > (< span > name, start_event=True)< / span >
2019-09-23 23:20:14 +00:00
< / code > < / dt >
< dd >
< section class = "desc" > < p > Enables a plugin< / p > < / section >
< details class = "source" >
2020-02-04 20:46:17 +00:00
< summary >
< span > Expand source code< / span >
< / summary >
< pre > < code class = "python" > def enable(name, start_event = True):
2019-09-23 23:20:14 +00:00
' ' '
Enables a plugin
' ' '
check()
if exists(name):
enabled_plugins = get_enabled_plugins()
if not name in enabled_plugins:
try:
2020-02-04 20:46:17 +00:00
events.call(get_plugin(name), ' enable' )
2019-09-23 23:20:14 +00:00
except ImportError as e: # Was getting import error on Gitlab CI test " data"
# NOTE: If you are experiencing issues with plugins not being enabled, it might be this resulting from an error in the module
# can happen inconsistently (especially between versions)
logger.debug(' Failed to enable module; Import error: %s' % e)
return False
else:
enabled_plugins.append(name)
config.set(' plugins.enabled' , enabled_plugins, savefile=True)
if start_event is True:
start(name)
return True
else:
return False
else:
logger.error(' Failed to enable plugin \" %s\" , disabling plugin.' % name, terminal=True)
logger.debug(' Plugins folder not found: %s' % get_plugins_folder(str(name).lower()))
disable(name)
return False< / code > < / pre >
< / details >
< / dd >
2020-02-04 20:46:17 +00:00
< dt id = "src.onionrplugins.exists" > < code class = "name flex" >
2019-09-23 23:20:14 +00:00
< span > def < span class = "ident" > exists< / span > < / span > (< span > name)< / span >
< / code > < / dt >
< dd >
< section class = "desc" > < p > Return value indicates whether or not the plugin exists< / p > < / section >
< details class = "source" >
2020-02-04 20:46:17 +00:00
< summary >
< span > Expand source code< / span >
< / summary >
2019-09-23 23:20:14 +00:00
< pre > < code class = "python" > def exists(name):
' ' '
Return value indicates whether or not the plugin exists
' ' '
return os.path.isdir(get_plugins_folder(str(name).lower()))< / code > < / pre >
< / details >
< / dd >
2020-02-04 20:46:17 +00:00
< dt id = "src.onionrplugins.get_enabled_plugins" > < code class = "name flex" >
2019-09-23 23:20:14 +00:00
< span > def < span class = "ident" > get_enabled_plugins< / span > < / span > (< span > )< / span >
< / code > < / dt >
< dd >
< section class = "desc" > < p > Returns a list of the enabled plugins< / p > < / section >
< details class = "source" >
2020-02-04 20:46:17 +00:00
< summary >
< span > Expand source code< / span >
< / summary >
2019-09-23 23:20:14 +00:00
< pre > < code class = "python" > def get_enabled_plugins():
' ' '
Returns a list of the enabled plugins
' ' '
check()
return list(config.get(' plugins.enabled' , list()))< / code > < / pre >
< / details >
< / dd >
2020-02-04 20:46:17 +00:00
< dt id = "src.onionrplugins.get_plugin" > < code class = "name flex" >
2019-09-23 23:20:14 +00:00
< span > def < span class = "ident" > get_plugin< / span > < / span > (< span > name)< / span >
< / code > < / dt >
< dd >
< section class = "desc" > < p > Returns the instance of a module< / p > < / section >
< details class = "source" >
2020-02-04 20:46:17 +00:00
< summary >
< span > Expand source code< / span >
< / summary >
2019-09-23 23:20:14 +00:00
< pre > < code class = "python" > def get_plugin(name):
' ' '
Returns the instance of a module
' ' '
check()
if str(name).lower() in _instances:
return _instances[str(name).lower()]
else:
_instances[str(name).lower()] = import_module_from_file(get_plugins_folder(str(name).lower(), False) + ' main.py' )
return get_plugin(name)< / code > < / pre >
< / details >
< / dd >
2020-02-04 20:46:17 +00:00
< dt id = "src.onionrplugins.get_plugin_data_folder" > < code class = "name flex" >
2019-09-23 23:20:14 +00:00
< span > def < span class = "ident" > get_plugin_data_folder< / span > < / span > (< span > name, absolute=True)< / span >
< / code > < / dt >
< dd >
< section class = "desc" > < p > Returns the location of a plugin's data folder< / p > < / section >
< details class = "source" >
2020-02-04 20:46:17 +00:00
< summary >
< span > Expand source code< / span >
< / summary >
2019-09-23 23:20:14 +00:00
< pre > < code class = "python" > def get_plugin_data_folder(name, absolute = True):
' ' '
Returns the location of a plugin' s data folder
' ' '
return get_plugins_folder(name, absolute)< / code > < / pre >
< / details >
< / dd >
2020-02-04 20:46:17 +00:00
< dt id = "src.onionrplugins.get_plugins" > < code class = "name flex" >
2019-09-23 23:20:14 +00:00
< span > def < span class = "ident" > get_plugins< / span > < / span > (< span > )< / span >
< / code > < / dt >
< dd >
< section class = "desc" > < p > Returns a list of plugins (deprecated)< / p > < / section >
< details class = "source" >
2020-02-04 20:46:17 +00:00
< summary >
< span > Expand source code< / span >
< / summary >
2019-09-23 23:20:14 +00:00
< pre > < code class = "python" > def get_plugins():
' ' '
Returns a list of plugins (deprecated)
' ' '
return _instances< / code > < / pre >
< / details >
< / dd >
2020-02-04 20:46:17 +00:00
< dt id = "src.onionrplugins.get_plugins_folder" > < code class = "name flex" >
2019-09-23 23:20:14 +00:00
< span > def < span class = "ident" > get_plugins_folder< / span > < / span > (< span > name=None, absolute=True)< / span >
< / code > < / dt >
< dd >
< section class = "desc" > < p > Returns the path to the plugins folder< / p > < / section >
< details class = "source" >
2020-02-04 20:46:17 +00:00
< summary >
< span > Expand source code< / span >
< / summary >
2019-09-23 23:20:14 +00:00
< pre > < code class = "python" > def get_plugins_folder(name = None, absolute = True):
' ' '
Returns the path to the plugins folder
' ' '
path = ' '
if name is None:
path = _pluginsfolder
else:
# only allow alphanumeric characters
#path = _pluginsfolder + str(name.lower())
path = _pluginsfolder + re.sub(' [^0-9a-zA-Z_]+' , ' ' , str(name).lower())
if absolute is True:
path = os.path.abspath(path)
return path + ' /' < / code > < / pre >
< / details >
< / dd >
2020-02-04 20:46:17 +00:00
< dt id = "src.onionrplugins.import_module_from_file" > < code class = "name flex" >
2019-09-23 23:20:14 +00:00
< span > def < span class = "ident" > import_module_from_file< / span > < / span > (< span > full_path_to_module)< / span >
< / code > < / dt >
< dd >
< section class = "desc" > < p > Import a module given the full path/filename of the .py file< / p >
< p > Python 3.4< / p > < / section >
< details class = "source" >
2020-02-04 20:46:17 +00:00
< summary >
< span > Expand source code< / span >
< / summary >
2019-09-23 23:20:14 +00:00
< pre > < code class = "python" > def import_module_from_file(full_path_to_module):
" " "
Import a module given the full path/filename of the .py file
Python 3.4
" " "
module = None
# Get module name and path from full path
module_dir, module_file = os.path.split(full_path_to_module)
module_name, module_ext = os.path.splitext(module_file)
module_name = module_dir # Module name must be unique otherwise it will get written in other imports
# Get module " spec" from filename
spec = importlib.util.spec_from_file_location(module_name,full_path_to_module)
module = spec.loader.load_module()
return module< / code > < / pre >
< / details >
< / dd >
2020-02-04 20:46:17 +00:00
< dt id = "src.onionrplugins.is_enabled" > < code class = "name flex" >
2019-09-23 23:20:14 +00:00
< span > def < span class = "ident" > is_enabled< / span > < / span > (< span > name)< / span >
< / code > < / dt >
< dd >
< section class = "desc" > < p > Return value indicates whether or not the plugin is enabled< / p > < / section >
< details class = "source" >
2020-02-04 20:46:17 +00:00
< summary >
< span > Expand source code< / span >
< / summary >
2019-09-23 23:20:14 +00:00
< pre > < code class = "python" > def is_enabled(name):
' ' '
Return value indicates whether or not the plugin is enabled
' ' '
return name in get_enabled_plugins()< / code > < / pre >
< / details >
< / dd >
2020-02-04 20:46:17 +00:00
< dt id = "src.onionrplugins.reload" > < code class = "name flex" >
< span > def < span class = "ident" > reload< / span > < / span > (< span > stop_event=True)< / span >
2019-09-23 23:20:14 +00:00
< / code > < / dt >
< dd >
< section class = "desc" > < p > Reloads all the plugins< / p > < / section >
< details class = "source" >
2020-02-04 20:46:17 +00:00
< summary >
< span > Expand source code< / span >
< / summary >
< pre > < code class = "python" > def reload(stop_event = True):
2019-09-23 23:20:14 +00:00
' ' '
Reloads all the plugins
' ' '
check()
try:
enabled_plugins = get_enabled_plugins()
if stop_event is True:
logger.debug(' Reloading all plugins...' )
else:
logger.debug(' Loading all plugins...' )
if stop_event is True:
for plugin in enabled_plugins:
2020-02-04 20:46:17 +00:00
stop(plugin)
2019-09-23 23:20:14 +00:00
for plugin in enabled_plugins:
2020-02-04 20:46:17 +00:00
start(plugin)
2019-09-23 23:20:14 +00:00
return True
except:
logger.error(' Failed to reload plugins.' )
return False< / code > < / pre >
< / details >
< / dd >
2020-02-04 20:46:17 +00:00
< dt id = "src.onionrplugins.start" > < code class = "name flex" >
< span > def < span class = "ident" > start< / span > < / span > (< span > name)< / span >
2019-09-23 23:20:14 +00:00
< / code > < / dt >
< dd >
< section class = "desc" > < p > Starts the plugin< / p > < / section >
< details class = "source" >
2020-02-04 20:46:17 +00:00
< summary >
< span > Expand source code< / span >
< / summary >
< pre > < code class = "python" > def start(name):
2019-09-23 23:20:14 +00:00
' ' '
Starts the plugin
' ' '
check()
if exists(name):
try:
plugin = get_plugin(name)
if plugin is None:
raise Exception(' Failed to import module.' )
else:
2020-02-04 20:46:17 +00:00
events.call(plugin, ' start' )
2019-09-23 23:20:14 +00:00
return plugin
except:
logger.error(' Failed to start module \" %s\" .' % name)
else:
logger.error(' Failed to start nonexistant module \" %s\" .' % name)
return None< / code > < / pre >
< / details >
< / dd >
2020-02-04 20:46:17 +00:00
< dt id = "src.onionrplugins.stop" > < code class = "name flex" >
< span > def < span class = "ident" > stop< / span > < / span > (< span > name)< / span >
2019-09-23 23:20:14 +00:00
< / code > < / dt >
< dd >
< section class = "desc" > < p > Stops the plugin< / p > < / section >
< details class = "source" >
2020-02-04 20:46:17 +00:00
< summary >
< span > Expand source code< / span >
< / summary >
< pre > < code class = "python" > def stop(name):
2019-09-23 23:20:14 +00:00
' ' '
Stops the plugin
' ' '
check()
if exists(name):
try:
plugin = get_plugin(name)
if plugin is None:
raise Exception(' Failed to import module.' )
else:
2020-02-04 20:46:17 +00:00
events.call(plugin, ' stop' )
2019-09-23 23:20:14 +00:00
return plugin
except:
logger.error(' Failed to stop module \" %s\" .' % name)
else:
logger.error(' Failed to stop nonexistant module \" %s\" .' % name)
return None< / code > < / pre >
< / details >
< / dd >
< / dl >
< / section >
< section >
< / section >
< / article >
< nav id = "sidebar" >
< h1 > Index< / h1 >
< div class = "toc" >
< ul > < / ul >
< / div >
< ul id = "index" >
< li > < h3 > Super-module< / h3 >
< ul >
2020-02-04 20:46:17 +00:00
< li > < code > < a title = "src" href = "../index.html" > src< / a > < / code > < / li >
2019-09-23 23:20:14 +00:00
< / ul >
< / li >
< li > < h3 > < a href = "#header-submodules" > Sub-modules< / a > < / h3 >
< ul >
2020-02-04 20:46:17 +00:00
< li > < code > < a title = "src.onionrplugins.onionrevents" href = "onionrevents.html" > src.onionrplugins.onionrevents< / a > < / code > < / li >
< li > < code > < a title = "src.onionrplugins.onionrpluginapi" href = "onionrpluginapi.html" > src.onionrplugins.onionrpluginapi< / a > < / code > < / li >
2019-09-23 23:20:14 +00:00
< / ul >
< / li >
< li > < h3 > < a href = "#header-functions" > Functions< / a > < / h3 >
< ul class = "" >
2020-02-04 20:46:17 +00:00
< li > < code > < a title = "src.onionrplugins.check" href = "#src.onionrplugins.check" > check< / a > < / code > < / li >
< li > < code > < a title = "src.onionrplugins.disable" href = "#src.onionrplugins.disable" > disable< / a > < / code > < / li >
< li > < code > < a title = "src.onionrplugins.enable" href = "#src.onionrplugins.enable" > enable< / a > < / code > < / li >
< li > < code > < a title = "src.onionrplugins.exists" href = "#src.onionrplugins.exists" > exists< / a > < / code > < / li >
< li > < code > < a title = "src.onionrplugins.get_enabled_plugins" href = "#src.onionrplugins.get_enabled_plugins" > get_enabled_plugins< / a > < / code > < / li >
< li > < code > < a title = "src.onionrplugins.get_plugin" href = "#src.onionrplugins.get_plugin" > get_plugin< / a > < / code > < / li >
< li > < code > < a title = "src.onionrplugins.get_plugin_data_folder" href = "#src.onionrplugins.get_plugin_data_folder" > get_plugin_data_folder< / a > < / code > < / li >
< li > < code > < a title = "src.onionrplugins.get_plugins" href = "#src.onionrplugins.get_plugins" > get_plugins< / a > < / code > < / li >
< li > < code > < a title = "src.onionrplugins.get_plugins_folder" href = "#src.onionrplugins.get_plugins_folder" > get_plugins_folder< / a > < / code > < / li >
< li > < code > < a title = "src.onionrplugins.import_module_from_file" href = "#src.onionrplugins.import_module_from_file" > import_module_from_file< / a > < / code > < / li >
< li > < code > < a title = "src.onionrplugins.is_enabled" href = "#src.onionrplugins.is_enabled" > is_enabled< / a > < / code > < / li >
< li > < code > < a title = "src.onionrplugins.reload" href = "#src.onionrplugins.reload" > reload< / a > < / code > < / li >
< li > < code > < a title = "src.onionrplugins.start" href = "#src.onionrplugins.start" > start< / a > < / code > < / li >
< li > < code > < a title = "src.onionrplugins.stop" href = "#src.onionrplugins.stop" > stop< / a > < / code > < / li >
2019-09-23 23:20:14 +00:00
< / ul >
< / li >
< / ul >
< / nav >
< / main >
< footer id = "footer" >
2020-02-04 20:46:17 +00:00
< p > Generated by < a href = "https://pdoc3.github.io/pdoc" > < cite > pdoc< / cite > 0.7.4< / a > .< / p >
2019-09-23 23:20:14 +00:00
< / footer >
< script src = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js" > < / script >
< script > hljs . initHighlightingOnLoad ( ) < / script >
< / body >
< / html >