mirror of
https://github.com/TrezOne/docker-mods-uptime-kuma-timeout-fix.git
synced 2026-06-17 22:03:32 -04:00
51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
import docker
|
|
|
|
|
|
class SwagDocker:
|
|
"""
|
|
A service class for interacting with Docker containers that are used by SWAG mods.
|
|
"""
|
|
|
|
client = None
|
|
_containers = None
|
|
_labelPrefix = None
|
|
|
|
def __init__(self, labelPrefix: str):
|
|
self._labelPrefix = labelPrefix
|
|
self.client = docker.from_env()
|
|
|
|
def getSwagContainers(self):
|
|
"""
|
|
Retrieve Docker containers filtered by "swag.my_mod.enabled=true":
|
|
>>> swag = SwagDocker("swag.my_mod")
|
|
>>> containers = swag.getSwagContainers()
|
|
"""
|
|
if self._containers is None:
|
|
self._containers = self.client.containers.list(
|
|
filters={"label": [f"{self._labelPrefix}.enabled=true"]})
|
|
return self._containers
|
|
|
|
def parseContainerLabels(self, containerLabels, extraPrefix=""):
|
|
"""
|
|
Having following example container labels:
|
|
swag.my_mod.enabled: true
|
|
swag.my_mod.config.apple: "123"
|
|
swag.my_mod.config.orange: "456"
|
|
|
|
>>> for container in containers:
|
|
>>> containerConfigA = swagDocker.parseContainerLabels(container.labels)
|
|
# Above will return {"enabled": true, "config.apple": "123", "config.orange": "456"}
|
|
>>> containerConfigB = swagDocker.parseContainerLabels(container.labels, ".config.")
|
|
# Above will return {"apple": "123", "orange": "456"}
|
|
"""
|
|
filteredContainerLabels = {}
|
|
fullPrefix = f"{self._labelPrefix}{extraPrefix}"
|
|
prefix_length = len(fullPrefix)
|
|
|
|
for label, value in containerLabels.items():
|
|
if label.startswith(fullPrefix):
|
|
parsedLabel = label[prefix_length:]
|
|
filteredContainerLabels[parsedLabel] = value
|
|
|
|
return filteredContainerLabels
|