mirror of
https://github.com/Pardus-LiderAhenk/ahenk
synced 2024-11-26 01:12:15 +03:00
implementing plugin manager (in progress)
This commit is contained in:
parent
5e2a058412
commit
83f4e86329
7 changed files with 92 additions and 14 deletions
29
opt/ahenk/base/messaging/MessageResponseQueue.py
Normal file
29
opt/ahenk/base/messaging/MessageResponseQueue.py
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Author: İsmail BAŞARAN <ismail.basaran@tubitak.gov.tr> <basaran.ismaill@gmail.com>
|
||||||
|
|
||||||
|
import threading
|
||||||
|
from base.Scope import Scope
|
||||||
|
|
||||||
|
class MessageResponseQueue(threading.Thread):
|
||||||
|
"""
|
||||||
|
This class handles responses and sends it to lider server.
|
||||||
|
"""
|
||||||
|
def __init__(self,outQueue):
|
||||||
|
super(MessageResponseQueue, self).__init__()
|
||||||
|
scope = Scope.getInstance()
|
||||||
|
self.logger = scope.getLogger()
|
||||||
|
self.messageManager = scope.getMessageManager()
|
||||||
|
self.outQueue = outQueue
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
try:
|
||||||
|
# This item will send response to lider.
|
||||||
|
# item must be response message. Response message may be generic message type
|
||||||
|
responseMessage = self.outQueue.get()
|
||||||
|
print(item)
|
||||||
|
# Call message manager for response
|
||||||
|
self.messageManager.sendResponse(responseMessage)
|
||||||
|
self.outQueue.task_done()
|
||||||
|
except:
|
||||||
|
pass
|
|
@ -9,7 +9,7 @@ class AbstractCommand(object):
|
||||||
super(AbstractCommand, self).__init__()
|
super(AbstractCommand, self).__init__()
|
||||||
self.scope = Scope.getInstance()
|
self.scope = Scope.getInstance()
|
||||||
|
|
||||||
def run():
|
def handle_task(task):
|
||||||
# implement this metot from command
|
# implement this metot from command
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -20,6 +20,13 @@ class AbstractCommand(object):
|
||||||
print('Logger did not found')
|
print('Logger did not found')
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def configurationManager(self):
|
||||||
|
try:
|
||||||
|
return self.scope.getConfigurationManager()
|
||||||
|
except Exception as e:
|
||||||
|
print('ConfigurationManager did not found')
|
||||||
|
return None
|
||||||
|
|
||||||
def addMessageResponseQueue(self):
|
def addMessageResponseQueue(self):
|
||||||
# TODO implement response queue
|
# TODO implement response queue
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -1,16 +1,27 @@
|
||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Author: İsmail BAŞARAN <ismail.basaran@tubitak.gov.tr> <basaran.ismaill@gmail.com>
|
# Author: İsmail BAŞARAN <ismail.basaran@tubitak.gov.tr> <basaran.ismaill@gmail.com>
|
||||||
|
import threading
|
||||||
|
from base.Scope import Scope
|
||||||
|
|
||||||
class Plugin(object):
|
class Plugin(threading.Thread):
|
||||||
"""docstring for Plugin"""
|
"""docstring for Plugin"""
|
||||||
def __init__(self, name,mainModule):
|
def __init__(self, name,InQueue):
|
||||||
super(Plugin, self).__init__()
|
super(Plugin, self).__init__()
|
||||||
self.name = name
|
self.name = name
|
||||||
self.mainModule = mainModule
|
self.InQueue = InQueue
|
||||||
|
self.scope=Scope.getInstance()
|
||||||
|
self.pluginManager = self.scope.getPluginManager()
|
||||||
|
|
||||||
|
def run():
|
||||||
|
try:
|
||||||
|
task=self.InQueue.get()
|
||||||
|
command = self.pluginManager.findCommand(task.getCommandId())
|
||||||
|
command.handle_task(task)
|
||||||
|
# TODO add result to response queue
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print("exception occured when executing plugin")
|
||||||
|
|
||||||
def getName(self):
|
def getName(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
def getMainModule(self):
|
|
||||||
return self.mainModule
|
|
||||||
|
|
|
@ -20,11 +20,20 @@ class PluginManager(object):
|
||||||
if not os.path.isdir(location) or not self.configManager.get("PLUGIN", "mainModuleName") + ".py" in os.listdir(location):
|
if not os.path.isdir(location) or not self.configManager.get("PLUGIN", "mainModuleName") + ".py" in os.listdir(location):
|
||||||
continue
|
continue
|
||||||
info = imp.find_module(self.configManager.get("PLUGIN", "mainModuleName"), [location])
|
info = imp.find_module(self.configManager.get("PLUGIN", "mainModuleName"), [location])
|
||||||
mainModule = self.loadSinglePlugin(info):
|
#mainModule = self.loadSinglePlugin(info):
|
||||||
self.plugins.append(Plugin(pname,mainModule))
|
self.plugins.append(Plugin(pname,mainModule))
|
||||||
|
|
||||||
def loadSinglePlugin(pluginInfo):
|
def createQueueForPlugin(self):
|
||||||
return imp.load_module(self.configManager.get("PLUGIN", "mainModuleName"), pluginInfo)
|
|
||||||
|
|
||||||
def findSinglePlugin(pluginName):
|
|
||||||
pass # Not implemented yet
|
def loadSinglePlugin(self,pluginInfo):
|
||||||
|
return imp.load_module(self.configManager.get("PLUGIN", "mainModuleName"), *pluginInfo)
|
||||||
|
|
||||||
|
def findSinglePlugin(self,pluginName):
|
||||||
|
for plugin in self.getPlugins():
|
||||||
|
if plugin["name"] == self.plugins:
|
||||||
|
return self.loadSinglePlugin(plugin)
|
||||||
|
|
||||||
|
|
||||||
|
def findCommand(self,comamndName):
|
||||||
|
pass
|
||||||
|
|
22
opt/ahenk/plugins/plugin1/command1.py
Normal file
22
opt/ahenk/plugins/plugin1/command1.py
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Author: İsmail BAŞARAN <ismail.basaran@tubitak.gov.tr> <basaran.ismaill@gmail.com>
|
||||||
|
|
||||||
|
from base.plugin.AbstractCommand import AbstractCommand
|
||||||
|
|
||||||
|
class MySamplePlugin(AbstractCommand):
|
||||||
|
"""docstring for MySamplePlugin"""
|
||||||
|
def __init__(self, task):
|
||||||
|
super(MySamplePlugin, self).__init__()
|
||||||
|
self.task = task
|
||||||
|
|
||||||
|
def handle_task(self):
|
||||||
|
print("This is command 1 ")
|
||||||
|
|
||||||
|
|
||||||
|
def handle_task(task):
|
||||||
|
# Do what ever you want here
|
||||||
|
# You can create command class but it is not necessary
|
||||||
|
# You can use directly this method.
|
||||||
|
myPlugin = MySamplePlugin(task)
|
||||||
|
myPlugin.handle_task()
|
0
opt/ahenk/plugins/plugin1/command2.py
Normal file
0
opt/ahenk/plugins/plugin1/command2.py
Normal file
|
@ -4,5 +4,5 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def run(val):
|
def info():
|
||||||
print "oo yeah plugin1 " + str(val)
|
return None
|
||||||
|
|
Loading…
Reference in a new issue