From 84182672c71796a05941818e4ed6b9f1a6853296 Mon Sep 17 00:00:00 2001 From: Hirad Date: Fri, 24 Jan 2025 13:34:39 +0330 Subject: [PATCH] initial commit --- gui/dialog_box_ui.py | 25 ++++++++++++++++++ .../load_container_image_status_worker.py | 21 +++++++++++++++ portainer_api/containers.py | 26 +++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 gui/dialog_box_ui.py create mode 100644 gui/workers/load_container_image_status_worker.py create mode 100644 portainer_api/containers.py diff --git a/gui/dialog_box_ui.py b/gui/dialog_box_ui.py new file mode 100644 index 0000000..45c432f --- /dev/null +++ b/gui/dialog_box_ui.py @@ -0,0 +1,25 @@ +import sys +from PyQt6.QtWidgets import QApplication, QDialog, QDialogButtonBox, QLabel, QVBoxLayout + + +class DialogBox(QDialog): + def __init__(self, title, message): + super().__init__() + self.setWindowTitle(title) + self.resize(100, 100) + # self.setModal(True) + self.label = QLabel(message) + self.button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok) + self.button_box.accepted.connect(self.accept) + + layout = QVBoxLayout() + layout.addWidget(self.label) + layout.addWidget(self.button_box) + self.setLayout(layout) + + +if __name__ == '__main__': + app = QApplication(sys.argv) + dialog = DialogBox("Stack Update", "Stack updated successfully") + dialog.show() + sys.exit(app.exec()) diff --git a/gui/workers/load_container_image_status_worker.py b/gui/workers/load_container_image_status_worker.py new file mode 100644 index 0000000..ee51ba0 --- /dev/null +++ b/gui/workers/load_container_image_status_worker.py @@ -0,0 +1,21 @@ +from PyQt6.QtCore import QThread, pyqtSignal + + +class LoadContainerImageStatusWorker(QThread): + image_status_retrieved = pyqtSignal(str) + error_occurred = pyqtSignal(str) + + def __init__(self, portainer, endpoint_id, container_id): + super().__init__() + self.portainer = portainer + self.endpoint_id = endpoint_id + self.container_id = container_id + # self.image_status = None + + def run(self): + try: + image_status = self.portainer.containers.get_container_image_status(self.endpoint_id, self.container_id) + # self.image_status = image_status['Status'] + self.image_status_retrieved.emit(image_status['Status']) + except Exception as e: + self.image_status_retrieved.emit("Not available") diff --git a/portainer_api/containers.py b/portainer_api/containers.py new file mode 100644 index 0000000..ba868e7 --- /dev/null +++ b/portainer_api/containers.py @@ -0,0 +1,26 @@ +import json + +from utils.date_converter import datetime_from_timestamp +from .base import Portainer + + +class Containers(Portainer): + def list_containers_of_stack(self, endpoint_id, stack_name): + endpoint_containers = self.portainer.containers.list_containers_by_endpoint(endpoint=endpoint_id) + containers_list = [] + for container in endpoint_containers: + if container['Labels'].get('com.docker.compose.project') == stack_name: + container_data = { + "id": container['Id'], + "name": container['Names'][0].lstrip('/'), + "image": container['Image'], + "created": datetime_from_timestamp(container['Created']), + "status": container['Status'], + "labels": container['Labels'], + } + containers_list.append(container_data) + return containers_list + + def get_container_image_status(self, endpoint_id, container_id): + status = self.portainer.containers.get_container_image_status(endpoint_id, container_id) + return status