Skip to content

Commit 19c435c

Browse files
committed
ref(controller): prefer dict view objects
Deis requires Python 2.7, so code can use dict views: https://docs.python.org/2/library/stdtypes.html#dictionary-view-objects This is more efficient than the copying involved with items() and related traditional dict view methods.
1 parent 8207364 commit 19c435c

6 files changed

Lines changed: 11 additions & 11 deletions

File tree

controller/api/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def validate_id_is_docker_compatible(value):
8484
def validate_app_structure(value):
8585
"""Error if the dict values aren't ints >= 0."""
8686
try:
87-
if any(int(v) < 0 for v in value.itervalues()):
87+
if any(int(v) < 0 for v in value.viewvalues()):
8888
raise ValueError("Must be greater than or equal to zero")
8989
except ValueError, err:
9090
raise ValidationError(err)
@@ -665,7 +665,7 @@ def save(self, **kwargs):
665665
new_data = {}
666666
data.update(new_data)
667667
# remove config keys if we provided a null value
668-
[data.pop(k) for k, v in new_data.items() if v is None]
668+
[data.pop(k) for k, v in new_data.viewitems() if v is None]
669669
setattr(self, attr, data)
670670
except Config.DoesNotExist:
671671
pass

controller/api/serializers.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ class Meta:
141141
model = models.Config
142142

143143
def validate_memory(self, value):
144-
for k, v in value.items():
144+
for k, v in value.viewitems():
145145
if v is None: # use NoneType to unset a value
146146
continue
147147
if not re.match(PROCTYPE_MATCH, k):
@@ -152,15 +152,15 @@ def validate_memory(self, value):
152152
return value
153153

154154
def validate_cpu(self, value):
155-
for k, v in value.items():
155+
for k, v in value.viewitems():
156156
if v is None: # use NoneType to unset a value
157157
continue
158158
if not re.match(PROCTYPE_MATCH, k):
159159
raise serializers.ValidationError("Process types can only contain [a-z]")
160160
shares = re.match(CPUSHARE_MATCH, str(v))
161161
if not shares:
162162
raise serializers.ValidationError("CPU shares must be an integer")
163-
for v in shares.groupdict().values():
163+
for v in shares.groupdict().viewvalues():
164164
try:
165165
i = int(v)
166166
except ValueError:
@@ -170,7 +170,7 @@ def validate_cpu(self, value):
170170
return value
171171

172172
def validate_tags(self, value):
173-
for k, v in value.items():
173+
for k, v in value.viewitems():
174174
if v is None: # use NoneType to unset a value
175175
continue
176176
if not re.match(TAGKEY_MATCH, k):

controller/api/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ def scale(self, request, **kwargs):
134134
new_structure = {}
135135
app = self.get_object()
136136
try:
137-
for target, count in request.data.items():
137+
for target, count in request.data.viewitems():
138138
new_structure[target] = int(count)
139139
models.validate_app_structure(new_structure)
140140
app.scale(request.user, new_structure)

controller/registry/private.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def _api_call(endpoint, data=None, headers={}, cookies=None, request_type='GET')
9090
base_headers = {'user-agent': 'docker/1.0.0'}
9191
r = None
9292
if len(headers) > 0:
93-
for header, value in headers.iteritems():
93+
for header, value in headers.viewitems():
9494
base_headers[header] = value
9595
if request_type == 'GET':
9696
r = requests.get(endpoint, headers=base_headers)
@@ -170,7 +170,7 @@ def _construct_env(env, config):
170170
v = config.pop(k)
171171
new_env.append("{}={}".format(encode(k), encode(v)))
172172
# add other config ENV items
173-
for k, v in config.items():
173+
for k, v in config.viewitems():
174174
new_env.append("{}={}".format(encode(k), encode(v)))
175175
return new_env
176176

controller/scheduler/fleet.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ def _create_container(self, name, image, command, unit, **kwargs):
153153
# prepare tags only if one was provided
154154
tags = kwargs.get('tags', {})
155155
if tags:
156-
tagset = ' '.join(['"{}={}"'.format(k, v) for k, v in tags.items()])
156+
tagset = ' '.join(['"{}={}"'.format(k, v) for k, v in tags.viewitems()])
157157
unit.append({"section": "X-Fleet", "name": "MachineMetadata",
158158
"value": tagset})
159159
# post unit to fleet

controller/scheduler/swarm.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def _get_hostname(self, application_name):
123123

124124
def _get_portbindings(self, image):
125125
dictports = self.docker_cli.inspect_image(image)['ContainerConfig']['ExposedPorts']
126-
for port, mapping in dictports.items():
126+
for port, mapping in dictports.viewitems():
127127
dictports[port] = None
128128
return dictports
129129

0 commit comments

Comments
 (0)