Skip to content

Commit a36b32f

Browse files
committed
fix: Platform--instance packing problme
Signed-off-by: Khushiyant <khushiyant2002@gmail.com>
1 parent 958049e commit a36b32f

4 files changed

Lines changed: 20 additions & 13 deletions

File tree

docker/api/image.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import json
12
import logging
23
import os
34

@@ -495,7 +496,10 @@ def push(self, repository, tag=None, stream=False, auth_config=None,
495496
raise errors.InvalidVersion(
496497
'platform was only introduced in API version 1.46'
497498
)
498-
params['platform'] = Platform
499+
# Handle both Platform instances and dict inputs
500+
if isinstance(platform, dict):
501+
platform = Platform(**platform)
502+
params['platform'] = platform
499503

500504
response = self._post_json(
501505
u, None, headers=headers, stream=stream, params=params

docker/types/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from .containers import ContainerConfig, DeviceRequest, HostConfig, LogConfig, Ulimit
22
from .daemon import CancellableStream
33
from .healthcheck import Healthcheck
4+
from .image import Platform
45
from .networks import EndpointConfig, IPAMConfig, IPAMPool, NetworkingConfig
56
from .services import (
67
ConfigReference,

docker/types/image.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,33 @@
33

44
class Platform(DictType):
55
def __init__(self, **kwargs):
6-
architecture = kwargs.get('architecture', kwargs.get('Architecture'))
7-
os = kwargs.get('os', kwargs.get('OS'))
6+
architecture = kwargs.get('architecture')
7+
os = kwargs.get('os')
88

99
if architecture is None and os is None:
1010
raise ValueError("At least one of 'architecture' or 'os' must be provided")
1111

1212

1313
super().__init__({
14-
'Architecture': architecture,
15-
'OS': os,
16-
'OSVersion': kwargs.get('os_version', kwargs.get('OSVersion')),
17-
'OSFeatures': kwargs.get('os_features', kwargs.get('OSFeatures')),
18-
'Variant': kwargs.get('variant', kwargs.get('Variant'))
14+
'architecture': architecture,
15+
'os': os,
16+
'os_version': kwargs.get('os_version'),
17+
'os_features': kwargs.get('os_features'),
18+
'variant': kwargs.get('variant')
1919
})
2020

2121
@property
2222
def architecture(self):
23-
return self['Architecture']
23+
return self['architecture']
2424

2525
@property
2626
def os(self):
27-
return self['OS']
27+
return self['os']
2828

2929
@architecture.setter
3030
def architecture(self, value):
31-
self['Architecture'] = value
31+
self['architecture'] = value
3232

3333
@os.setter
3434
def os(self, value):
35-
self['OS'] = value
35+
self['os'] = value

tests/unit/fake_api.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from docker import constants
2+
from docker.types.image import Platform
23

34
from . import fake_stat
45

@@ -21,7 +22,8 @@
2122
FAKE_SECRET_NAME = 'super_secret'
2223
FAKE_CONFIG_ID = 'sekvs771242jfdjnvfuds8232'
2324
FAKE_CONFIG_NAME = 'super_config'
24-
FAKE_PLATFORM = "{'os': 'linux','architecture': 'arm','variant': 'v5'}"
25+
26+
FAKE_PLATFORM = Platform(os='linux', architecture='arm', variant='v5')
2527

2628
# Each method is prefixed with HTTP method (get, post...)
2729
# for clarity and readability

0 commit comments

Comments
 (0)