Skip to content

Commit 94076a4

Browse files
Merge pull request #1359 from allmightyspiff/master
remove the zeros(0) in the list.
2 parents 76a7fbf + 8a5e55b commit 94076a4

File tree

3 files changed

+101
-142
lines changed

3 files changed

+101
-142
lines changed

SoftLayer/CLI/hardware/create_options.py

Lines changed: 82 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -30,128 +30,110 @@ def cli(env, prices, location=None):
3030
dc_table.add_row([location_info['name'], location_info['key']])
3131
tables.append(dc_table)
3232

33-
if prices:
34-
_preset_prices_table(options['sizes'], tables)
35-
_os_prices_table(options['operating_systems'], tables)
36-
_port_speed_prices_table(options['port_speeds'], tables)
37-
_extras_prices_table(options['extras'], tables)
38-
else:
39-
# Presets
40-
preset_table = formatting.Table(['Size', 'Value'], title="Sizes")
41-
preset_table.sortby = 'Value'
42-
preset_table.align = 'l'
43-
for size in options['sizes']:
44-
preset_table.add_row([size['name'], size['key']])
45-
tables.append(preset_table)
46-
47-
# Operating systems
48-
os_table = formatting.Table(['OS', 'Key', 'Reference Code'], title="Operating Systems")
49-
os_table.sortby = 'Key'
50-
os_table.align = 'l'
51-
for operating_system in options['operating_systems']:
52-
os_table.add_row([operating_system['name'], operating_system['key'], operating_system['referenceCode']])
53-
tables.append(os_table)
54-
55-
# Port speed
56-
port_speed_table = formatting.Table(['Network', 'Speed', 'Key'], title="Network Options")
57-
port_speed_table.sortby = 'Speed'
58-
port_speed_table.align = 'l'
59-
for speed in options['port_speeds']:
60-
port_speed_table.add_row([speed['name'], speed['speed'], speed['key']])
61-
tables.append(port_speed_table)
62-
63-
# Extras
64-
extras_table = formatting.Table(['Extra Option', 'Value'], title="Extras")
65-
extras_table.sortby = 'Value'
66-
extras_table.align = 'l'
67-
for extra in options['extras']:
68-
extras_table.add_row([extra['name'], extra['key']])
69-
tables.append(extras_table)
33+
tables.append(_preset_prices_table(options['sizes'], prices))
34+
tables.append(_os_prices_table(options['operating_systems'], prices))
35+
tables.append(_port_speed_prices_table(options['port_speeds'], prices))
36+
tables.append(_extras_prices_table(options['extras'], prices))
7037

38+
# since this is multiple tables, this is required for a valid JSON object to be rendered.
7139
env.fout(formatting.listing(tables, separator='\n'))
7240

7341

74-
def _preset_prices_table(sizes, tables):
42+
def _preset_prices_table(sizes, prices=False):
7543
"""Shows Server Preset options prices.
7644
7745
:param [] sizes: List of Hardware Server sizes.
78-
:param tables: Table formatting.
46+
:param prices: Create a price table or not
7947
"""
80-
preset_prices_table = formatting.Table(['Size', 'Value', 'Hourly', 'Monthly'], title="Sizes Prices")
81-
preset_prices_table.sortby = 'Value'
82-
preset_prices_table.align = 'l'
83-
for size in sizes:
84-
preset_prices_table.add_row([size['name'], size['key'], "%.4f" % size['hourlyRecurringFee'],
85-
"%.4f" % size['recurringFee']])
86-
tables.append(preset_prices_table)
48+
if prices:
49+
table = formatting.Table(['Size', 'Value', 'Hourly', 'Monthly'], title="Sizes")
50+
for size in sizes:
51+
if size.get('hourlyRecurringFee', 0) + size.get('recurringFee', 0) + 1 > 0:
52+
table.add_row([size['name'], size['key'], "%.4f" % size['hourlyRecurringFee'],
53+
"%.4f" % size['recurringFee']])
54+
else:
55+
table = formatting.Table(['Size', 'Value'], title="Sizes")
56+
for size in sizes:
57+
table.add_row([size['name'], size['key']])
58+
table.sortby = 'Value'
59+
table.align = 'l'
60+
return table
8761

8862

89-
def _os_prices_table(operating_systems, tables):
63+
def _os_prices_table(operating_systems, prices=False):
9064
"""Shows Server Operating Systems prices cost and capacity restriction.
9165
9266
:param [] operating_systems: List of Hardware Server operating systems.
93-
:param tables: Table formatting.
67+
:param prices: Create a price table or not
9468
"""
95-
os_prices_table = formatting.Table(['OS Key', 'Hourly', 'Monthly', 'Restriction'],
96-
title="Operating Systems Prices")
97-
os_prices_table.sortby = 'OS Key'
98-
os_prices_table.align = 'l'
99-
for operating_system in operating_systems:
100-
for price in operating_system['prices']:
101-
cr_max = _get_price_data(price, 'capacityRestrictionMaximum')
102-
cr_min = _get_price_data(price, 'capacityRestrictionMinimum')
103-
cr_type = _get_price_data(price, 'capacityRestrictionType')
104-
os_prices_table.add_row(
105-
[operating_system['key'],
106-
_get_price_data(price, 'hourlyRecurringFee'),
107-
_get_price_data(price, 'recurringFee'),
108-
"%s - %s %s" % (cr_min, cr_max, cr_type)])
109-
tables.append(os_prices_table)
110-
111-
112-
def _port_speed_prices_table(port_speeds, tables):
69+
if prices:
70+
table = formatting.Table(['Key', 'Hourly', 'Monthly', 'Restriction'],
71+
title="Operating Systems")
72+
for operating_system in operating_systems:
73+
for price in operating_system['prices']:
74+
cr_max = _get_price_data(price, 'capacityRestrictionMaximum')
75+
cr_min = _get_price_data(price, 'capacityRestrictionMinimum')
76+
cr_type = _get_price_data(price, 'capacityRestrictionType')
77+
table.add_row(
78+
[operating_system['key'],
79+
_get_price_data(price, 'hourlyRecurringFee'),
80+
_get_price_data(price, 'recurringFee'),
81+
"%s - %s %s" % (cr_min, cr_max, cr_type)])
82+
else:
83+
table = formatting.Table(['OS', 'Key', 'Reference Code'], title="Operating Systems")
84+
for operating_system in operating_systems:
85+
table.add_row([operating_system['name'], operating_system['key'], operating_system['referenceCode']])
86+
87+
table.sortby = 'Key'
88+
table.align = 'l'
89+
return table
90+
91+
92+
def _port_speed_prices_table(port_speeds, prices=False):
11393
"""Shows Server Port Speeds prices cost and capacity restriction.
11494
11595
:param [] port_speeds: List of Hardware Server Port Speeds.
116-
:param tables: Table formatting.
96+
:param prices: Create a price table or not
11797
"""
118-
port_speed_prices_table = formatting.Table(['Key', 'Speed', 'Hourly', 'Monthly', 'Restriction'],
119-
title="Network Options Prices")
120-
port_speed_prices_table.sortby = 'Speed'
121-
port_speed_prices_table.align = 'l'
122-
for speed in port_speeds:
123-
for price in speed['prices']:
124-
cr_max = _get_price_data(price, 'capacityRestrictionMaximum')
125-
cr_min = _get_price_data(price, 'capacityRestrictionMinimum')
126-
cr_type = _get_price_data(price, 'capacityRestrictionType')
127-
port_speed_prices_table.add_row(
128-
[speed['key'], speed['speed'],
129-
_get_price_data(price, 'hourlyRecurringFee'),
130-
_get_price_data(price, 'recurringFee'),
131-
"%s - %s %s" % (cr_min, cr_max, cr_type)])
132-
tables.append(port_speed_prices_table)
133-
134-
135-
def _extras_prices_table(extras, tables):
98+
if prices:
99+
table = formatting.Table(['Key', 'Speed', 'Hourly', 'Monthly'], title="Network Options")
100+
for speed in port_speeds:
101+
for price in speed['prices']:
102+
table.add_row(
103+
[speed['key'], speed['speed'],
104+
_get_price_data(price, 'hourlyRecurringFee'),
105+
_get_price_data(price, 'recurringFee')])
106+
else:
107+
table = formatting.Table(['Network', 'Speed', 'Key'], title="Network Options")
108+
for speed in port_speeds:
109+
table.add_row([speed['name'], speed['speed'], speed['key']])
110+
table.sortby = 'Speed'
111+
table.align = 'l'
112+
return table
113+
114+
115+
def _extras_prices_table(extras, prices=False):
136116
"""Shows Server extras prices cost and capacity restriction.
137117
138118
:param [] extras: List of Hardware Server Extras.
139-
:param tables: Table formatting.
119+
:param prices: Create a price table or not
140120
"""
141-
extras_prices_table = formatting.Table(['Extra Option Key', 'Hourly', 'Monthly', 'Restriction'],
142-
title="Extras Prices")
143-
extras_prices_table.align = 'l'
144-
for extra in extras:
145-
for price in extra['prices']:
146-
cr_max = _get_price_data(price, 'capacityRestrictionMaximum')
147-
cr_min = _get_price_data(price, 'capacityRestrictionMinimum')
148-
cr_type = _get_price_data(price, 'capacityRestrictionType')
149-
extras_prices_table.add_row(
150-
[extra['key'],
151-
_get_price_data(price, 'hourlyRecurringFee'),
152-
_get_price_data(price, 'recurringFee'),
153-
"%s - %s %s" % (cr_min, cr_max, cr_type)])
154-
tables.append(extras_prices_table)
121+
if prices:
122+
table = formatting.Table(['Key', 'Hourly', 'Monthly'], title="Extras")
123+
124+
for extra in extras:
125+
for price in extra['prices']:
126+
table.add_row(
127+
[extra['key'],
128+
_get_price_data(price, 'hourlyRecurringFee'),
129+
_get_price_data(price, 'recurringFee')])
130+
else:
131+
table = formatting.Table(['Extra Option', 'Key'], title="Extras")
132+
for extra in extras:
133+
table.add_row([extra['name'], extra['key']])
134+
table.sortby = 'Key'
135+
table.align = 'l'
136+
return table
155137

156138

157139
def _get_price_data(price, item):
@@ -164,24 +146,3 @@ def _get_price_data(price, item):
164146
if item in price:
165147
result = price[item]
166148
return result
167-
168-
169-
def _location_item_prices(location_prices, tables):
170-
"""Get a specific data from HS price.
171-
172-
:param price: Hardware Server price.
173-
:param string item: Hardware Server price data.
174-
"""
175-
location_prices_table = formatting.Table(['keyName', 'priceId', 'Hourly', 'Monthly', 'Restriction'])
176-
location_prices_table.sortby = 'keyName'
177-
location_prices_table.align = 'l'
178-
for price in location_prices:
179-
cr_max = _get_price_data(price, 'capacityRestrictionMaximum')
180-
cr_min = _get_price_data(price, 'capacityRestrictionMinimum')
181-
cr_type = _get_price_data(price, 'capacityRestrictionType')
182-
location_prices_table.add_row(
183-
[price['item']['keyName'], price['id'],
184-
_get_price_data(price, 'hourlyRecurringFee'),
185-
_get_price_data(price, 'recurringFee'),
186-
"%s - %s %s" % (cr_min, cr_max, cr_type)])
187-
tables.append(location_prices_table)

SoftLayer/fixtures/SoftLayer_Product_Package.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -866,8 +866,8 @@
866866
'referenceCode': 'REDHAT_5_64'
867867
},
868868
'prices': [{'id': 1122,
869-
'hourlyRecurringFee': 0.0,
870-
'recurringFee': 0.0,
869+
'hourlyRecurringFee': 0.10,
870+
'recurringFee': 0.10,
871871
'categories': [{'id': 26,
872872
'name': 'Uplink Port Speeds',
873873
'categoryCode': 'port_speed'}]}],
@@ -879,8 +879,8 @@
879879
'description': 'Public & Private Networks',
880880
'itemCategory': {'categoryCode': 'Uplink Port Speeds'},
881881
'prices': [{'id': 4477,
882-
'hourlyRecurringFee': 0.0,
883-
'recurringFee': 0.0,
882+
'hourlyRecurringFee': 0.10,
883+
'recurringFee': 0.10,
884884
'categories': [{'id': 26,
885885
'name': 'Uplink Port Speeds',
886886
'categoryCode': 'port_speed'}]}],
@@ -921,8 +921,8 @@
921921
'itemCategory': {'categoryCode': 'Computing Instance'},
922922
'prices': [{'id': 1144,
923923
'locationGroupId': None,
924-
'hourlyRecurringFee': 0.0,
925-
'recurringFee': 0.0,
924+
'hourlyRecurringFee': 0.10,
925+
'recurringFee': 0.10,
926926
'categories': [{'id': 80,
927927
'name': 'Computing Instance',
928928
'categoryCode': 'guest_core'}]}],
@@ -948,39 +948,39 @@
948948
'capacity': '1',
949949
'description': '1 GB iSCSI Storage',
950950
'itemCategory': {'categoryCode': 'iscsi'},
951-
'prices': [{'id': 2222, 'hourlyRecurringFee': 0.0, 'recurringFee': 0.0}],
951+
'prices': [{'id': 2222, 'hourlyRecurringFee': 0.10, 'recurringFee': 0.10}],
952952
},
953953
{
954954
'id': 1121,
955955
'keyName': 'KeyName081',
956956
'capacity': '20',
957957
'description': '20 GB iSCSI snapshot',
958958
'itemCategory': {'categoryCode': 'iscsi_snapshot_space'},
959-
'prices': [{'id': 2014, 'hourlyRecurringFee': 0.0}],
959+
'prices': [{'id': 2014, 'hourlyRecurringFee': 0.10}],
960960
},
961961
{
962962
'id': 4440,
963963
'keyName': 'KeyName019',
964964
'capacity': '4',
965965
'description': '4 Portable Public IP Addresses',
966966
'itemCategory': {'categoryCode': 'sov_sec_ip_addresses_pub'},
967-
'prices': [{'id': 4444, 'hourlyRecurringFee': 0.0, 'recurringFee': 0.0}],
967+
'prices': [{'id': 4444, 'hourlyRecurringFee': 0.10, 'recurringFee': 0.10}],
968968
},
969969
{
970970
'id': 8880,
971971
'keyName': 'KeyName0199',
972972
'capacity': '8',
973973
'description': '8 Portable Public IP Addresses',
974974
'itemCategory': {'categoryCode': 'sov_sec_ip_addresses_pub'},
975-
'prices': [{'id': 8888, 'hourlyRecurringFee': 0.0, 'recurringFee': 0.0}],
975+
'prices': [{'id': 8888, 'hourlyRecurringFee': 0.10, 'recurringFee': 0.10}],
976976
},
977977
{
978978
'id': 44400,
979979
'keyName': 'KeyName0155',
980980
'capacity': '4',
981981
'description': '4 Portable Private IP Addresses',
982982
'itemCategory': {'categoryCode': 'sov_sec_ip_addresses_priv'},
983-
'prices': [{'id': 44441, 'hourlyRecurringFee': 0.0, 'recurringFee': 0.0}],
983+
'prices': [{'id': 44441, 'hourlyRecurringFee': 0.10, 'recurringFee': 0.10}],
984984
},
985985
{
986986
'id': 88800,
@@ -1012,7 +1012,7 @@
10121012
'capacity': '0',
10131013
'description': 'Global IPv6',
10141014
'itemCategory': {'categoryCode': 'global_ipv6'},
1015-
'prices': [{'id': 611, 'hourlyRecurringFee': 0.0, 'recurringFee': 0.0}],
1015+
'prices': [{'id': 611, 'hourlyRecurringFee': 0.10, 'recurringFee': 0.10}],
10161016
},
10171017
{'attributes': [],
10181018
'capacity': '0',
@@ -1056,16 +1056,16 @@
10561056
'keyName': 'OS_UBUNTU_14_04_LTS_TRUSTY_TAHR_64_BIT',
10571057
'prices': [{'accountRestrictions': [],
10581058
'currentPriceFlag': '',
1059-
'hourlyRecurringFee': '0',
1059+
'hourlyRecurringFee': '0.10',
10601060
'id': 37650,
10611061
"locationGroupId": '',
10621062
'itemId': 4702,
10631063
'laborFee': '0',
10641064
'onSaleFlag': '',
10651065
'oneTimeFee': '0',
10661066
'quantity': '',
1067-
'recurringFee': '0',
1068-
'setupFee': '0',
1067+
'recurringFee': '0.1',
1068+
'setupFee': '0.1',
10691069
'sort': 9}],
10701070
'softwareDescription': {'id': 1362,
10711071
'longDescription': 'Ubuntu / 14.04-64',

tests/CLI/modules/server_tests.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -367,18 +367,16 @@ def test_create_options_prices(self):
367367

368368
self.assert_no_fail(result)
369369
output = json.loads(result.output)
370-
self.assertEqual(output[1][0]['Hourly'], "%.4f" % 0.0)
371-
self.assertEqual(output[1][0]['Value'], 'M1_64X512X25')
372-
self.assertEqual(output[1][0]['Size'], 'M1.64x512x25')
370+
self.assertEqual(output[2][0]['Monthly'], str(0.1))
371+
self.assertEqual(output[2][0]['Key'], 'OS_UBUNTU_14_04_LTS_TRUSTY_TAHR_64_BIT')
373372

374373
def test_create_options_location(self):
375374
result = self.run_command(['server', 'create-options', '--prices', 'dal13'])
376375

377376
self.assert_no_fail(result)
378377
output = json.loads(result.output)
379-
self.assertEqual(output[1][0]['Monthly'], "%.4f" % 0.0)
380-
self.assertEqual(output[1][0]['Hourly'], "%.4f" % 0.0)
381-
self.assertEqual(output[1][0]['Value'], 'M1_64X512X25')
378+
self.assertEqual(output[2][0]['Monthly'], str(0.1))
379+
self.assertEqual(output[2][0]['Key'], 'OS_UBUNTU_14_04_LTS_TRUSTY_TAHR_64_BIT')
382380

383381
@mock.patch('SoftLayer.HardwareManager.place_order')
384382
def test_create_server(self, order_mock):

0 commit comments

Comments
 (0)