From d40a680dc981306a2e02a7a8774b69a43770b686 Mon Sep 17 00:00:00 2001 From: syntron Date: Wed, 11 Dec 2024 21:19:19 +0100 Subject: [PATCH 1/4] [OMCSession] fix muteable argument for class --- OMPython/__init__.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/OMPython/__init__.py b/OMPython/__init__.py index 825d2c46d..9e713a2c9 100644 --- a/OMPython/__init__.py +++ b/OMPython/__init__.py @@ -540,8 +540,11 @@ def getClassNames(self, className=None, recursive=False, qualified=False, sort=F class OMCSession(OMCSessionHelper, OMCSessionBase): - def __init__(self, readonly=False, serverFlag='--interactive=corba', timeout = 10.0, docker = None, dockerContainer = None, dockerExtraArgs = [], dockerOpenModelicaPath = "omc", dockerNetwork = None): - OMCSessionHelper.__init__(self) + def __init__(self, readonly = False, serverFlag ='--interactive=corba', timeout = 10.0, + docker = None, dockerContainer = None, dockerExtraArgs = None, dockerOpenModelicaPath = "omc", + dockerNetwork = None): + if dockerExtraArgs is None: + dockerExtraArgs = [] OMCSessionBase.__init__(self, readonly) self._create_omc_log_file("objid") # Locating and using the IOR From a7ef281900495fa0b8936840ce975ef7bd52ba62 Mon Sep 17 00:00:00 2001 From: syntron Date: Wed, 11 Dec 2024 21:15:00 +0100 Subject: [PATCH 2/4] [OMCSessionZMQ] fix muteable argument for class --- OMPython/__init__.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/OMPython/__init__.py b/OMPython/__init__.py index 9e713a2c9..b35855748 100644 --- a/OMPython/__init__.py +++ b/OMPython/__init__.py @@ -685,8 +685,11 @@ def sendExpression(self, command, parsed=True): class OMCSessionZMQ(OMCSessionHelper, OMCSessionBase): - def __init__(self, readonly=False, timeout = 10.00, docker = None, dockerContainer = None, dockerExtraArgs = [], dockerOpenModelicaPath = "omc", dockerNetwork = None, port = None): - OMCSessionHelper.__init__(self) + def __init__(self, readonly=False, timeout = 10.00, + docker = None, dockerContainer = None, dockerExtraArgs = None, dockerOpenModelicaPath = "omc", + dockerNetwork = None, port = None): + if dockerExtraArgs is None: + dockerExtraArgs = [] OMCSessionBase.__init__(self, readonly) # Locating and using the IOR if sys.platform != 'win32' or docker or dockerContainer: From d6dbac8058967546cc114cbcfbda012d8f9ef23a Mon Sep 17 00:00:00 2001 From: syntron Date: Wed, 11 Dec 2024 21:18:43 +0100 Subject: [PATCH 3/4] [OMCSessionHelper] allow definition of omhome as argument to the class --- OMPython/__init__.py | 66 +++++++++++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 23 deletions(-) diff --git a/OMPython/__init__.py b/OMPython/__init__.py index b35855748..26853fa52 100644 --- a/OMPython/__init__.py +++ b/OMPython/__init__.py @@ -122,23 +122,38 @@ def kill(self): def wait(self, timeout): return self.process.wait(timeout=timeout) -class OMCSessionHelper(): - def __init__(self): - # Get the path to the OMC executable, if not installed this will be None - omc_env_home = os.environ.get('OPENMODELICAHOME') - if omc_env_home: - self.omhome = omc_env_home - else: - path_to_omc = shutil.which("omc") - if path_to_omc is None: + +class OMCSessionHelper: + def __init__(self, omhome: str = None): + self.omhome = None + + # use the provided path + if omhome is not None: + self.omhome = omhome + return + + # check the environment variable + omhome = os.environ.get('OPENMODELICAHOME') + if omhome is not None: + self.omhome = omhome + return + + # Get the path to the OMC executable, if not installed this will be None + path_to_omc = shutil.which("omc") + if path_to_omc is not None: + self.omhome = os.path.dirname(os.path.dirname(path_to_omc)) + return + raise ValueError("Cannot find OpenModelica executable, please install from openmodelica.org") - self.omhome = os.path.dirname(os.path.dirname(path_to_omc)) - def _get_omc_path(self): - try: - return os.path.join(self.omhome, 'bin', 'omc') - except BaseException: - logger.error("The OpenModelica compiler is missing in the System path (%s), please install it" % os.path.join(self.omhome, 'bin', 'omc')) - raise + + def _get_omc_path(self): + try: + return os.path.join(self.omhome, 'bin', 'omc') + except BaseException: + logger.error("The OpenModelica compiler is missing in the System path (%s), please install it" + % os.path.join(self.omhome, 'bin', 'omc')) + raise + class OMCSessionBase(with_metaclass(abc.ABCMeta, object)): @@ -540,11 +555,13 @@ def getClassNames(self, className=None, recursive=False, qualified=False, sort=F class OMCSession(OMCSessionHelper, OMCSessionBase): - def __init__(self, readonly = False, serverFlag ='--interactive=corba', timeout = 10.0, + def __init__(self, omhome: str = None, readonly = False, serverFlag ='--interactive=corba', timeout = 10.0, docker = None, dockerContainer = None, dockerExtraArgs = None, dockerOpenModelicaPath = "omc", dockerNetwork = None): if dockerExtraArgs is None: dockerExtraArgs = [] + + OMCSessionHelper.__init__(self, omhome=omhome) OMCSessionBase.__init__(self, readonly) self._create_omc_log_file("objid") # Locating and using the IOR @@ -685,11 +702,13 @@ def sendExpression(self, command, parsed=True): class OMCSessionZMQ(OMCSessionHelper, OMCSessionBase): - def __init__(self, readonly=False, timeout = 10.00, + def __init__(self, omhome: str = None, readonly=False, timeout = 10.00, docker = None, dockerContainer = None, dockerExtraArgs = None, dockerOpenModelicaPath = "omc", dockerNetwork = None, port = None): if dockerExtraArgs is None: dockerExtraArgs = [] + + OMCSessionHelper.__init__(self, omhome=omhome) OMCSessionBase.__init__(self, readonly) # Locating and using the IOR if sys.platform != 'win32' or docker or dockerContainer: @@ -799,7 +818,8 @@ class ModelicaSystemError(Exception): class ModelicaSystem(object): - def __init__(self, fileName=None, modelName=None, lmodel=None, useCorba=False, commandLineOptions=None, + def __init__(self, omhome: str = None, fileName=None, modelName=None, lmodel=None, + useCorba=False, commandLineOptions=None, variableFilter=None, customBuildDirectory=None, verbose=True, raiseerrors=False): # 1 """ "constructor" @@ -812,9 +832,9 @@ def __init__(self, fileName=None, modelName=None, lmodel=None, useCorba=False, c """ if fileName is None and modelName is None and not lmodel: # all None if useCorba: - self.getconn = OMCSession() + self.getconn = OMCSession(omhome=omhome) else: - self.getconn = OMCSessionZMQ() + self.getconn = OMCSessionZMQ(omhome=omhome) return self.tree = None @@ -837,9 +857,9 @@ def __init__(self, fileName=None, modelName=None, lmodel=None, useCorba=False, c self._verbose = verbose if useCorba: - self.getconn = OMCSession() + self.getconn = OMCSession(omhome=omhome) else: - self.getconn = OMCSessionZMQ() + self.getconn = OMCSessionZMQ(omhome=omhome) ## needed for properly deleting the OMCSessionZMQ self._omc_log_file = self.getconn._omc_log_file From 3f88ef58c4fa1345303ede977e7d8ed3c18d5cfb Mon Sep 17 00:00:00 2001 From: syntron Date: Wed, 11 Dec 2024 22:11:40 +0100 Subject: [PATCH 4/4] fix argument order - move omhome at the end * if arguments are used by position, new arguments CANNOT be added as first argument ... --- OMPython/__init__.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/OMPython/__init__.py b/OMPython/__init__.py index 26853fa52..bd5fc198b 100644 --- a/OMPython/__init__.py +++ b/OMPython/__init__.py @@ -555,9 +555,9 @@ def getClassNames(self, className=None, recursive=False, qualified=False, sort=F class OMCSession(OMCSessionHelper, OMCSessionBase): - def __init__(self, omhome: str = None, readonly = False, serverFlag ='--interactive=corba', timeout = 10.0, + def __init__(self, readonly = False, serverFlag ='--interactive=corba', timeout = 10.0, docker = None, dockerContainer = None, dockerExtraArgs = None, dockerOpenModelicaPath = "omc", - dockerNetwork = None): + dockerNetwork = None, omhome: str = None): if dockerExtraArgs is None: dockerExtraArgs = [] @@ -702,9 +702,9 @@ def sendExpression(self, command, parsed=True): class OMCSessionZMQ(OMCSessionHelper, OMCSessionBase): - def __init__(self, omhome: str = None, readonly=False, timeout = 10.00, + def __init__(self, readonly=False, timeout = 10.00, docker = None, dockerContainer = None, dockerExtraArgs = None, dockerOpenModelicaPath = "omc", - dockerNetwork = None, port = None): + dockerNetwork = None, port = None, omhome: str = None): if dockerExtraArgs is None: dockerExtraArgs = [] @@ -818,9 +818,10 @@ class ModelicaSystemError(Exception): class ModelicaSystem(object): - def __init__(self, omhome: str = None, fileName=None, modelName=None, lmodel=None, + def __init__(self, fileName=None, modelName=None, lmodel=None, useCorba=False, commandLineOptions=None, - variableFilter=None, customBuildDirectory=None, verbose=True, raiseerrors=False): # 1 + variableFilter=None, customBuildDirectory=None, verbose=True, raiseerrors=False, + omhome: str = None): # 1 """ "constructor" It initializes to load file and build a model, generating object, exe, xml, mat, and json files. etc. It can be called :