diff --git a/gui/src/aaregui/threads/daq_worker.py b/gui/src/aaregui/threads/daq_worker.py index a7f9f942..d32da94c 100644 --- a/gui/src/aaregui/threads/daq_worker.py +++ b/gui/src/aaregui/threads/daq_worker.py @@ -31,6 +31,7 @@ class DAQWorker(QObject): standard_scan_completed = Signal(CompletedRotationScan) raster_generated_by_ml = Signal(RasterGridRequest) face_detection_result = Signal(dict) + staff_pgroups_loaded = Signal(list) def __init__(self, base_url: str | None, token: str, parent=None): super().__init__(parent) @@ -223,6 +224,33 @@ class DAQWorker(QObject): else: self.generic_put(f"access/pgroup?val={val}") + @Slot(QNetworkReply) + def _handle_all_pgroups_response(self, reply: QNetworkReply): + try: + response_data = self.handle_response(reply) + import json + arr = json.loads(response_data) if response_data else [] + if not isinstance(arr, list): + raise RuntimeError("Invalid all_pgroups payload") + # Ensure list[str] + out = [str(x) for x in arr if isinstance(x, (str, int))] + self.staff_pgroups_loaded.emit(out) + except Exception as e: + logger.error(f"Exception from all_pgroups response: {e}") + self.http_error.emit(str(e)) + + @Slot() + def get_all_pgroups(self): + logger.debug("PUT /access/all_pgroups") + if self.__base_url is None: + self.staff_pgroups_loaded.emit([]) + return + request = QNetworkRequest(QUrl(f"{self.__base_url}/access/all_pgroups")) + request.setRawHeader(b"Authorization", f"Bearer {self.__token}".encode("utf-8")) + request.setRawHeader(b"Content-Type", b"application/json") + reply = self.__net_manager.put(request, QByteArray(b"")) + reply.finished.connect(lambda: self._handle_all_pgroups_response(reply)) + @Slot(SampleCameraSettings) def samcam_settings(self, s: SampleCameraSettings): self.generic_put("beamline/samcam", s.model_dump_json())