Skip to content

Commit 0481de3

Browse files
Merge pull request #330 from theotherjimmy/fix-unmount-traceback
Provide default platform_name everywhere
2 parents a8031d0 + d6b6324 commit 0481de3

File tree

2 files changed

+98
-70
lines changed

2 files changed

+98
-70
lines changed

mbed_lstools/lstools_base.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ def list_mbeds(
140140
"Use the '-u' flag to include it in the list.",
141141
device['target_id_usb_id'])
142142
else:
143+
platform_data = self.plat_db.get(device['target_id_usb_id'][0:4], verbose_data=True)
144+
device.update(platform_data or {"platform_name": None})
143145
maybe_device = {
144146
FSInteraction.BeforeFilter: self._fs_before_id_check,
145147
FSInteraction.AfterFilter: self._fs_after_id_check,
@@ -167,9 +169,6 @@ def _fs_never(self, device, filter_function, read_details_txt):
167169
"""Filter device without touching the file system of the device"""
168170
device['target_id'] = device['target_id_usb_id']
169171
device['target_id_mbed_htm'] = None
170-
platform_data = self.plat_db.get(device['target_id'][0:4],
171-
verbose_data=True)
172-
device.update(platform_data or {'platform_name': None})
173172
if not filter_function or filter_function(device):
174173
return device
175174
else:
@@ -193,8 +192,6 @@ def _fs_after_id_check(self, device, filter_function, read_details_txt):
193192
"""
194193
device['target_id'] = device['target_id_usb_id']
195194
device['target_id_mbed_htm'] = None
196-
platform_data = self.plat_db.get(device['target_id'][0:4], verbose_data=True)
197-
device.update(platform_data or {'platform_name': None})
198195
if not filter_function or filter_function(device):
199196
self._update_device_from_fs(device, read_details_txt)
200197
return device
@@ -254,7 +251,8 @@ def _update_device_details_daplink(self, device, read_details_txt, _):
254251
platform_data = self.plat_db.get(device['target_id'][0:4],
255252
device_type='daplink',
256253
verbose_data=True)
257-
device.update(platform_data or {'platform_name': None})
254+
if platform_data:
255+
device.update(platform_data)
258256
else:
259257
device['platform_name'] = None
260258

@@ -285,7 +283,8 @@ def _update_device_details_jlink(self, device, _, directory_entries):
285283
platform_data = self.plat_db.get(identifier,
286284
device_type='jlink',
287285
verbose_data=True)
288-
device.update(platform_data or {'platform_name': None})
286+
if platform_data:
287+
device.update(platform_data)
289288
break
290289

291290

test/mbedls_toolsbase.py

Lines changed: 92 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def test_list_mbeds_valid_platform(self):
6868
_listdir.return_value = []
6969
to_check = self.base.list_mbeds()
7070
_read_htm.assert_called_once_with('dummy_mount_point')
71-
_get.assert_called_once_with('0241', device_type='daplink', verbose_data=True)
71+
_get.assert_any_call('0241', device_type='daplink', verbose_data=True)
7272
self.assertEqual(len(to_check), 1)
7373
self.assertEqual(to_check[0]['target_id'], "0241BEEFDEAD")
7474
self.assertEqual(to_check[0]['platform_name'], 'foo_target')
@@ -78,7 +78,7 @@ def test_list_mbeds_invalid_tid(self):
7878
'target_id_usb_id': u'0240DEADBEEF',
7979
'serial_port': "dummy_serial_port"},
8080
{'mount_point': 'dummy_mount_point',
81-
'target_id_usb_id': None,
81+
'target_id_usb_id': "",
8282
'serial_port': 'not_valid'}]
8383
with patch("mbed_lstools.lstools_base.MbedLsToolsBase._read_htm_ids") as _read_htm,\
8484
patch("mbed_lstools.lstools_base.MbedLsToolsBase.mount_point_ready") as _mpr,\
@@ -91,11 +91,11 @@ def test_list_mbeds_invalid_tid(self):
9191
}
9292
_listdir.return_value = []
9393
to_check = self.base.list_mbeds()
94-
_get.assert_called_once_with('0241', device_type='daplink', verbose_data=True)
94+
_get.assert_any_call('0241', device_type='daplink', verbose_data=True)
9595
self.assertEqual(len(to_check), 2)
9696
self.assertEqual(to_check[0]['target_id'], "0241BEEFDEAD")
9797
self.assertEqual(to_check[0]['platform_name'], 'foo_target')
98-
self.assertEqual(to_check[1]['target_id'], None)
98+
self.assertEqual(to_check[1]['target_id'], "")
9999
self.assertEqual(to_check[1]['platform_name'], None)
100100

101101
def test_list_mbeds_invalid_platform(self):
@@ -113,7 +113,7 @@ def test_list_mbeds_invalid_platform(self):
113113
_listdir.return_value = []
114114
to_check = self.base.list_mbeds()
115115
_read_htm.assert_called_once_with('dummy_mount_point')
116-
_get.assert_called_once_with('not_', device_type='daplink', verbose_data=True)
116+
_get.assert_any_call('not_', device_type='daplink', verbose_data=True)
117117
self.assertEqual(len(to_check), 1)
118118
self.assertEqual(to_check[0]['target_id'], "not_in_target_db")
119119
self.assertEqual(to_check[0]['platform_name'], None)
@@ -142,6 +142,7 @@ def test_list_mbeds_unmount_mid_read_list_unmounted(self):
142142
self.assertEqual(len(to_check), 1)
143143
self.assertEqual(to_check[0]['mount_point'], None)
144144
self.assertEqual(to_check[0]['device_type'], 'unknown')
145+
self.assertEqual(to_check[0]['platform_name'], 'K64F')
145146

146147
def test_list_manufacture_ids(self):
147148
table_str = self.base.list_manufacture_ids()
@@ -246,28 +247,36 @@ def test_fs_never(self):
246247
'mount_point': 'invalid_mount_point',
247248
'serial_port': 'invalid_serial_port'
248249
}
249-
with patch("mbed_lstools.lstools_base.MbedLsToolsBase._update_device_from_fs") as _up_fs:
250+
self.base.return_value = [device]
251+
with patch("mbed_lstools.lstools_base.MbedLsToolsBase._update_device_from_fs") as _up_fs,\
252+
patch("mbed_lstools.lstools_base.MbedLsToolsBase.mount_point_ready") as mount_point_ready:
253+
mount_point_ready.return_value = True
254+
250255
filter = None
251-
ret = self.base._fs_never(deepcopy(device), filter, False)
252-
ret_with_details = self.base._fs_never(deepcopy(device), filter, True)
253-
self.assertIsNotNone(ret)
254-
self.assertIsNotNone(ret_with_details)
255-
self.assertEqual(ret['target_id'], ret['target_id_usb_id'])
256-
self.assertEqual(ret, ret_with_details)
256+
ret = self.base.list_mbeds(FSInteraction.Never, filter, read_details_txt=False)
257+
ret_with_details = self.base.list_mbeds(FSInteraction.Never, filter, read_details_txt=True)
258+
self.assertIsNotNone(ret[0])
259+
self.assertIsNotNone(ret_with_details[0])
260+
self.assertEqual(ret[0]['target_id'], ret[0]['target_id_usb_id'])
261+
self.assertEqual(ret[0]['platform_name'], "K64F")
262+
self.assertEqual(ret[0], ret_with_details[0])
257263
_up_fs.assert_not_called()
258264

259265
filter_in = lambda m: m['platform_name'] == 'K64F'
260-
ret = self.base._fs_never(deepcopy(device), filter_in, False)
261-
ret_with_details = self.base._fs_never(deepcopy(device), filter_in, True)
262-
self.assertIsNotNone(ret)
263-
self.assertIsNotNone(ret_with_details)
264-
self.assertEqual(ret, ret_with_details)
266+
ret = self.base.list_mbeds(FSInteraction.Never, filter_in, read_details_txt=False)
267+
ret_with_details = self.base.list_mbeds(FSInteraction.Never, filter_in, read_details_txt=True)
268+
self.assertIsNotNone(ret[0])
269+
self.assertIsNotNone(ret_with_details[0])
270+
self.assertEqual(ret[0]['target_id'], ret[0]['target_id_usb_id'])
271+
self.assertEqual(ret[0]['platform_name'], "K64F")
272+
self.assertEqual(ret[0], ret_with_details[0])
265273
_up_fs.assert_not_called()
266274

267275
filter_out = lambda m: m['platform_name'] != 'K64F'
268-
ret = self.base._fs_never(deepcopy(device), filter_out, False)
269-
ret_with_details = self.base._fs_never(deepcopy(device), filter_out, True)
270-
self.assertIsNone(ret)
276+
ret = self.base.list_mbeds(FSInteraction.Never, filter_out, read_details_txt=False)
277+
ret_with_details = self.base.list_mbeds(FSInteraction.Never, filter_out, read_details_txt=True)
278+
_up_fs.assert_not_called()
279+
self.assertEqual(ret, [])
271280
self.assertEqual(ret, ret_with_details)
272281
_up_fs.assert_not_called()
273282

@@ -279,23 +288,28 @@ def test_fs_after(self):
279288
}
280289
with patch("mbed_lstools.lstools_base.MbedLsToolsBase._read_htm_ids") as _read_htm,\
281290
patch("mbed_lstools.lstools_base.MbedLsToolsBase._details_txt") as _up_details,\
291+
patch("mbed_lstools.lstools_base.MbedLsToolsBase.mount_point_ready") as mount_point_ready,\
282292
patch('os.listdir') as _listdir:
283293
new_device_id = "00017531642046"
284294
_read_htm.return_value = (new_device_id, {})
285295
_listdir.return_value = []
286296
_up_details.return_value = {
287297
'automation_allowed': '0'
288298
}
299+
mount_point_ready.return_value = True
300+
289301
filter = None
290-
ret = self.base._fs_after_id_check(deepcopy(device), filter, False)
302+
self.base.return_value = [deepcopy(device)]
303+
ret = self.base.list_mbeds(FSInteraction.AfterFilter, filter, False, False)
291304
_up_details.assert_not_called()
292-
ret_with_details = self.base._fs_after_id_check(deepcopy(device), filter, True)
293-
294-
self.assertIsNotNone(ret)
295-
self.assertIsNotNone(ret_with_details)
296-
self.assertEqual(ret['target_id'], new_device_id)
297-
self.assertEqual(ret_with_details['daplink_automation_allowed'], '0')
298-
self.assertDictContainsSubset(ret, ret_with_details)
305+
self.base.return_value = [deepcopy(device)]
306+
ret_with_details = self.base.list_mbeds(FSInteraction.AfterFilter, filter, False, True)
307+
308+
self.assertIsNotNone(ret[0])
309+
self.assertIsNotNone(ret_with_details[0])
310+
self.assertEqual(ret[0]['target_id'], new_device_id)
311+
self.assertEqual(ret_with_details[0]['daplink_automation_allowed'], '0')
312+
self.assertDictContainsSubset(ret[0], ret_with_details[0])
299313
_read_htm.assert_called_with(device['mount_point'])
300314
_up_details.assert_called_with(device['mount_point'])
301315

@@ -305,14 +319,16 @@ def test_fs_after(self):
305319
filter_in = lambda m: m['target_id'] == device['target_id_usb_id']
306320
filter_details = lambda m: m.get('daplink_automation_allowed', None) == '0'
307321

308-
ret = self.base._fs_after_id_check(deepcopy(device), filter_in, False)
309-
ret_with_details = self.base._fs_after_id_check(deepcopy(device),
310-
filter_details,
311-
True)
322+
self.base.return_value = [deepcopy(device)]
323+
ret = self.base.list_mbeds(
324+
FSInteraction.AfterFilter, filter_in, False, False)
325+
self.base.return_value = [deepcopy(device)]
326+
ret_with_details = self.base.list_mbeds(
327+
FSInteraction.AfterFilter, filter_details, False, True)
312328

313-
self.assertIsNotNone(ret)
314-
self.assertIsNone(ret_with_details)
315-
self.assertEqual(ret['target_id'], new_device_id)
329+
self.assertIsNotNone(ret[0])
330+
self.assertEqual(ret_with_details, [])
331+
self.assertEqual(ret[0]['target_id'], new_device_id)
316332
_read_htm.assert_called_with(device['mount_point'])
317333
_up_details.assert_not_called()
318334

@@ -321,13 +337,15 @@ def test_fs_after(self):
321337

322338
filter_out = lambda m: m['target_id'] == new_device_id
323339

324-
ret = self.base._fs_after_id_check(deepcopy(device), filter_out, False)
325-
ret_with_details = self.base._fs_after_id_check(deepcopy(device),
326-
filter_details,
327-
True)
340+
self.base.return_value = [deepcopy(device)]
341+
ret = self.base.list_mbeds(
342+
FSInteraction.AfterFilter, filter_out, False, False)
343+
self.base.return_value = [deepcopy(device)]
344+
ret_with_details = self.base.list_mbeds(
345+
FSInteraction.AfterFilter, filter_out, False, True)
328346

329-
self.assertIsNone(ret)
330-
self.assertIsNone(ret_with_details)
347+
self.assertEqual(ret, [])
348+
self.assertEqual(ret_with_details, [])
331349
_read_htm.assert_not_called()
332350
_up_details.assert_not_called()
333351

@@ -339,24 +357,30 @@ def test_fs_before(self):
339357
}
340358
with patch("mbed_lstools.lstools_base.MbedLsToolsBase._read_htm_ids") as _read_htm,\
341359
patch("mbed_lstools.lstools_base.MbedLsToolsBase._details_txt") as _up_details,\
360+
patch("mbed_lstools.lstools_base.MbedLsToolsBase.mount_point_ready") as mount_point_ready,\
342361
patch('os.listdir') as _listdir:
343362
new_device_id = u'00017575430420'
344363
_read_htm.return_value = (new_device_id, {})
345364
_listdir.return_value = []
346365
_up_details.return_value = {
347366
'automation_allowed': '0'
348367
}
368+
mount_point_ready.return_value = True
349369

350370
filter = None
351-
ret = self.base._fs_before_id_check(deepcopy(device), filter, False)
371+
self.base.return_value = [deepcopy(device)]
372+
ret = self.base.list_mbeds(
373+
FSInteraction.BeforeFilter, filter, False, False)
352374
_up_details.assert_not_called()
353375

354-
ret_with_details = self.base._fs_before_id_check(deepcopy(device), filter, True)
355-
self.assertIsNotNone(ret)
356-
self.assertIsNotNone(ret_with_details)
357-
self.assertEqual(ret['target_id'], new_device_id)
358-
self.assertEqual(ret_with_details['daplink_automation_allowed'], '0')
359-
self.assertDictContainsSubset(ret, ret_with_details)
376+
self.base.return_value = [deepcopy(device)]
377+
ret_with_details = self.base.list_mbeds(
378+
FSInteraction.BeforeFilter, filter, False, True)
379+
self.assertIsNotNone(ret[0])
380+
self.assertIsNotNone(ret_with_details[0])
381+
self.assertEqual(ret[0]['target_id'], new_device_id)
382+
self.assertEqual(ret_with_details[0]['daplink_automation_allowed'], '0')
383+
self.assertDictContainsSubset(ret[0], ret_with_details[0])
360384
_read_htm.assert_called_with(device['mount_point'])
361385
_up_details.assert_called_with(device['mount_point'])
362386

@@ -365,17 +389,20 @@ def test_fs_before(self):
365389

366390
filter_in = lambda m: m['target_id'] == '00017575430420'
367391
filter_in_details = lambda m: m['daplink_automation_allowed'] == '0'
368-
ret = self.base._fs_before_id_check(deepcopy(device), filter_in, False)
392+
self.base.return_value = [deepcopy(device)]
393+
ret = self.base.list_mbeds(
394+
FSInteraction.BeforeFilter, filter_in, False, False)
369395
_up_details.assert_not_called()
370396

371-
ret_with_details = self.base._fs_before_id_check(deepcopy(device),
372-
filter_in_details,
373-
True)
374-
self.assertIsNotNone(ret)
375-
self.assertIsNotNone(ret_with_details)
376-
self.assertEqual(ret['target_id'], new_device_id)
377-
self.assertEqual(ret_with_details['daplink_automation_allowed'], '0')
378-
self.assertDictContainsSubset(ret, ret_with_details)
397+
self.base.return_value = [deepcopy(device)]
398+
ret_with_details = self.base.list_mbeds(
399+
FSInteraction.BeforeFilter, filter_in_details, False, True)
400+
401+
self.assertIsNotNone(ret[0])
402+
self.assertIsNotNone(ret_with_details[0])
403+
self.assertEqual(ret[0]['target_id'], new_device_id)
404+
self.assertEqual(ret_with_details[0]['daplink_automation_allowed'], '0')
405+
self.assertDictContainsSubset(ret[0], ret_with_details[0])
379406
_read_htm.assert_called_with(device['mount_point'])
380407
_up_details.assert_called_with(device['mount_point'])
381408

@@ -384,14 +411,16 @@ def test_fs_before(self):
384411

385412
filter_out = lambda m: m['target_id'] == '024075309420ABCE'
386413
filter_out_details = lambda m: m['daplink_automation_allowed'] == '1'
387-
ret = self.base._fs_before_id_check(deepcopy(device), filter_out, False)
414+
ret = self.base.list_mbeds(
415+
FSInteraction.BeforeFilter, filter_out, False, False)
388416
_up_details.assert_not_called()
389417

390-
ret_with_details = self.base._fs_before_id_check(deepcopy(device),
391-
filter_out_details,
392-
True)
393-
self.assertIsNone(ret)
394-
self.assertIsNone(ret_with_details)
418+
self.base.return_value = [deepcopy(device)]
419+
ret_with_details = self.base.list_mbeds(
420+
FSInteraction.BeforeFilter, filter_out_details, False, True)
421+
422+
self.assertEqual(ret, [])
423+
self.assertEqual(ret_with_details, [])
395424
_read_htm.assert_called_with(device['mount_point'])
396425

397426
class RetargetTestCase(unittest.TestCase):

0 commit comments

Comments
 (0)