Skip to content

Commit 36d7c19

Browse files
Merge pull request #1996 from ramkishor-ch/issue_1638
Error on hardware create with Operation system #1638
2 parents f0cbd24 + 5829dfc commit 36d7c19

File tree

2 files changed

+30
-18
lines changed

2 files changed

+30
-18
lines changed

SoftLayer/managers/ordering.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
from SoftLayer import exceptions
1212

13+
from SoftLayer import utils
14+
1315
CATEGORY_MASK = '''id, isRequired, itemCategory[id, name, categoryCode]'''
1416

1517
ITEM_MASK = '''id, keyName, description, itemCategory, categories, prices'''
@@ -32,6 +34,8 @@ def __init__(self, client):
3234
self.order_svc = client['Product_Order']
3335
self.billing_svc = client['Billing_Order']
3436
self.package_preset = client['Product_Package_Preset']
37+
self.package_mask = 'id, description, capacity, itemCategory, keyName, prices[categories], ' \
38+
'softwareDescription[id,referenceCode,longDescription]'
3539

3640
def get_packages_of_type(self, package_types, mask=None):
3741
"""Get packages that match a certain type.
@@ -370,22 +374,27 @@ def get_price_id_list(self, package_keyname, item_keynames, core=None):
370374
keynames in the given package
371375
372376
"""
373-
mask = 'id, description, capacity, itemCategory, keyName, prices[categories]'
377+
mask = 'id, description, capacity, itemCategory, keyName, prices[categories], ' \
378+
'softwareDescription[id,referenceCode,longDescription]'
374379
items = self.list_items(package_keyname, mask=mask)
375380
item_capacity = self.get_item_capacity(items, item_keynames)
376381

377382
prices = []
378383
category_dict = {"gpu0": -1, "pcie_slot0": -1}
379384

380385
for item_keyname in item_keynames:
381-
try:
382-
# Need to find the item in the package that has a matching
383-
# keyName with the current item we are searching for
384-
matching_item = [i for i in items
385-
if i['keyName'] == item_keyname][0]
386-
except IndexError as ex:
386+
matching_item = []
387+
# Need to find the item in the package that has a matching
388+
# keyName with the current item we are searching for
389+
for i in items:
390+
reference_code = utils.lookup(i, 'softwareDescription', 'referenceCode')
391+
if i['keyName'] == item_keyname or reference_code == item_keyname:
392+
matching_item.append(i)
393+
394+
if len(matching_item) == 0:
387395
message = f"Item {item_keyname} does not exist for package {package_keyname}"
388-
raise exceptions.SoftLayerError(message) from ex
396+
raise exceptions.SoftLayerError(message)
397+
matching_item = matching_item[0]
389398

390399
# we want to get the price ID that has no location attached to it,
391400
# because that is the most generic price. verifyOrder/placeOrder

tests/managers/ordering_tests.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,7 @@ def test_get_price_id_list(self):
316316

317317
prices = self.ordering.get_price_id_list('PACKAGE_KEYNAME', ['ITEM1', 'ITEM2'], "8")
318318

319-
list_mock.assert_called_once_with('PACKAGE_KEYNAME', mask='id, description, capacity, itemCategory, keyName, '
320-
'prices[categories]')
319+
list_mock.assert_called_once_with('PACKAGE_KEYNAME', mask=self.ordering.package_mask)
321320
self.assertEqual([price1['id'], price2['id']], prices)
322321

323322
def test_get_price_id_list_no_core(self):
@@ -335,22 +334,24 @@ def test_get_price_id_list_no_core(self):
335334
prices = self.ordering.get_price_id_list('PACKAGE_KEYNAME', ['ITEM1', 'ITEM2'], None)
336335

337336
list_mock.assert_called_once_with('PACKAGE_KEYNAME', mask='id, description, capacity, itemCategory, keyName, '
338-
'prices[categories]')
337+
'prices[categories], softwareDescription[id,referenceCode,longDescription]')
339338
self.assertEqual([price1['id'], price2['id']], prices)
340339

341340
def test_get_price_id_list_item_not_found(self):
342341
category1 = {'categoryCode': 'cat1'}
343342
price1 = {'id': 1234, 'locationGroupId': '', 'categories': [category1]}
344-
item1 = {'id': 1111, 'keyName': 'ITEM1', 'itemCategory': category1, 'prices': [price1]}
343+
softwareDescription1 = {'id': 1234, 'longDescription': 'ABCD 1.2-34', 'referenceCode': 'ABCD_9_32'}
344+
item1 = {'id': 1111, 'keyName': 'ITEM1', 'itemCategory': category1,
345+
'prices': [price1], 'softwareDescription': softwareDescription1, }
345346

346347
with mock.patch.object(self.ordering, 'list_items') as list_mock:
347348
list_mock.return_value = [item1]
348349

349350
exc = self.assertRaises(exceptions.SoftLayerError,
350351
self.ordering.get_price_id_list,
351-
'PACKAGE_KEYNAME', ['ITEM2'], "8")
352+
'PACKAGE_KEYNAME', ['ITEM2'], "12")
352353
list_mock.assert_called_once_with('PACKAGE_KEYNAME', mask='id, description, capacity, itemCategory, keyName, '
353-
'prices[categories]')
354+
'prices[categories], softwareDescription[id,referenceCode,longDescription]')
354355
self.assertEqual("Item ITEM2 does not exist for package PACKAGE_KEYNAME", str(exc))
355356

356357
def test_get_price_id_list_gpu_items_with_two_categories(self):
@@ -365,7 +366,8 @@ def test_get_price_id_list_gpu_items_with_two_categories(self):
365366
prices = self.ordering.get_price_id_list('PACKAGE_KEYNAME', ['ITEM1', 'ITEM1'], "8")
366367

367368
list_mock.assert_called_once_with('PACKAGE_KEYNAME', mask='id, description, capacity, itemCategory, '
368-
'keyName, ' 'prices[categories]')
369+
'keyName, prices[categories], '
370+
'softwareDescription[id,referenceCode,longDescription]')
369371
self.assertEqual([price2['id'], price1['id']], prices)
370372

371373
def test_generate_no_complex_type(self):
@@ -620,7 +622,7 @@ def test_location_group_id_none(self):
620622
prices = self.ordering.get_price_id_list('PACKAGE_KEYNAME', ['ITEM1', 'ITEM2'], "8")
621623

622624
list_mock.assert_called_once_with('PACKAGE_KEYNAME', mask='id, description, capacity, itemCategory, keyName, '
623-
'prices[categories]')
625+
'prices[categories], softwareDescription[id,referenceCode,longDescription]')
624626
self.assertEqual([price1['id'], price2['id']], prices)
625627

626628
def test_location_groud_id_empty(self):
@@ -637,8 +639,9 @@ def test_location_groud_id_empty(self):
637639

638640
prices = self.ordering.get_price_id_list('PACKAGE_KEYNAME', ['ITEM1', 'ITEM2'], "8")
639641

640-
list_mock.assert_called_once_with('PACKAGE_KEYNAME', mask='id, description, capacity, itemCategory, keyName, '
641-
'prices[categories]')
642+
list_mock.assert_called_once_with('PACKAGE_KEYNAME', mask='id, description, capacity, itemCategory, '
643+
'keyName, prices[categories], '
644+
'softwareDescription[id,referenceCode,longDescription]')
642645
self.assertEqual([price1['id'], price2['id']], prices)
643646

644647
def test_get_item_price_id_without_capacity_restriction(self):

0 commit comments

Comments
 (0)