Skip to content

Commit e028d00

Browse files
Fix #37: Use newest version of orhelper
1 parent c9d518e commit e028d00

2 files changed

Lines changed: 19 additions & 23 deletions

File tree

requirements.in

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ numpy
55
jpype1<1.5
66
pyyaml
77
rocketpy>=1.1.0
8-
nbformat>=5.2.0
8+
nbformat>=5.2.0
9+
orhelper>=0.1.3

rocketserializer/openrocket_runtime.py

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import jpype
77
import jpype.imports
8+
import orhelper
89

910
logger = logging.getLogger(__name__)
1011

@@ -143,17 +144,22 @@ def ensure_java_compatibility(jar_path: Path):
143144
)
144145

145146

146-
class OpenRocketSession:
147+
class OpenRocketSession(orhelper.OpenRocketInstance):
147148
def __init__(self, jar_path, log_level="OFF"):
148149
self.jar_path = Path(jar_path)
149150
if not self.jar_path.exists():
150151
raise FileNotFoundError(
151152
f"Jar file '{self.jar_path.as_posix()}' does not exist"
152153
)
153154

154-
self.log_level = log_level
155+
# Get the default JVM path early so we can pass it
156+
jvm_path = jpype.getDefaultJVMPath()
157+
# Initialize the base class with kwargs to bypass auto-discovery
158+
super().__init__(jar=str(self.jar_path), jvm=str(jvm_path), loglevel=log_level)
155159
self.openrocket = None
156-
self.started = False
160+
# for newest orhelper support
161+
self.openrocket_core = None
162+
self.openrocket_swing = None
157163

158164
def _resolve_packages(self):
159165
try:
@@ -173,8 +179,6 @@ def _block_loader(gui_module, field_name):
173179
field.setAccessible(False)
174180
loader.blockUntilLoaded()
175181
except (AttributeError, TypeError, RuntimeError, jpype.JException):
176-
# New OpenRocket versions can change internals; loading still works
177-
# without explicitly waiting in most cases.
178182
pass
179183

180184
def __enter__(self):
@@ -200,29 +204,27 @@ def __enter__(self):
200204
f"-Djava.class.path={self.jar_path.as_posix()}",
201205
)
202206

203-
self.openrocket, swing = self._resolve_packages()
207+
self.openrocket_core, self.openrocket_swing = self._resolve_packages()
208+
self.openrocket = self.openrocket_core # for legacy orhelper versions
204209

205210
guice = jpype.JPackage("com").google.inject.Guice
206211
logger_factory = jpype.JPackage("org").slf4j.LoggerFactory
207212
logger_class = jpype.JPackage("ch").qos.logback.classic.Logger
208-
logger_level = jpype.JPackage("ch").qos.logback.classic.Level
209213

210-
gui_module = swing.startup.GuiModule()
211-
plugin_module = self.openrocket.plugin.PluginModule()
214+
gui_module = self.openrocket_swing.startup.GuiModule()
215+
plugin_module = self.openrocket_core.plugin.PluginModule()
212216

213217
injector = guice.createInjector(gui_module, plugin_module)
214218

215-
app = self.openrocket.startup.Application
219+
app = self.openrocket_core.startup.Application
216220
app.setInjector(injector)
217221

218222
gui_module.startLoader()
219223
self._block_loader(gui_module, "presetLoader")
220224
self._block_loader(gui_module, "motorLoader")
221225

222226
root_logger = logger_factory.getLogger(logger_class.ROOT_LOGGER_NAME)
223-
root_logger.setLevel(
224-
getattr(logger_level, str(self.log_level), logger_level.ERROR)
225-
)
227+
root_logger.setLevel(self._translate_log_level())
226228

227229
self.started = True
228230
return self
@@ -235,18 +237,11 @@ def __exit__(self, ex_type, ex, tb):
235237
window.dispose()
236238
except (AttributeError, TypeError, RuntimeError, jpype.JException):
237239
pass
238-
# Do not call shutdownJVM() here: JPype <1.5 cannot restart the
239-
# JVM in the same process, so shutting it down automatically would
240-
# break any subsequent OpenRocketSession (e.g. in notebooks or
241-
# programmatic use). The JVM is cleaned up by JPype's atexit hook
242-
# when the process exits.
240+
# Do not call shutdownJVM() here: JPype <1.5 cannot restart the JVM
243241
finally:
244242
self.started = False
245243

246244
def load_doc(self, ork_filename: str):
247245
if not self.started:
248246
raise RuntimeError("OpenRocketSession has not been started")
249-
250-
java_file = jpype.java.io.File(ork_filename)
251-
loader = self.openrocket.file.GeneralRocketLoader(java_file)
252-
return loader.load()
247+
return orhelper.Helper(self).load_doc(ork_filename)

0 commit comments

Comments
 (0)