diff --git a/RELEASE_NOTES.rst b/RELEASE_NOTES.rst index 5524ac840..a752b418f 100644 --- a/RELEASE_NOTES.rst +++ b/RELEASE_NOTES.rst @@ -3,6 +3,12 @@ Release notes ============= +3.0 (unreleased) +---------------- + +* The --embed option of applets is replaced with the environment variable + ARTIQ_APPLET_EMBED. + 2.0rc1 ------ diff --git a/artiq/applets/simple.py b/artiq/applets/simple.py index 47d3d43b4..c05d86384 100644 --- a/artiq/applets/simple.py +++ b/artiq/applets/simple.py @@ -94,10 +94,6 @@ class SimpleApplet: "--port", default=3250, type=int, help="TCP port to connect to") - self.argparser.add_argument( - "--embed", default=None, help="embed into GUI", - metavar="IPC_ADDRESS") - self._arggroup_datasets = self.argparser.add_argument_group("datasets") self.dataset_args = set() @@ -114,6 +110,7 @@ class SimpleApplet: def args_init(self): self.args = self.argparser.parse_args() + self.embed = os.getenv("ARTIQ_APPLET_EMBED") self.datasets = {getattr(self.args, arg.replace("-", "_")) for arg in self.dataset_args} @@ -123,17 +120,17 @@ class SimpleApplet: asyncio.set_event_loop(self.loop) def ipc_init(self): - if self.args.embed is not None: - self.ipc = AppletIPCClient(self.args.embed) + if self.embed is not None: + self.ipc = AppletIPCClient(self.embed) self.loop.run_until_complete(self.ipc.connect()) def ipc_close(self): - if self.args.embed is not None: + if self.embed is not None: self.ipc.close() def create_main_widget(self): self.main_widget = self.main_widget_class(self.args) - if self.args.embed is not None: + if self.embed is not None: self.ipc.set_close_cb(self.main_widget.close) if os.name == "nt": # HACK: if the window has a frame, there will be garbage @@ -166,7 +163,7 @@ class SimpleApplet: return data def filter_mod(self, mod): - if self.args.embed is not None: + if self.embed is not None: # the parent already filters for us return True @@ -201,7 +198,7 @@ class SimpleApplet: self.emit_data_changed(self.data, [mod]) def subscribe(self): - if self.args.embed is None: + if self.embed is None: self.subscriber = Subscriber("datasets", self.sub_init, self.sub_mod) self.loop.run_until_complete(self.subscriber.connect( @@ -210,7 +207,7 @@ class SimpleApplet: self.ipc.subscribe(self.datasets, self.sub_init, self.sub_mod) def unsubscribe(self): - if self.args.embed is None: + if self.embed is None: self.loop.run_until_complete(self.subscriber.close()) def run(self): diff --git a/artiq/gui/applets.py b/artiq/gui/applets.py index 4805fca2f..6874cdcfc 100644 --- a/artiq/gui/applets.py +++ b/artiq/gui/applets.py @@ -118,17 +118,16 @@ class _AppletDock(QDockWidgetCloseDetect): self.starting_stopping = True try: self.ipc = AppletIPCServer(self.datasets_sub) - if "$ipc_address" not in self.command: - logger.warning("IPC address missing from command for %s", - self.applet_name) command_tpl = string.Template(self.command) + python = sys.executable.replace("\\", "\\\\") command = command_tpl.safe_substitute( - python=sys.executable.replace("\\", "\\\\"), - ipc_address=self.ipc.get_address().replace("\\", "\\\\") + python=python, + artiq_applet=python + " -m artiq.applets." ) logger.debug("starting command %s for %s", command, self.applet_name) env = os.environ.copy() env["PYTHONUNBUFFERED"] = "1" + env["ARTIQ_APPLET_EMBED"] = self.ipc.get_address() try: await self.ipc.create_subprocess( *shlex.split(command), @@ -194,20 +193,19 @@ class _AppletDock(QDockWidgetCloseDetect): _templates = [ - ("Big number", "$python -m artiq.applets.big_number " - "--embed $ipc_address NUMBER_DATASET"), - ("Histogram", "$python -m artiq.applets.plot_hist " - "--embed $ipc_address COUNTS_DATASET " + ("Big number", "${artiq_applet}big_number " + "NUMBER_DATASET"), + ("Histogram", "${artiq_applet}plot_hist " + "COUNTS_DATASET " "--x BIN_BOUNDARIES_DATASET"), - ("XY", "$python -m artiq.applets.plot_xy " - "--embed $ipc_address Y_DATASET --x X_DATASET " + ("XY", "${artiq_applet}plot_xy " + "Y_DATASET --x X_DATASET " "--error ERROR_DATASET --fit FIT_DATASET"), - ("XY + Histogram", "$python -m artiq.applets.plot_xy_hist " - "--embed $ipc_address X_DATASET " + ("XY + Histogram", "${artiq_applet}plot_xy_hist " + "X_DATASET " "HIST_BIN_BOUNDARIES_DATASET " "HISTS_COUNTS_DATASET"), - ("Image", "$python -m artiq.applets.image " - "--embed $ipc_address IMG_DATASET"), + ("Image", "${artiq_applet}image IMG_DATASET"), ]