Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions python_on_whales/client_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ def _needs_reload(self) -> bool:
)

def reload(self):
print("fetching and parsing inspect result", self._immutable_id)
self._set_inspect_result(
self._fetch_and_parse_inspect_result(self._immutable_id)
)
Expand Down
16 changes: 15 additions & 1 deletion python_on_whales/components/secret/cli_wrapper.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import datetime as dt
import json
from typing import Any, Dict, List, Optional, Union

Expand All @@ -6,14 +7,15 @@
DockerCLICaller,
ReloadableObjectFromJson,
)
from python_on_whales.components.secret.models import SecretInspectResult
from python_on_whales.components.secret.models import SecretInspectResult, SecretSpec
from python_on_whales.utils import ValidPath, format_mapping_for_cli, run, to_list


class Secret(ReloadableObjectFromJson):
def __init__(
self, client_config: ClientConfig, reference: str, is_immutable_id=False
):
print("reference: ", reference)
super().__init__(client_config, "id", reference, is_immutable_id)

def __enter__(self):
Expand All @@ -37,6 +39,18 @@ def _get_inspect_result(self) -> SecretInspectResult:
def id(self) -> str:
return self._get_immutable_id()

@property
def created_at(self) -> dt.datetime:
return self._get_inspect_result().created_at

@property
def updated_at(self) -> dt.datetime:
return self._get_inspect_result().updated_at

@property
def spec(self) -> SecretSpec:
return self._get_inspect_result().spec

def remove(self):
"""Remove this Docker secret.

Expand Down
19 changes: 13 additions & 6 deletions python_on_whales/components/secret/models.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
from datetime import datetime
from typing import Optional
import datetime as dt
from typing import Any, Dict, Optional

from pydantic import Field

from python_on_whales.utils import DockerCamelModel


class SecretSpec(DockerCamelModel):
name: str
Labels: Dict[str, Any]


class SecretInspectResult(DockerCamelModel):
id: Optional[str] = None
id: Optional[str] = Field(alias="ID")
version: Optional[dict] = None
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
spec: Optional[dict] = None
created_at: Optional[dt.datetime] = None
updated_at: Optional[dt.datetime] = None
spec: Optional[SecretSpec] = None
2 changes: 1 addition & 1 deletion tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ def _docker_registry(docker_client: DockerClient, login=True) -> str:

@pytest.fixture(scope="function")
def swarm_mode(docker_client: DockerClient) -> Generator[None, None, None]:
docker_client.swarm.init()
docker_client.swarm.init(advertise_address="172.31.155.129")
yield
docker_client.swarm.leave(force=True)
time.sleep(1)
Expand Down
33 changes: 33 additions & 0 deletions tests/python_on_whales/components/test_secret.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import datetime as dt

import pytest

from python_on_whales import DockerClient


@pytest.mark.usefixtures("swarm_mode")
def test_swarm_update_auto_lock_managers(docker_client: DockerClient, tmp_path):
secret_file = tmp_path / "secret.txt"
secret_file.write_text("hello")
my_secret = docker_client.secret.create("my_secret", secret_file)
date_after_creation = dt.datetime.now(tz=dt.timezone.utc)
print("my_secret: ", my_secret.id)
my_secret2 = docker_client.secret.inspect(my_secret.id)

assert my_secret == my_secret2
assert my_secret.spec.name == "my_secret"
assert my_secret.spec.Labels == {}
assert my_secret.created_at <= date_after_creation

assert my_secret2.spec.name == "my_secret"
assert my_secret2.spec.Labels == {}
assert my_secret2.created_at <= date_after_creation

my_secret3 = docker_client.secret.inspect("my_secret")

assert my_secret == my_secret3
assert my_secret3.spec.name == "my_secret"
assert my_secret3.spec.Labels == {}
assert my_secret3.created_at <= date_after_creation

docker_client.secret.remove(my_secret.id)
6 changes: 3 additions & 3 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.