Few more python3 compatibility changes, PEP8 standard changes and add missing methods in PDDF common base APIs (#7021)
#### Why I did it - Python3 compatibility changes for PDDF eeprom class - Adding API for temperature in PDDF psu class - PEP8 standard changes and adding missing method in PDDF sfp class #### How I did it - Using python3 to invoke the sonic_platform module in PDDF based platform - Running autopep8 tool to comply to PEP8 standards
This commit is contained in:
parent
72110d08eb
commit
0144258121
@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
from sonic_eeprom import eeprom_tlvinfo
|
from sonic_eeprom import eeprom_tlvinfo
|
||||||
import binascii
|
|
||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
raise ImportError(str(e) + "- required module not found")
|
raise ImportError(str(e) + "- required module not found")
|
||||||
|
|
||||||
@ -70,42 +69,42 @@ class PddfEeprom(eeprom_tlvinfo.TlvInfoDecoder):
|
|||||||
(is_valid, results) = self.get_tlv_field(self.eeprom_data, self._TLV_CODE_SERIAL_NUMBER)
|
(is_valid, results) = self.get_tlv_field(self.eeprom_data, self._TLV_CODE_SERIAL_NUMBER)
|
||||||
if not is_valid:
|
if not is_valid:
|
||||||
return "N/A"
|
return "N/A"
|
||||||
return results[2]
|
return results[2].decode('ascii')
|
||||||
|
|
||||||
def base_mac_addr(self):
|
def base_mac_addr(self):
|
||||||
(is_valid, t) = self.get_tlv_field(self.eeprom_data, self._TLV_CODE_MAC_BASE)
|
(is_valid, t) = self.get_tlv_field(self.eeprom_data, self._TLV_CODE_MAC_BASE)
|
||||||
if not is_valid or t[1] != 6:
|
if not is_valid or t[1] != 6:
|
||||||
return super(TlvInfoDecoder, self).switchaddrstr(e)
|
return super(TlvInfoDecoder, self).switchaddrstr(e)
|
||||||
|
|
||||||
return ":".join([binascii.b2a_hex(T) for T in t[2]])
|
return ":".join(["{:02x}".format(T) for T in t[2]]).upper()
|
||||||
|
|
||||||
def modelstr(self):
|
def modelstr(self):
|
||||||
(is_valid, results) = self.get_tlv_field(self.eeprom_data, self._TLV_CODE_PRODUCT_NAME)
|
(is_valid, results) = self.get_tlv_field(self.eeprom_data, self._TLV_CODE_PRODUCT_NAME)
|
||||||
if not is_valid:
|
if not is_valid:
|
||||||
return "N/A"
|
return "N/A"
|
||||||
|
|
||||||
return results[2]
|
return results[2].decode('ascii')
|
||||||
|
|
||||||
def part_number_str(self):
|
def part_number_str(self):
|
||||||
(is_valid, results) = self.get_tlv_field(self.eeprom_data, self._TLV_CODE_PART_NUMBER)
|
(is_valid, results) = self.get_tlv_field(self.eeprom_data, self._TLV_CODE_PART_NUMBER)
|
||||||
if not is_valid:
|
if not is_valid:
|
||||||
return "N/A"
|
return "N/A"
|
||||||
|
|
||||||
return results[2]
|
return results[2].decode('ascii')
|
||||||
|
|
||||||
def serial_str(self):
|
def serial_str(self):
|
||||||
(is_valid, results) = self.get_tlv_field(self.eeprom_data, self._TLV_CODE_SERVICE_TAG)
|
(is_valid, results) = self.get_tlv_field(self.eeprom_data, self._TLV_CODE_SERVICE_TAG)
|
||||||
if not is_valid:
|
if not is_valid:
|
||||||
return "N/A"
|
return "N/A"
|
||||||
|
|
||||||
return results[2]
|
return results[2].decode('ascii')
|
||||||
|
|
||||||
def revision_str(self):
|
def revision_str(self):
|
||||||
(is_valid, results) = self.get_tlv_field(self.eeprom_data, self._TLV_CODE_DEVICE_VERSION)
|
(is_valid, results) = self.get_tlv_field(self.eeprom_data, self._TLV_CODE_DEVICE_VERSION)
|
||||||
if not is_valid:
|
if not is_valid:
|
||||||
return "N/A"
|
return "N/A"
|
||||||
|
|
||||||
return results[2]
|
return results[2].decode('ascii')
|
||||||
|
|
||||||
def system_eeprom_info(self):
|
def system_eeprom_info(self):
|
||||||
"""
|
"""
|
||||||
|
@ -260,6 +260,24 @@ class PddfPsu(PsuBase):
|
|||||||
color = self.pddf_obj.get_led_color()
|
color = self.pddf_obj.get_led_color()
|
||||||
return (color)
|
return (color)
|
||||||
|
|
||||||
|
def get_temperature(self):
|
||||||
|
"""
|
||||||
|
Retrieves current temperature reading from PSU
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A float number of current temperature in Celsius up to nearest thousandth
|
||||||
|
of one degree Celsius, e.g. 30.125
|
||||||
|
"""
|
||||||
|
device = "PSU{}".format(self.psu_index)
|
||||||
|
output = self.pddf_obj.get_attr_name_output(device, "psu_temp1_input")
|
||||||
|
if not output:
|
||||||
|
return 0.0
|
||||||
|
|
||||||
|
temp1 = output['status']
|
||||||
|
|
||||||
|
# temperature returned is in milli celcius
|
||||||
|
return float(temp1)/1000
|
||||||
|
|
||||||
def get_input_voltage(self):
|
def get_input_voltage(self):
|
||||||
"""
|
"""
|
||||||
Retrieves current PSU input voltage
|
Retrieves current PSU input voltage
|
||||||
|
@ -83,7 +83,7 @@ QSFP_POWEROVERRIDE_WIDTH = 1
|
|||||||
QSFP_MODULE_THRESHOLD_OFFSET = 128
|
QSFP_MODULE_THRESHOLD_OFFSET = 128
|
||||||
QSFP_MODULE_THRESHOLD_WIDTH = 24
|
QSFP_MODULE_THRESHOLD_WIDTH = 24
|
||||||
QSFP_CHANNEL_THRESHOLD_OFFSET = 176
|
QSFP_CHANNEL_THRESHOLD_OFFSET = 176
|
||||||
QSFP_CHANNEL_THRESHOLD_WIDTH = 16
|
QSFP_CHANNEL_THRESHOLD_WIDTH = 24
|
||||||
|
|
||||||
|
|
||||||
SFP_TEMPE_OFFSET = 96
|
SFP_TEMPE_OFFSET = 96
|
||||||
@ -94,8 +94,6 @@ SFP_CHANNL_MON_OFFSET = 100
|
|||||||
SFP_CHANNL_MON_WIDTH = 6
|
SFP_CHANNL_MON_WIDTH = 6
|
||||||
SFP_MODULE_THRESHOLD_OFFSET = 0
|
SFP_MODULE_THRESHOLD_OFFSET = 0
|
||||||
SFP_MODULE_THRESHOLD_WIDTH = 40
|
SFP_MODULE_THRESHOLD_WIDTH = 40
|
||||||
SFP_CHANNL_THRESHOLD_OFFSET = 112
|
|
||||||
SFP_CHANNL_THRESHOLD_WIDTH = 2
|
|
||||||
SFP_STATUS_CONTROL_OFFSET = 110
|
SFP_STATUS_CONTROL_OFFSET = 110
|
||||||
SFP_STATUS_CONTROL_WIDTH = 1
|
SFP_STATUS_CONTROL_WIDTH = 1
|
||||||
SFP_TX_DISABLE_HARD_BIT = 7
|
SFP_TX_DISABLE_HARD_BIT = 7
|
||||||
@ -592,8 +590,9 @@ class PddfSfp(SfpBase):
|
|||||||
if sfpd_obj is None:
|
if sfpd_obj is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
dom_thres_raw = self.__read_eeprom_specific_bytes(QSFP_MODULE_THRESHOLD_OFFSET, QSFP_MODULE_THRESHOLD_WIDTH)
|
offset = 384
|
||||||
|
dom_thres_raw = self.__read_eeprom_specific_bytes(
|
||||||
|
(offset+QSFP_MODULE_THRESHOLD_OFFSET), QSFP_MODULE_THRESHOLD_WIDTH)
|
||||||
if dom_thres_raw:
|
if dom_thres_raw:
|
||||||
module_threshold_values = sfpd_obj.parse_module_threshold_values(
|
module_threshold_values = sfpd_obj.parse_module_threshold_values(
|
||||||
dom_thres_raw, 0)
|
dom_thres_raw, 0)
|
||||||
@ -608,8 +607,8 @@ class PddfSfp(SfpBase):
|
|||||||
xcvr_dom_threshold_info_dict['vcchighwarning'] = module_threshold_data['VccHighWarning']['value']
|
xcvr_dom_threshold_info_dict['vcchighwarning'] = module_threshold_data['VccHighWarning']['value']
|
||||||
xcvr_dom_threshold_info_dict['vcclowwarning'] = module_threshold_data['VccLowWarning']['value']
|
xcvr_dom_threshold_info_dict['vcclowwarning'] = module_threshold_data['VccLowWarning']['value']
|
||||||
|
|
||||||
dom_thres_raw = self.__read_eeprom_specific_bytes(
|
dom_thres_raw = self.__read_eeprom_specific_bytes((offset + QSFP_CHANNEL_THRESHOLD_OFFSET),
|
||||||
QSFP_CHANNEL_THRESHOLD_OFFSET, QSFP_CHANNEL_THRESHOLD_WIDTH)
|
QSFP_CHANNEL_THRESHOLD_WIDTH)
|
||||||
if dom_thres_raw:
|
if dom_thres_raw:
|
||||||
channel_threshold_values = sfpd_obj.parse_channel_threshold_values(
|
channel_threshold_values = sfpd_obj.parse_channel_threshold_values(
|
||||||
dom_thres_raw, 0)
|
dom_thres_raw, 0)
|
||||||
@ -1040,6 +1039,28 @@ class PddfSfp(SfpBase):
|
|||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def get_intr_status(self):
|
||||||
|
"""
|
||||||
|
Retrieves the interrupt status for this transceiver
|
||||||
|
Returns:
|
||||||
|
A Boolean, True if there is interrupt, False if not
|
||||||
|
"""
|
||||||
|
intr_status = False
|
||||||
|
|
||||||
|
# Interrupt status can be checked for absent ports too
|
||||||
|
device = 'PORT{}'.format(self.port_index)
|
||||||
|
output = self.pddf_obj.get_attr_name_output(device, 'xcvr_intr_status')
|
||||||
|
|
||||||
|
if output:
|
||||||
|
status = int(output['status'].rstrip())
|
||||||
|
|
||||||
|
if status == 1:
|
||||||
|
intr_status = True
|
||||||
|
else:
|
||||||
|
intr_status = False
|
||||||
|
|
||||||
|
return intr_status
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
"""
|
"""
|
||||||
Reset SFP and return all user module settings to their default srate.
|
Reset SFP and return all user module settings to their default srate.
|
||||||
@ -1354,6 +1375,8 @@ class PddfSfp(SfpBase):
|
|||||||
# if self.plugin_data doesn't specify anything regarding Transceivers
|
# if self.plugin_data doesn't specify anything regarding Transceivers
|
||||||
if modpres == '1':
|
if modpres == '1':
|
||||||
return True
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
def get_model(self):
|
def get_model(self):
|
||||||
"""
|
"""
|
||||||
|
Reference in New Issue
Block a user