Support float casting for resource property

Use num_or_none instead of int_or_none to support those resource
property in float.

Change-Id: I8830e7104ff69524379ccfbd90eda37133a8960a
This commit is contained in:
Lin Yang 2018-12-18 13:26:21 -08:00
parent 879ec9adbd
commit c805d7540e
23 changed files with 104 additions and 98 deletions

View File

@ -28,17 +28,17 @@ class RackLocationField(base.CompositeField):
rack_units = base.Field('RackUnits')
"""Indicates the rack unit type"""
xlocation = base.Field('XLocation', adapter=rsd_lib_utils.int_or_none)
xlocation = base.Field('XLocation', adapter=rsd_lib_utils.num_or_none)
"""The horizontal location within uLocation, from left to right
(1.. MAXIMUM) 0 indicate not available
"""
ulocation = base.Field('ULocation', adapter=rsd_lib_utils.int_or_none)
ulocation = base.Field('ULocation', adapter=rsd_lib_utils.num_or_none)
"""The index of the top-most U of the component, from top to bottom
(1.. MAXIMUM) 0 indicate not available
"""
uheight = base.Field('UHeight', adapter=rsd_lib_utils.int_or_none)
uheight = base.Field('UHeight', adapter=rsd_lib_utils.num_or_none)
"""The height of managed zone, e.g. 8 for 8U, 16 for 16U"""
@ -47,11 +47,11 @@ class PowerSuppliesField(base.ListField):
"""The Power Supply name"""
power_capacity_watts = base.Field(
'PowerCapacityWatts', adapter=rsd_lib_utils.int_or_none)
'PowerCapacityWatts', adapter=rsd_lib_utils.num_or_none)
"""The maximum capacity of this Power Supply"""
last_power_output_watts = base.Field(
'LastPowerOutputWatts', adapter=rsd_lib_utils.int_or_none)
'LastPowerOutputWatts', adapter=rsd_lib_utils.num_or_none)
"""The average power output of this Power Supply"""
manufacturer = base.Field('Manufacturer')
@ -93,7 +93,7 @@ class PowerZone(base.ResourceBase):
"""The PowerZone physical location"""
max_psus_supported = base.Field(
'MaxPSUsSupported', adapter=rsd_lib_utils.int_or_none)
'MaxPSUsSupported', adapter=rsd_lib_utils.num_or_none)
"""The maximum number of Power Supply Units supported by PowerZone"""
presence = base.Field('Presence')
@ -107,21 +107,21 @@ class PowerZone(base.ResourceBase):
"""
number_of_psus_present = base.Field(
'NumberOfPSUsPresent', adapter=rsd_lib_utils.int_or_none)
'NumberOfPSUsPresent', adapter=rsd_lib_utils.num_or_none)
"""Indicates the number of existing Power Supply Units in PowerZone"""
power_consumed_watts = base.Field(
'PowerConsumedWatts', adapter=rsd_lib_utils.int_or_none)
'PowerConsumedWatts', adapter=rsd_lib_utils.num_or_none)
"""The total power consumption of PowerZone, sum of trays'
power consumption
"""
power_output_watts = base.Field(
'PowerOutputWatts', adapter=rsd_lib_utils.int_or_none)
'PowerOutputWatts', adapter=rsd_lib_utils.num_or_none)
"""The total power production of PowerZone, sum of PSUs' output"""
power_capacity_watts = base.Field(
'PowerCapacityWatts', adapter=rsd_lib_utils.int_or_none)
'PowerCapacityWatts', adapter=rsd_lib_utils.num_or_none)
"""The maximum power capacity supported by PowerZone"""
power_supplies = PowerSuppliesField('PowerSupplies')

View File

@ -28,17 +28,17 @@ class RackLocationField(base.CompositeField):
rack_units = base.Field('RackUnits')
"""Indicates the rack unit type"""
xlocation = base.Field('XLocation', adapter=rsd_lib_utils.int_or_none)
xlocation = base.Field('XLocation', adapter=rsd_lib_utils.num_or_none)
"""The horizontal location within uLocation, from left to right
(1.. MAXIMUM) 0 indicate not available
"""
ulocation = base.Field('ULocation', adapter=rsd_lib_utils.int_or_none)
ulocation = base.Field('ULocation', adapter=rsd_lib_utils.num_or_none)
"""The index of the top-most U of the component, from top to bottom
(1.. MAXIMUM) 0 indicate not available
"""
uheight = base.Field('UHeight', adapter=rsd_lib_utils.int_or_none)
uheight = base.Field('UHeight', adapter=rsd_lib_utils.num_or_none)
"""The height of managed zone, e.g. 8 for 8U, 16 for 16U"""
@ -46,7 +46,7 @@ class FansField(base.ListField):
name = base.Field('Name')
"""The Power Supply name"""
reading_rpm = base.Field('ReadingRPM', adapter=rsd_lib_utils.int_or_none)
reading_rpm = base.Field('ReadingRPM', adapter=rsd_lib_utils.num_or_none)
"""Fan RPM reading"""
status = StatusField('Status')
@ -61,7 +61,7 @@ class TemperaturesField(base.ListField):
"""The Power Supply name"""
reading_celsius = base.Field(
'ReadingCelsius', adapter=rsd_lib_utils.int_or_none)
'ReadingCelsius', adapter=rsd_lib_utils.num_or_none)
"""Current value of the temperature sensor's reading"""
physical_context = base.Field('PhysicalContext')
@ -107,23 +107,23 @@ class ThermalZone(base.ResourceBase):
"""
desired_speed_pwm = base.Field(
'DesiredSpeedPWM', adapter=rsd_lib_utils.int_or_none)
'DesiredSpeedPWM', adapter=rsd_lib_utils.num_or_none)
"""The desired FAN speed in current ThermalZone present in PWM unit"""
desired_speed_rpm = base.Field(
'DesiredSpeedRPM', adapter=rsd_lib_utils.int_or_none)
'DesiredSpeedRPM', adapter=rsd_lib_utils.num_or_none)
"""The desired FAN speed in current ThermalZone present in RPM unit"""
max_fans_supported = base.Field(
'MaxFansSupported', adapter=rsd_lib_utils.int_or_none)
'MaxFansSupported', adapter=rsd_lib_utils.num_or_none)
"""Number of maximum fans that can be installed in a given Thermal Zone"""
number_of_fans_present = base.Field(
'NumberOfFansPresent', adapter=rsd_lib_utils.int_or_none)
'NumberOfFansPresent', adapter=rsd_lib_utils.num_or_none)
"""The existing number of fans in current ThermalZone"""
volumetric_airflow = base.Field(
'VolumetricAirflow', adapter=rsd_lib_utils.int_or_none)
'VolumetricAirflow', adapter=rsd_lib_utils.num_or_none)
"""Rack Level PTAS Telemetry - Volumetric airflow in current ThermalZone"""
fans = FansField('Fans')

View File

@ -32,17 +32,17 @@ class IPSourceField(base.CompositeField):
class MACSourceField(base.CompositeField):
address = base.Field('Address')
mask = base.Field('Mask', adapter=rsd_lib_utils.int_or_none)
mask = base.Field('Mask', adapter=rsd_lib_utils.num_or_none)
class VLANIdField(base.CompositeField):
id = base.Field('Id', adapter=rsd_lib_utils.int_or_none)
mask = base.Field('Mask', adapter=rsd_lib_utils.int_or_none)
id = base.Field('Id', adapter=rsd_lib_utils.num_or_none)
mask = base.Field('Mask', adapter=rsd_lib_utils.num_or_none)
class L4SourcePortField(base.CompositeField):
port = base.Field('Port', adapter=rsd_lib_utils.int_or_none)
mask = base.Field('Mask', adapter=rsd_lib_utils.int_or_none)
port = base.Field('Port', adapter=rsd_lib_utils.num_or_none)
mask = base.Field('Mask', adapter=rsd_lib_utils.num_or_none)
class ConditionField(base.CompositeField):
@ -53,7 +53,7 @@ class ConditionField(base.CompositeField):
vlan_id = VLANIdField('VLANId')
l4_source_port = L4SourcePortField('L4SourcePort')
l4_destination_port = base.Field('L4DestinationPort',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
l4_protocol = base.Field('L4Protocol')
@ -68,7 +68,7 @@ class ACLRule(base.ResourceBase):
description = base.Field('Description')
"""The acl rule description"""
rule_id = base.Field('RuleId', adapter=rsd_lib_utils.int_or_none)
rule_id = base.Field('RuleId', adapter=rsd_lib_utils.num_or_none)
"""The acl rule id"""
action = base.Field('Action')

View File

@ -61,7 +61,7 @@ class IPv6AddressesField(base.ListField):
"""The port ipv6 address"""
prefix_length = base.Field(
'PrefixLength', adapter=rsd_lib_utils.int_or_none)
'PrefixLength', adapter=rsd_lib_utils.num_or_none)
"""The port ipv6 address prefix length"""
address_origin = base.Field('AddressOrigin')
@ -109,7 +109,7 @@ class Port(base.ResourceBase):
"""The port administrative state"""
link_speed_mbps = base.Field(
'LinkSpeedMbps', adapter=rsd_lib_utils.int_or_none)
'LinkSpeedMbps', adapter=rsd_lib_utils.num_or_none)
"""The port link speed(mbps)"""
neighbor_info = NeighborInfoField('NeighborInfo')
@ -119,7 +119,7 @@ class Port(base.ResourceBase):
"""The port neighbor mac"""
frame_size = base.Field(
'FrameSize', adapter=rsd_lib_utils.int_or_none)
'FrameSize', adapter=rsd_lib_utils.num_or_none)
"""The port frame size"""
autosense = base.Field('Autosense', adapter=bool)

View File

@ -32,7 +32,7 @@ class StaticMAC(base.ResourceBase):
mac_address = base.Field('MACAddress')
"""The static mac address"""
vlan_id = base.Field('VLANId', adapter=rsd_lib_utils.int_or_none)
vlan_id = base.Field('VLANId', adapter=rsd_lib_utils.num_or_none)
"""The static mac vlan id"""
oem = base.Field('Oem')

View File

@ -38,7 +38,7 @@ class VLAN(base.ResourceBase):
vlan_enable = base.Field('VLANEnable', adapter=bool)
"""The boolean indicate this vlan network interface is enabled or not"""
vlan_id = base.Field('VLANId', adapter=rsd_lib_utils.int_or_none)
vlan_id = base.Field('VLANId', adapter=rsd_lib_utils.num_or_none)
"""The vlan network interafce id"""
oem = base.Field('Oem')

View File

@ -74,7 +74,7 @@ class Switch(base.ResourceBase):
"""The switch managed state"""
total_switch_width = base.Field('TotalSwitchWidth',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The switch total switch width"""
indicator_led = base.Field('IndicatorLED')

View File

@ -28,21 +28,21 @@ class StatusField(base.CompositeField):
class GraphicalConsoleField(base.CompositeField):
service_enabled = base.Field('ServiceEnabled')
max_concurrent_sessions = base.Field('MaxConcurrentSessions',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
connect_types_supported = base.Field('ConnectTypesSupported')
class SerialConsoleField(base.CompositeField):
service_enabled = base.Field('ServiceEnabled')
max_concurrent_sessions = base.Field('MaxConcurrentSessions',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
connect_types_supported = base.Field('ConnectTypesSupported')
class CommandShellField(base.CompositeField):
service_enabled = base.Field('ServiceEnabled')
max_concurrent_sessions = base.Field('MaxConcurrentSessions',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
connect_types_supported = base.Field('ConnectTypesSupported')

View File

@ -91,7 +91,7 @@ class MemorySummaryField(base.CompositeField):
"""The memory status"""
size_gib = base.Field('TotalSystemMemoryGiB',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The size of memory of the node in GiB.
This signifies the total installed, operating system-accessible memory
@ -103,7 +103,7 @@ class ProcessorSummaryField(base.CompositeField):
status = StatusField('Status')
"""The processor status"""
count = base.Field('Count', adapter=rsd_lib_utils.int_or_none)
count = base.Field('Count', adapter=rsd_lib_utils.num_or_none)
"""The number of CPUs in the node."""
model = base.Field('Model')

View File

@ -51,15 +51,15 @@ class Memory(base.ResourceBase):
memory_media = base.Field('MemoryMedia')
"""The memory media"""
capacity_mib = base.Field('CapacityMiB', adapter=rsd_lib_utils.int_or_none)
capacity_mib = base.Field('CapacityMiB', adapter=rsd_lib_utils.num_or_none)
"""The capacity of this memory in MiB"""
data_width_bits = base.Field('DataWidthBits',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The data width bits of this memory."""
bus_width_bits = base.Field('BusWidthBits',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The bus width bits of this memory."""
manufacturer = base.Field('Manufacturer')
@ -90,7 +90,7 @@ class Memory(base.ResourceBase):
"""The device identity"""
rank_count = base.Field('RankCount',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The rank count of this memory"""
device_locator = base.Field('DeviceLocator')
@ -100,7 +100,7 @@ class Memory(base.ResourceBase):
"""The error correction"""
operating_speed_mhz = base.Field('OperatingSpeedMhz',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The operating speed of this memory in MHz"""
operating_memory_modes = base.Field('OperatingMemoryModes')

View File

@ -46,7 +46,7 @@ class IPv6StaticAddressesField(base.ListField):
class VLANField(base.CompositeField):
vlan_enable = base.Field('VLANEnable', adapter=bool)
vlan_id = base.Field('VLANId',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
class NetworkInterface(base.ResourceBase):
@ -84,7 +84,7 @@ class NetworkInterface(base.ResourceBase):
"""Indicates if the NIC is in Full Duplex mode or not"""
mtu_size = base.Field('MTUSize',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The network interface mtu size"""
host_name = base.Field('HostName')
@ -97,7 +97,7 @@ class NetworkInterface(base.ResourceBase):
"""Default gateway address that is currently in use on this interface"""
max_ipv6_static_addresses = base.Field('MaxIPv6StaticAddresses',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""Indicates the maximum number of Static IPv6 addresses that can be
configured on this interface
"""

View File

@ -39,7 +39,7 @@ class StorageControllersField(base.ListField):
serial_number = base.Field('SerialNumber')
part_number = base.Field('PartNumber')
asset_tag = base.Field('AssetTag')
speed_gbps = base.Field('SpeedGbps', adapter=rsd_lib_utils.int_or_none)
speed_gbps = base.Field('SpeedGbps', adapter=rsd_lib_utils.num_or_none)
firmware_version = base.Field('FirmwareVersion')
supported_controller_protocols = base.Field(
'SupportedControllerProtocols')

View File

@ -19,31 +19,31 @@ from rsd_lib import utils as rsd_lib_utils
class ReceivedField(base.CompositeField):
packets = base.Field('Packets', adapter=rsd_lib_utils.int_or_none)
packets = base.Field('Packets', adapter=rsd_lib_utils.num_or_none)
dropped_packets = base.Field('DroppedPackets',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
error_packets = base.Field('ErrorPackets',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
broadcast_packets = base.Field('BroadcastPackets',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
multicast_packets = base.Field('MulticastPackets',
adapter=rsd_lib_utils.int_or_none)
errors = base.Field('Errors', adapter=rsd_lib_utils.int_or_none)
received_bytes = base.Field('Bytes', adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
errors = base.Field('Errors', adapter=rsd_lib_utils.num_or_none)
received_bytes = base.Field('Bytes', adapter=rsd_lib_utils.num_or_none)
class TransmittedField(base.CompositeField):
packets = base.Field('Packets', adapter=rsd_lib_utils.int_or_none)
packets = base.Field('Packets', adapter=rsd_lib_utils.num_or_none)
dropped_packets = base.Field('DroppedPackets',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
error_packets = base.Field('ErrorPackets',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
broadcast_packets = base.Field('BroadcastPackets',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
multicast_packets = base.Field('MulticastPackets',
adapter=rsd_lib_utils.int_or_none)
errors = base.Field('Errors', adapter=rsd_lib_utils.int_or_none)
transmitted_bytes = base.Field('Bytes', adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
errors = base.Field('Errors', adapter=rsd_lib_utils.num_or_none)
transmitted_bytes = base.Field('Bytes', adapter=rsd_lib_utils.num_or_none)
class PortMetrics(base.ResourceBase):
@ -59,5 +59,5 @@ class PortMetrics(base.ResourceBase):
transmitted = TransmittedField('Transmitted')
"""The transmitted packets status"""
collisions = base.Field('Collisions', adapter=rsd_lib_utils.int_or_none)
collisions = base.Field('Collisions', adapter=rsd_lib_utils.num_or_none)
"""The collisions status"""

View File

@ -31,7 +31,7 @@ class MemoryMetrics(base.ResourceBase):
temperature_celsius = base.Field(
['Oem', 'Intel_RackScale', 'TemperatureCelsius'],
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The memory temperature celsius"""
health = base.Field(['Oem', 'Intel_RackScale', 'Health'])

View File

@ -29,27 +29,27 @@ class Metrics(base.ResourceBase):
"""The metrics identity"""
processor_bandwidth_percent = base.Field('ProcessorBandwidthPercent',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The processor bandwidth percent"""
memory_bandwidth_percent = base.Field('MemoryBandwidthPercent',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The memory bandwidth percent"""
memory_throttled_cycles_percent = base.Field(
'MemoryThrottledCyclesPercent', adapter=rsd_lib_utils.int_or_none)
'MemoryThrottledCyclesPercent', adapter=rsd_lib_utils.num_or_none)
"""The memory throttled cycles percent"""
processor_power_watt = base.Field('ProcessorPowerWatt',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The processor power watt"""
memory_power_watt = base.Field('MemoryPowerWatt',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The memory power watt"""
io_bandwidth_gbps = base.Field('IOBandwidthGBps',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The io bandwidth GBps"""
health = base.Field('Health')

View File

@ -29,19 +29,19 @@ class ProcessorMetrics(base.ResourceBase):
"""The metrics identity"""
average_frequency_mhz = base.Field('AverageFrequencyMHz',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The processor average frequency mhz"""
throttling_celsius = base.Field('ThrottlingCelsius',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The processor throttling celsius"""
temperature_celsius = base.Field('TemperatureCelsius',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The processor temperature celsius"""
consumed_power_watt = base.Field('ConsumedPowerWatt',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The processor consumed power watt"""
health = base.Field('Health')

View File

@ -25,10 +25,10 @@ LOG = logging.getLogger(__name__)
class ClassToPriorityMappingField(base.ListField):
priority = base.Field('Priority', adapter=rsd_lib_utils.int_or_none)
priority = base.Field('Priority', adapter=rsd_lib_utils.num_or_none)
traffic_class = base.Field(
'TrafficClass', adapter=rsd_lib_utils.int_or_none)
'TrafficClass', adapter=rsd_lib_utils.num_or_none)
class PriorityFlowControlField(base.CompositeField):
@ -38,27 +38,27 @@ class PriorityFlowControlField(base.CompositeField):
class PriorityToClassMappingField(base.ListField):
priority = base.Field('Priority', adapter=rsd_lib_utils.int_or_none)
priority = base.Field('Priority', adapter=rsd_lib_utils.num_or_none)
traffic_class = base.Field(
'TrafficClass', adapter=rsd_lib_utils.int_or_none)
'TrafficClass', adapter=rsd_lib_utils.num_or_none)
class TrafficClassficationField(base.ListField):
port = base.Field('Port', adapter=rsd_lib_utils.int_or_none)
port = base.Field('Port', adapter=rsd_lib_utils.num_or_none)
protocol = base.Field('Protocol')
traffic_class = base.Field(
'TrafficClass', adapter=rsd_lib_utils.int_or_none)
'TrafficClass', adapter=rsd_lib_utils.num_or_none)
class TransmissionSelectionField(base.ListField):
bandwidth_percent = base.Field(
'BandwidthPercent', adapter=rsd_lib_utils.int_or_none)
'BandwidthPercent', adapter=rsd_lib_utils.num_or_none)
traffic_class = base.Field(
'TrafficClass', adapter=rsd_lib_utils.int_or_none)
'TrafficClass', adapter=rsd_lib_utils.num_or_none)
class EthernetSwitch(v2_2_ethernet_switch.EthernetSwitch):

View File

@ -57,7 +57,7 @@ class IPTransportDetailsField(base.ListField):
transport_protocol = base.Field('TransportProtocol')
ipv4_address = base.Field(['IPv4Address', 'Address'])
ipv6_address = base.Field(['IPv6Address', 'Address'])
port = base.Field('Port', adapter=rsd_lib_utils.int_or_none)
port = base.Field('Port', adapter=rsd_lib_utils.num_or_none)
class AuthenticationField(base.CompositeField):

View File

@ -81,7 +81,7 @@ class Drive(base.ResourceBase):
"""The media type of this drive"""
capacity_bytes = base.Field('CapacityBytes',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The capacity in Bytes of this drive"""
manufacturer = base.Field('Manufacturer')

View File

@ -33,13 +33,13 @@ class StatusField(base.CompositeField):
class CapacityField(base.CompositeField):
allocated_bytes = base.Field(['Data', 'AllocatedBytes'],
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
consumed_bytes = base.Field(['Data', 'ConsumedBytes'],
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
guaranteed_bytes = base.Field(['Data', 'GuaranteedBytes'],
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
provisioned_bytes = base.Field(['Data', 'ProvisionedBytes'],
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
class CapacitySourcesField(base.ListField):

View File

@ -37,7 +37,7 @@ class CapacitySourcesField(base.ListField):
adapter=utils.get_members_identities)
allocated_Bytes = base.Field(
['ProvidedCapacity', 'Data', 'AllocatedBytes'],
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
class LinksField(base.CompositeField):
@ -92,11 +92,11 @@ class Volume(base.ResourceBase):
"""The access capabilities of volume"""
capacity_bytes = base.Field('CapacityBytes',
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The capacity of volume in bytes"""
allocated_Bytes = base.Field(['Capacity', 'Data', 'AllocatedBytes'],
adapter=rsd_lib_utils.int_or_none)
adapter=rsd_lib_utils.num_or_none)
"""The allocated capacity of volume in bytes"""
capacity_sources = CapacitySourcesField('CapacitySources')

View File

@ -28,7 +28,9 @@ class UtilsTestCase(testtools.TestCase):
rsd_lib_utils.get_resource_identity({
"@odata.id": "/redfish/v1/Systems/437XR1138R2/BIOS"}))
def test_int_or_none(self):
self.assertIsNone(rsd_lib_utils.int_or_none(None))
self.assertEqual(0, rsd_lib_utils.int_or_none('0'))
self.assertEqual(1, rsd_lib_utils.int_or_none('1'))
def test_num_or_none(self):
self.assertIsNone(rsd_lib_utils.num_or_none(None))
self.assertEqual(0, rsd_lib_utils.num_or_none('0'))
self.assertEqual(1, rsd_lib_utils.num_or_none('1'))
self.assertEqual(10, rsd_lib_utils.num_or_none('10.0'))
self.assertEqual(12.5, rsd_lib_utils.num_or_none('12.5'))

View File

@ -21,13 +21,17 @@ def get_resource_identity(resource):
return resource.get('@odata.id', None)
def int_or_none(x):
"""Given a value x it cast as int or None
def num_or_none(x):
"""Given a value x it cast as int, float or None
:param x: The value to transform and return
:returns: Either None or x cast to an int
:returns: Either None or x cast to an int/float
"""
if x is None:
return None
return int(x)
try:
return int(x)
except ValueError:
return float(x)