import sys from PyQt6.QtWidgets import (QApplication, QListWidgetItem) from PyQt6.QtCore import Qt from portainer_api import PortainerService from gui.portainer_ui import PortainerUi from config.settings import PortainerConfig from gui.workers.load_stacks_worker import LoadStacksWorker from gui.workers.load_endpoints_worker import LoadEndpointsWorker class Natalie(PortainerUi): def __init__(self, portainer_url, portainer_token): super().__init__() self.portainer = PortainerService(portainer_url, portainer_token) self.endpoints_worker = LoadEndpointsWorker(self.portainer) self.endpoints_worker.endpoints_retrieved.connect(self.load_endpoints) self.endpoints_worker.error_occurred.connect(self.error_occurred) self.endpoints_worker.start() self.stacks_worker = LoadStacksWorker(self.portainer) self.stacks_worker.stacks_retrieved.connect(self.load_stacks) self.stacks_worker.error_occurred.connect(self.error_occurred) self.stacks_worker.start() def load_endpoints(self, endpoints): self.endpoints_list = endpoints self.combo_box.clear() self.combo_box.addItem("All") for endpoint in endpoints: self.combo_box.addItem(endpoint['name']) def load_stacks(self, stacks): current_group = self.combo_box.currentText() self.stacks_list.clear() for stack in stacks: item = QListWidgetItem(stack['name']) item.setData(Qt.ItemDataRole.UserRole, stack) self.stacks_list.addItem(item) def error_occurred(self, error_message): print(f"Error occurred: {error_message}") if __name__ == '__main__': portainer_config = PortainerConfig() instances = portainer_config.get_portainer_instances() base_url, token = portainer_config.get_portainer_info(instances[0]) app = QApplication(sys.argv) win = Natalie(base_url, token) win.show() sys.exit(app.exec())