Since I’m on a Raspi, your file paths might be slightly different. Here’s a minimal exmple that reporduces the issue:
/etc/openhab2/automation/lib/python/personal/mytreemanager.py:
from core.log import logging, LOG_PREFIX
class Tree(object):
def __init__(self):
self.hello_world = "Hello World"
/etc/openhab2/automation/lib/python/personal/myextension.py:
from core.log import logging, LOG_PREFIX
from personal.mytreemanager import Tree
class Myextension(object):
def __init__(self):
self.logger = logging.getLogger("{}.{}".format(LOG_PREFIX, self.__class__.__name__))
self.a_tree = Tree()
def test(self, the_class):
self.logger.info("the_class is {}, a_tree is {}".format(the_class, self.a_tree))
self.logger.info("isinstance(self.a_tree, Tree): {}".format(isinstance(self.a_tree, Tree)))
self.logger.info("isinstance(self.a_tree, the_class): {}".format(isinstance(self.a_tree, the_class)))
/etc/openhab2/automation/jsr223/python/myextension_init.py:
import core
from core.jsr223 import scope
from core.log import logging, LOG_PREFIX
import personal.myextension
reload(personal.myextension)
from personal.myextension import Myextension
LOG = logging.getLogger("{}.Myextension".format(LOG_PREFIX))
scriptExtension.importPreset("mypreset")
if "myextension" in locals():
LOG.info("Existing myextension [{}] in preset".format(myextension))
else:
import core
theExtension = Myextension()
core.JythonExtensionProvider.addValue("myextension", theExtension)
core.JythonExtensionProvider.addPreset("mypreset", ["myextension"], False)
scriptExtension.importPreset("mypreset")
LOG.warn("Added extension [{}] to preset".format(theExtension))
/etc/openhab2/automation/jsr223/python/testrule.py:
from core.jsr223 import scope
from core.rules import rule
from core.triggers import when
import personal.mytreemanager
reload(personal.mytreemanager)
from personal.mytreemanager import Tree
scriptExtension.importPreset("mypreset")
@rule("System started", tags="System")
@when("System started")
def testingrule(event):
testingrule.log.info("**** Begin ***")
myextension.test(personal.mytreemanager.Tree)
testingrule.log.info("**** End ***")
Logging output: the output isinstance(self.a_tree, the_class): 0
is the issue: when I pass the class as a parameter, it is not recognized anymore as the type of the object:
2020-01-14 19:29:27.179 [INFO ] [me.core.service.AbstractWatchService] - Loading script 'python/personal/myextension_init.py'
2020-01-14 19:29:39.442 [WARN ] [jsr223.jython.Myextension ] - Added extension [<personal.myextension.Myextension object at 0x3>] to preset
...
2020-01-14 19:30:53.782 [INFO ] [me.core.service.AbstractWatchService] - Loading script 'python/personal/testingrule.py'
...
2020-01-14 19:31:08.957 [INFO ] [jsr223.jython.System started ] - **** Begin ***
2020-01-14 19:31:08.993 [INFO ] [jsr223.jython.Myextension ] - the_class is <class 'personal.mytreemanager.Tree'>, a_tree is <personal.mytreemanager.Tree object at 0x5>
2020-01-14 19:31:09.028 [INFO ] [jsr223.jython.Myextension ] - isinstance(self.a_tree, Tree): 1
2020-01-14 19:31:09.062 [INFO ] [jsr223.jython.Myextension ] - isinstance(self.a_tree, the_class): 0
2020-01-14 19:31:09.094 [INFO ] [jsr223.jython.System started ] - **** End ***