Skip to content

Commit 7366347

Browse files
committed
Change update from put to patch
Issues: Fixes #578 Problem: The use of PUT in update was causing unintended side-effects. This is costly behavior.. we probably shouldn't force the user to submit more data than they intend! Analysis: I've changed "put" to "patch" in the update method. This seems like a major change, so I'd appreciate lots of feedback. Among other things I'd like to validate that the f5-openstack-agent consumer does _not_ break against this new version. Tests: * f5/bigip/test/test_resource.py * f5/bigip/tm/sys/test/test_sys_application.py
1 parent 89b08f5 commit 7366347

3 files changed

Lines changed: 20 additions & 20 deletions

File tree

f5/bigip/resource.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ def _update(self, **kwargs):
474474

475475
data_dict.update(kwargs)
476476

477-
response = session.put(update_uri, json=data_dict, **requests_params)
477+
response = session.patch(update_uri, json=data_dict, **requests_params)
478478
self._meta_data = temp_meta
479479
self._local_update(response.json())
480480

@@ -492,7 +492,7 @@ def update(self, **kwargs):
492492
493493
:param kwargs: keys and associated values to alter on the device
494494
NOTE: If kwargs has a 'requests_params' key the corresponding dict will
495-
be passed to the underlying requests.session.put method where it will
495+
be passed to the underlying requests.session.patch method where it will
496496
be handled according to that API. THIS IS HOW TO PASS QUERY-ARGS!
497497
498498
"""

f5/bigip/test/test_resource.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def fake_rsrc():
5656
r._meta_data['allowed_lazy_attributes'] = []
5757
r._meta_data['uri'] = 'URI'
5858
r._meta_data['read_only_attributes'] = [u"READONLY"]
59-
attrs = {'put.return_value': MockResponse({u"generation": 0}),
59+
attrs = {'patch.return_value': MockResponse({u"generation": 0}),
6060
'get.return_value': MockResponse({u"generation": 0})}
6161
mock_session = mock.MagicMock(**attrs)
6262
r._meta_data['bigip']._meta_data = {'icr_session': mock_session}
@@ -237,7 +237,7 @@ def test__meta_data_state(self):
237237
r._meta_data['uri'] = 'URI'
238238
r._meta_data['bigip']._meta_data['icr_session'].get.return_value =\
239239
MockResponse({u"generation": 0})
240-
r._meta_data['bigip']._meta_data['icr_session'].put.return_value =\
240+
r._meta_data['bigip']._meta_data['icr_session'].patch.return_value =\
241241
MockResponse({u"generation": 0})
242242
r.generation = 0
243243
pre_meta = r._meta_data.copy()
@@ -248,7 +248,7 @@ def test_Collection_removal(self):
248248
r = Resource(mock.MagicMock())
249249
r._meta_data['allowed_lazy_attributes'] = []
250250
r._meta_data['uri'] = 'URI'
251-
attrs = {'put.return_value': MockResponse({u"generation": 0}),
251+
attrs = {'patch.return_value': MockResponse({u"generation": 0}),
252252
'get.return_value': MockResponse({u"generation": 0})}
253253
mock_session = mock.MagicMock(**attrs)
254254
r._meta_data['bigip']._meta_data = {'icr_session': mock_session}
@@ -257,7 +257,7 @@ def test_Collection_removal(self):
257257
assert 'contained' in r.__dict__
258258
r.update(a=u"b")
259259
submitted = r._meta_data['bigip']. \
260-
_meta_data['icr_session'].put.call_args[1]['json']
260+
_meta_data['icr_session'].patch.call_args[1]['json']
261261

262262
assert 'contained' not in submitted
263263

@@ -266,7 +266,7 @@ def test_read_only_removal(self):
266266
r._meta_data['allowed_lazy_attributes'] = []
267267
r._meta_data['uri'] = 'URI'
268268
r._meta_data['read_only_attributes'] = [u"READONLY"]
269-
attrs = {'put.return_value': MockResponse({u"generation": 0}),
269+
attrs = {'patch.return_value': MockResponse({u"generation": 0}),
270270
'get.return_value': MockResponse({u"generation": 0})}
271271
mock_session = mock.MagicMock(**attrs)
272272
r._meta_data['bigip']._meta_data = {'icr_session': mock_session}
@@ -275,26 +275,26 @@ def test_read_only_removal(self):
275275
assert 'READONLY' in r.__dict__
276276
r.update(a=u"b")
277277
submitted = r._meta_data['bigip'].\
278-
_meta_data['icr_session'].put.call_args[1]['json']
278+
_meta_data['icr_session'].patch.call_args[1]['json']
279279
assert 'READONLY' not in submitted
280280

281281
def test_reduce_boolean_removes_enabled(self, fake_rsrc):
282282
fake_rsrc.update(enabled=False)
283-
pos, kwargs = fake_rsrc._meta_data['bigip']._meta_data['icr_session'].put.\
283+
pos, kwargs = fake_rsrc._meta_data['bigip']._meta_data['icr_session'].patch.\
284284
call_args
285285
assert kwargs['json']['disabled'] is True
286286
assert 'enabled' not in kwargs['json']
287287

288288
def test_reduce_boolean_removes_disabled(self, fake_rsrc):
289289
fake_rsrc.update(disabled=False)
290-
pos, kwargs = fake_rsrc._meta_data['bigip']._meta_data['icr_session'].put.\
290+
pos, kwargs = fake_rsrc._meta_data['bigip']._meta_data['icr_session'].patch.\
291291
call_args
292292
assert kwargs['json']['enabled'] is True
293293
assert 'disabled' not in kwargs['json']
294294

295295
def test_reduce_boolean_removes_nothing(self, fake_rsrc):
296296
fake_rsrc.update(partition='Common', name='test_create', enabled=True)
297-
pos, kwargs = fake_rsrc._meta_data['bigip']._meta_data['icr_session'].put.\
297+
pos, kwargs = fake_rsrc._meta_data['bigip']._meta_data['icr_session'].patch.\
298298
call_args
299299
assert kwargs['json']['enabled'] is True
300300
assert 'disabled' not in kwargs['json']
@@ -406,7 +406,7 @@ def test_icontrol_version_set(self):
406406
r._meta_data['allowed_lazy_attributes'] = []
407407
r._meta_data['uri'] = 'URI'
408408
r._meta_data['icontrol_version'] = '11.6.0'
409-
attrs = {'put.return_value': MockResponse({u"generation": 0}),
409+
attrs = {'patch.return_value': MockResponse({u"generation": 0}),
410410
'get.return_value': MockResponse({u"generation": 0})}
411411
mock_session = mock.MagicMock(**attrs)
412412
r._meta_data['bigip']._meta_data = {'icr_session': mock_session}
@@ -415,14 +415,14 @@ def test_icontrol_version_set(self):
415415
assert 'contained' in r.__dict__
416416
r.update(a=u"b")
417417
submitted = r._meta_data['bigip']. \
418-
_meta_data['icr_session'].put.call_args[1]['params']
418+
_meta_data['icr_session'].patch.call_args[1]['params']
419419
assert submitted['ver'] == '11.6.0'
420420

421421
def test_icontrol_version_default(self):
422422
r = Resource(mock.MagicMock())
423423
r._meta_data['allowed_lazy_attributes'] = []
424424
r._meta_data['uri'] = 'URI'
425-
attrs = {'put.return_value': MockResponse({u"generation": 0}),
425+
attrs = {'patch.return_value': MockResponse({u"generation": 0}),
426426
'get.return_value': MockResponse({u"generation": 0})}
427427
mock_session = mock.MagicMock(**attrs)
428428
r._meta_data['bigip']._meta_data = {'icr_session': mock_session}
@@ -431,7 +431,7 @@ def test_icontrol_version_default(self):
431431
assert 'contained' in r.__dict__
432432
r.update(a=u"b")
433433
submitted = r._meta_data['bigip']. \
434-
_meta_data['icr_session'].put.call_args
434+
_meta_data['icr_session'].patch.call_args
435435
assert 'params' not in submitted
436436

437437
def test_success(self):

f5/bigip/tm/sys/test/test_sys_application.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,13 @@ def __init__(self, **kwargs):
112112
self._meta_data.update(meta_data_defaults)
113113
mock_session = mock.MagicMock(name='mock_session')
114114
mock_get_response = mock.MagicMock(name='mock_get_response')
115-
mock_put_response = mock.MagicMock(name='mock_put_response')
115+
mock_patch_response = mock.MagicMock(name='mock_patch_response')
116116
mock_get_response.json.return_value = fake_bigip_data.copy()
117-
mock_put_response.json.return_value = SUCCESSFUL_CREATE.copy()
118-
# Mock the get and put when the container calls icr_session.get/put
117+
mock_patch_response.json.return_value = SUCCESSFUL_CREATE.copy()
118+
# Mock the get and patch when the container calls icr_session.get/patch
119119
mock_session.get.return_value = mock_get_response
120-
mock_session.put.return_value = mock_put_response
121-
mock_session.post.return_value = mock_put_response
120+
mock_session.patch.return_value = mock_patch_response
121+
mock_session.post.return_value = mock_patch_response
122122
FakeService._meta_data = {
123123
'hostname': 'testhost',
124124
'icr_session': mock_session,

0 commit comments

Comments
 (0)