Skip to content

Commit 7f1d01c

Browse files
committed
Remove request ID and use ViewParams comparison instead
1 parent 57a6bbf commit 7f1d01c

2 files changed

Lines changed: 37 additions & 47 deletions

File tree

openmc_plotter/main_window.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1226,7 +1226,7 @@ def requestInitialPlot(self):
12261226

12271227
def requestPlotUpdate(self, view=None):
12281228
if self.model is None:
1229-
return None
1229+
return
12301230
if self.plot_manager is None:
12311231
self.plot_manager = self.model.plot_manager
12321232
self.plot_manager.plot_started.connect(self._on_plot_started)
@@ -1238,44 +1238,42 @@ def requestPlotUpdate(self, view=None):
12381238
view = self.model.activeView
12391239
view_snapshot = copy.deepcopy(view)
12401240
if self.model.can_reuse_maps(view_snapshot):
1241-
request_id = self.plot_manager.new_request_id()
1241+
view_params = self.model.view_params_payload(view_snapshot)
1242+
self.plot_manager.set_latest_view_params(view_params)
12421243
self.plot_manager.clear_pending()
12431244
self.model.makePlot(view_snapshot, self.model.ids_map, self.model.properties)
12441245
self.resetModels()
12451246
self.showCurrentView()
12461247
if not self.plot_manager.is_busy:
12471248
self._on_plot_idle()
1248-
return request_id
1249+
return
12491250
view_params = self.model.view_params_payload(view_snapshot)
1250-
request_id, started = self.plot_manager.enqueue(view_snapshot, view_params)
1251+
started = self.plot_manager.enqueue(view_snapshot, view_params)
12511252
if started:
12521253
self.statusBar().showMessage('Generating Plot...')
12531254
else:
12541255
self.statusBar().showMessage('Generating Plot... (update queued)')
1255-
return request_id
12561256

12571257
def waitForPlotIdle(self, timeout_ms=None):
12581258
if self.plot_manager is not None:
12591259
return self.plot_manager.wait_for_idle(timeout_ms)
12601260
return True
12611261

1262-
def _on_plot_started(self, request_id):
1262+
def _on_plot_started(self):
12631263
self.busyIndicator.show()
12641264
self.statusBar().showMessage('Generating Plot...')
12651265

1266-
def _on_plot_queued(self, request_id):
1266+
def _on_plot_queued(self):
12671267
self.statusBar().showMessage('Generating Plot... (update queued)')
12681268

1269-
def _on_plot_finished(self, request_id, view_snapshot, ids_map, properties):
1270-
if request_id != self.plot_manager.latest_request_id:
1269+
def _on_plot_finished(self, view_snapshot, view_params, ids_map, properties):
1270+
if view_params != self.plot_manager.latest_view_params:
12711271
return
12721272
self.model.makePlot(view_snapshot, ids_map, properties)
12731273
self.resetModels()
12741274
self.showCurrentView()
12751275

1276-
def _on_plot_error(self, request_id, error_msg):
1277-
if request_id != self.plot_manager.latest_request_id:
1278-
return
1276+
def _on_plot_error(self, error_msg):
12791277
msg_box = QMessageBox()
12801278
msg_box.setText(f"Failed to generate plot:\n\n{error_msg}")
12811279
msg_box.setIcon(QMessageBox.Warning)

openmc_plotter/plotmodel.py

Lines changed: 27 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -105,20 +105,18 @@ def hash_model(model_path):
105105

106106
@dataclass(frozen=True)
107107
class PlotRequest:
108-
request_id: int
109108
view_snapshot: "PlotView"
110109
view_params: Dict[str, object]
111110

112111

113112
@dataclass(frozen=True)
114113
class PlotWorkItem:
115-
request_id: int
116114
view_params: Dict[str, object]
117115

118116

119117
class PlotWorker(QObject):
120-
finished = Signal(int, object, object)
121-
error = Signal(int, str)
118+
finished = Signal(object, object, object)
119+
error = Signal(str)
122120

123121
@Slot(object)
124122
def generate_maps(self, work_item: PlotWorkItem):
@@ -133,16 +131,16 @@ def generate_maps(self, work_item: PlotWorkItem):
133131
view_param.color_overlaps = params["color_overlaps"]
134132
ids_map = openmc.lib.id_map(view_param)
135133
properties = openmc.lib.property_map(view_param)
136-
self.finished.emit(work_item.request_id, ids_map, properties)
134+
self.finished.emit(work_item.view_params, ids_map, properties)
137135
except Exception as exc:
138-
self.error.emit(work_item.request_id, str(exc))
136+
self.error.emit(str(exc))
139137

140138

141139
class PlotManager(QObject):
142-
plot_started = Signal(int)
143-
plot_queued = Signal(int)
144-
plot_finished = Signal(int, object, object, object)
145-
plot_error = Signal(int, str)
140+
plot_started = Signal()
141+
plot_queued = Signal()
142+
plot_finished = Signal(object, object, object, object)
143+
plot_error = Signal(str)
146144
plot_idle = Signal()
147145
work_requested = Signal(object)
148146

@@ -159,12 +157,11 @@ def __init__(self):
159157

160158
self._pending_request = None
161159
self._in_flight_request = None
162-
self._latest_request_id = 0
163-
self._next_request_id = 1
160+
self._latest_view_params = None
164161

165162
@property
166-
def latest_request_id(self):
167-
return self._latest_request_id
163+
def latest_view_params(self):
164+
return self._latest_view_params
168165

169166
@property
170167
def is_busy(self):
@@ -175,22 +172,18 @@ def has_pending(self):
175172
return self._pending_request is not None
176173

177174
def enqueue(self, view_snapshot, view_params):
178-
request = PlotRequest(self._next_request_id, view_snapshot, view_params)
179-
self._next_request_id += 1
180-
self._latest_request_id = request.request_id
175+
request = PlotRequest(view_snapshot, view_params)
176+
self._latest_view_params = view_params
181177
if self._in_flight_request is None:
182178
self._pending_request = request
183179
self._start_next()
184-
return request.request_id, True
180+
return True
185181
self._pending_request = request
186-
self.plot_queued.emit(request.request_id)
187-
return request.request_id, False
182+
self.plot_queued.emit()
183+
return False
188184

189-
def new_request_id(self):
190-
request_id = self._next_request_id
191-
self._next_request_id += 1
192-
self._latest_request_id = request_id
193-
return request_id
185+
def set_latest_view_params(self, view_params):
186+
self._latest_view_params = view_params
194187

195188
def clear_pending(self):
196189
self._pending_request = None
@@ -227,27 +220,26 @@ def _start_next(self):
227220
return
228221
self._in_flight_request = self._pending_request
229222
self._pending_request = None
230-
self.plot_started.emit(self._in_flight_request.request_id)
231-
work_item = PlotWorkItem(self._in_flight_request.request_id,
232-
self._in_flight_request.view_params)
223+
self.plot_started.emit()
224+
work_item = PlotWorkItem(self._in_flight_request.view_params)
233225
self.work_requested.emit(work_item)
234226

235-
@Slot(int, object, object)
236-
def _on_worker_finished(self, request_id, ids_map, properties):
227+
@Slot(object, object, object)
228+
def _on_worker_finished(self, view_params, ids_map, properties):
237229
request = self._in_flight_request
238230
self._in_flight_request = None
239231
if request is not None:
240-
self.plot_finished.emit(request_id, request.view_snapshot,
241-
ids_map, properties)
232+
self.plot_finished.emit(request.view_snapshot,
233+
view_params, ids_map, properties)
242234
if self._pending_request is not None:
243235
self._start_next()
244236
else:
245237
self.plot_idle.emit()
246238

247-
@Slot(int, str)
248-
def _on_worker_error(self, request_id, message):
239+
@Slot(str)
240+
def _on_worker_error(self, message):
249241
self._in_flight_request = None
250-
self.plot_error.emit(request_id, message)
242+
self.plot_error.emit(message)
251243
if self._pending_request is not None:
252244
self._start_next()
253245
else:

0 commit comments

Comments
 (0)