Skip to content

Commit dc15fbc

Browse files
[DellEMC]: EEPROM platform API Python3 compliance changes (#5960)
Make EEPROM platform APIs Python3 compliant in DellEMC platforms by handling bytearray type returned by read_eeprom and read_eeprom_bytes methods.
1 parent 5038730 commit dc15fbc

File tree

5 files changed

+89
-90
lines changed

5 files changed

+89
-90
lines changed

platform/broadcom/sonic-platform-modules-dell/s5232f/sonic_platform/eeprom.py

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
try:
1212
import os.path
1313
from sonic_eeprom import eeprom_tlvinfo
14-
import binascii
1514
except ImportError as e:
1615
raise ImportError(str(e) + "- required module not found")
1716

@@ -40,7 +39,7 @@ def __init__(self):
4039
if not self.is_valid_tlvinfo_header(eeprom):
4140
return
4241

43-
total_length = (ord(eeprom[9]) << 8) | ord(eeprom[10])
42+
total_length = (eeprom[9] << 8) | eeprom[10]
4443
tlv_index = self._TLV_INFO_HDR_LEN
4544
tlv_end = self._TLV_INFO_HDR_LEN + total_length
4645

@@ -49,16 +48,16 @@ def __init__(self):
4948
break
5049

5150
tlv = eeprom[tlv_index:tlv_index + 2
52-
+ ord(eeprom[tlv_index + 1])]
53-
code = "0x%02X" % (ord(tlv[0]))
51+
+ eeprom[tlv_index + 1]]
52+
code = "0x%02X" % tlv[0]
5453

5554
name, value = self.decoder(None, tlv)
5655

5756
self.eeprom_tlv_dict[code] = value
58-
if ord(eeprom[tlv_index]) == self._TLV_CODE_CRC_32:
57+
if eeprom[tlv_index] == self._TLV_CODE_CRC_32:
5958
break
6059

61-
tlv_index += ord(eeprom[tlv_index+1]) + 2
60+
tlv_index += eeprom[tlv_index+1] + 2
6261

6362
def serial_number_str(self):
6463
"""
@@ -68,7 +67,7 @@ def serial_number_str(self):
6867
self.eeprom_data, self._TLV_CODE_SERIAL_NUMBER)
6968
if not is_valid:
7069
return "N/A"
71-
return results[2]
70+
return results[2].decode('ascii')
7271

7372
def base_mac_addr(self, e):
7473
"""
@@ -79,7 +78,7 @@ def base_mac_addr(self, e):
7978
if not is_valid or t[1] != 6:
8079
return super(eeprom_tlvinfo.TlvInfoDecoder, self).switchaddrstr(t)
8180

82-
return ":".join([binascii.b2a_hex(T) for T in t[2]])
81+
return ":".join(["{:02x}".format(T) for T in t[2]]).upper()
8382

8483
def modelstr(self):
8584
"""
@@ -90,7 +89,7 @@ def modelstr(self):
9089
if not is_valid:
9190
return "N/A"
9291

93-
return results[2]
92+
return results[2].decode('ascii')
9493

9594
def part_number_str(self):
9695
"""
@@ -101,7 +100,7 @@ def part_number_str(self):
101100
if not is_valid:
102101
return "N/A"
103102

104-
return results[2]
103+
return results[2].decode('ascii')
105104

106105
def serial_str(self):
107106
"""
@@ -112,7 +111,7 @@ def serial_str(self):
112111
if not is_valid:
113112
return "N/A"
114113

115-
return results[2]
114+
return results[2].decode('ascii')
116115

117116
def revision_str(self):
118117
"""
@@ -123,7 +122,7 @@ def revision_str(self):
123122
if not is_valid:
124123
return "N/A"
125124

126-
return results[2]
125+
return results[2].decode('ascii')
127126

128127
def system_eeprom_info(self):
129128
"""
@@ -132,5 +131,3 @@ def system_eeprom_info(self):
132131
found in the system EEPROM.
133132
"""
134133
return self.eeprom_tlv_dict
135-
136-

platform/broadcom/sonic-platform-modules-dell/s6000/sonic_platform/eeprom.py

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
try:
2020
import binascii
21-
import os
2221
import redis
2322
import struct
2423
from collections import OrderedDict
@@ -108,7 +107,7 @@ def _load_system_eeprom(self):
108107
self.serial = 'NA'
109108
return
110109

111-
total_length = (ord(eeprom[9]) << 8) | ord(eeprom[10])
110+
total_length = (eeprom[9] << 8) | (eeprom[10])
112111
tlv_index = self._TLV_INFO_HDR_LEN
113112
tlv_end = self._TLV_INFO_HDR_LEN + total_length
114113

@@ -117,21 +116,21 @@ def _load_system_eeprom(self):
117116
break
118117

119118
tlv = eeprom[tlv_index:tlv_index + 2
120-
+ ord(eeprom[tlv_index + 1])]
121-
code = "0x%02X" % (ord(tlv[0]))
119+
+ eeprom[tlv_index + 1]]
120+
code = "0x%02X" % (tlv[0])
122121

123-
if ord(tlv[0]) == self._TLV_CODE_VENDOR_EXT:
124-
value = str((ord(tlv[2]) << 24) | (ord(tlv[3]) << 16) |
125-
(ord(tlv[4]) << 8) | ord(tlv[5]))
126-
value += str(tlv[6:6 + ord(tlv[1])])
122+
if tlv[0] == self._TLV_CODE_VENDOR_EXT:
123+
value = str((tlv[2] << 24) | (tlv[3] << 16) |
124+
(tlv[4] << 8) | tlv[5])
125+
value += tlv[6:6 + tlv[1]].decode('ascii')
127126
else:
128127
name, value = self.decoder(None, tlv)
129128

130129
self.eeprom_tlv_dict[code] = value
131-
if ord(eeprom[tlv_index]) == self._TLV_CODE_CRC_32:
130+
if eeprom[tlv_index] == self._TLV_CODE_CRC_32:
132131
break
133132

134-
tlv_index += ord(eeprom[tlv_index+1]) + 2
133+
tlv_index += eeprom[tlv_index+1] + 2
135134

136135
self.base_mac = self.eeprom_tlv_dict.get(
137136
"0x%X" % (self._TLV_CODE_MAC_BASE), 'NA')
@@ -191,7 +190,7 @@ def _load_device_eeprom(self):
191190
else:
192191
self.fan_type = 'NA'
193192

194-
def _get_eeprom_field(self, field_name):
193+
def _get_eeprom_field(self, field_name, decode=True):
195194
"""
196195
For a field name specified in the EEPROM format, returns the
197196
presence of the field and the value for the same.
@@ -200,7 +199,10 @@ def _get_eeprom_field(self, field_name):
200199
for field in self.format:
201200
field_end = field_start + field[2]
202201
if field[0] == field_name:
203-
return (True, self.eeprom_data[field_start:field_end].decode('utf-8'))
202+
if decode:
203+
return (True, self.eeprom_data[field_start:field_end].decode('ascii'))
204+
else:
205+
return (True, self.eeprom_data[field_start:field_end])
204206
field_start = field_end
205207

206208
return (False, None)
@@ -259,7 +261,7 @@ class EepromS6000(EepromDecoder):
259261
_EEPROM_MAX_LEN = 128
260262

261263
_BLK_HDR_LEN = 6
262-
_BLK_HDR_MAGIC = '\x3a\x29'
264+
_BLK_HDR_MAGIC = b'\x3a\x29'
263265
_BLK_HDR_REVID = 1
264266

265267
_BLK_CODE_MFG = 0x20
@@ -297,10 +299,10 @@ def _is_valid_block_checksum(self, e):
297299
def _is_valid_block(self, e, blk_code):
298300
return (e[:2] == self._BLK_HDR_MAGIC
299301
and struct.unpack('<H', e[2:4])[0] == self._BLK_INFO[blk_code]["size"]
300-
and ord(e[4]) == blk_code
301-
and ord(e[5]) == self._BLK_HDR_REVID)
302+
and e[4] == blk_code
303+
and e[5] == self._BLK_HDR_REVID)
302304

303-
def _get_eeprom_field(self, e, blk_code, field_name):
305+
def _get_eeprom_field(self, e, blk_code, field_name, decode=True):
304306
"""
305307
For a field name specified in the EEPROM format, returns the
306308
presence of the field and the value for the same.
@@ -314,7 +316,10 @@ def _get_eeprom_field(self, e, blk_code, field_name):
314316
for field in self._BLK_INFO[blk_code]["format"]:
315317
field_end = field_start + field[1]
316318
if field[0] == field_name:
317-
return (True, e[field_start:field_end])
319+
if decode:
320+
return (True, e[field_start:field_end].decode('ascii'))
321+
else:
322+
return (True, e[field_start:field_end])
318323
field_start = field_end
319324

320325
return (False, None)
@@ -339,9 +344,9 @@ def decode_eeprom(self, e):
339344
elif f[0] == "Card ID":
340345
data = hex(struct.unpack('<I', e[offset:offset+f[1]])[0])
341346
elif f[0] == "Base MAC address":
342-
data = ":".join([binascii.b2a_hex(T) for T in e[offset:offset+f[1]]]).upper()
347+
data = ":".join(["{:02x}".format(T) for T in e[offset:offset+f[1]]]).upper()
343348
else:
344-
data = e[offset:offset+f[1]]
349+
data = e[offset:offset+f[1]].decode('ascii')
345350
print("{:<20s} {:>3d} {:<s}".format(f[0], f[1], data))
346351
offset += f[1]
347352

@@ -406,9 +411,9 @@ def update_eeprom_db(self, e):
406411
elif f[0] == "Card ID":
407412
data = hex(struct.unpack('<I', e[offset:offset+f[1]])[0])
408413
elif f[0] == "Base MAC address":
409-
data = ":".join([binascii.b2a_hex(T) for T in e[offset:offset+f[1]]]).upper()
414+
data = ":".join(["{:02x}".format(T) for T in e[offset:offset+f[1]]]).upper()
410415
else:
411-
data = e[offset:offset+f[1]]
416+
data = e[offset:offset+f[1]].decode('ascii')
412417
client.hset('EEPROM_INFO|{}'.format(f[0]), 'Value', data)
413418
offset += f[1]
414419

@@ -424,10 +429,10 @@ def get_base_mac(self):
424429
"""
425430
Returns the base MAC address found in the system EEPROM.
426431
"""
427-
(valid, data) = self._get_eeprom_field(self.eeprom_data,
428-
self._BLK_CODE_MAC, "Base MAC address")
432+
(valid, data) = self._get_eeprom_field(self.eeprom_data, self._BLK_CODE_MAC,
433+
"Base MAC address", False)
429434
if valid:
430-
return ":".join([binascii.b2a_hex(T) for T in data]).upper()
435+
return ":".join(["{:02x}".format(T) for T in data]).upper()
431436
else:
432437
return 'NA'
433438

@@ -479,9 +484,9 @@ def mgmtaddrstr(self, e):
479484
"""
480485
Returns the base MAC address.
481486
"""
482-
(valid, data) = self._get_eeprom_field(e, self._BLK_CODE_MAC, "Base MAC address")
487+
(valid, data) = self._get_eeprom_field(e, self._BLK_CODE_MAC, "Base MAC address", False)
483488
if valid:
484-
return ":".join([binascii.b2a_hex(T) for T in data]).upper()
489+
return ":".join(["{:02x}".format(T) for T in data]).upper()
485490
else:
486491
return 'NA'
487492

platform/broadcom/sonic-platform-modules-dell/s6100/sonic_platform/eeprom.py

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
try:
1313
from sonic_eeprom import eeprom_tlvinfo
14-
import binascii
1514
except ImportError as e:
1615
raise ImportError(str(e) + "- required module not found")
1716

@@ -30,7 +29,7 @@ def __init__(self, i2c_line=0, iom_eeprom=False):
3029

3130
try:
3231
if self.is_module:
33-
self.write_eeprom("\x00\x00")
32+
self.write_eeprom(b"\x00\x00")
3433
self.eeprom_data = self.read_eeprom_bytes(256)
3534
else:
3635
self.eeprom_data = self.read_eeprom()
@@ -48,7 +47,7 @@ def __init__(self, i2c_line=0, iom_eeprom=False):
4847
if not self.is_valid_tlvinfo_header(eeprom):
4948
return
5049

51-
total_length = (ord(eeprom[9]) << 8) | ord(eeprom[10])
50+
total_length = (eeprom[9] << 8) | eeprom[10]
5251
tlv_index = self._TLV_INFO_HDR_LEN
5352
tlv_end = self._TLV_INFO_HDR_LEN + total_length
5453

@@ -57,38 +56,37 @@ def __init__(self, i2c_line=0, iom_eeprom=False):
5756
break
5857

5958
tlv = eeprom[tlv_index:tlv_index + 2
60-
+ ord(eeprom[tlv_index + 1])]
61-
code = "0x%02X" % (ord(tlv[0]))
59+
+ eeprom[tlv_index + 1]]
60+
code = "0x%02X" % tlv[0]
6261

63-
if ord(tlv[0]) == self._TLV_CODE_VENDOR_EXT:
64-
value = str((ord(tlv[2]) << 24) | (ord(tlv[3]) << 16) |
65-
(ord(tlv[4]) << 8) | ord(tlv[5]))
66-
value += str(tlv[6:6 + ord(tlv[1])])
62+
if tlv[0] == self._TLV_CODE_VENDOR_EXT:
63+
value = str((tlv[2] << 24) | (tlv[3] << 16) |
64+
(tlv[4] << 8) | tlv[5])
65+
value += tlv[6:6 + tlv[1]].decode('ascii')
6766
else:
6867
name, value = self.decoder(None, tlv)
6968

7069
self.eeprom_tlv_dict[code] = value
71-
if ord(eeprom[tlv_index]) == self._TLV_CODE_CRC_32:
70+
if eeprom[tlv_index] == self._TLV_CODE_CRC_32:
7271
break
7372

74-
tlv_index += ord(eeprom[tlv_index+1]) + 2
75-
73+
tlv_index += eeprom[tlv_index+1] + 2
7674

7775
def serial_number_str(self):
7876
(is_valid, results) = self.get_tlv_field(
7977
self.eeprom_data, self._TLV_CODE_SERIAL_NUMBER)
8078
if not is_valid:
8179
return "N/A"
8280

83-
return results[2]
81+
return results[2].decode('ascii')
8482

8583
def base_mac_addr(self):
8684
(is_valid, results) = self.get_tlv_field(
8785
self.eeprom_data, self._TLV_CODE_MAC_BASE)
8886
if not is_valid or results[1] != 6:
8987
return super(TlvInfoDecoder, self).switchaddrstr(e)
9088

91-
return ":".join([binascii.b2a_hex(T) for T in results[2]])
89+
return ":".join(["{:02x}".format(T) for T in results[2]]).upper()
9290

9391
def modelstr(self):
9492
if self.is_module:
@@ -100,31 +98,31 @@ def modelstr(self):
10098
if not is_valid:
10199
return "N/A"
102100

103-
return results[2]
101+
return results[2].decode('ascii')
104102

105103
def part_number_str(self):
106104
(is_valid, results) = self.get_tlv_field(
107105
self.eeprom_data, self._TLV_CODE_PART_NUMBER)
108106
if not is_valid:
109107
return "N/A"
110108

111-
return results[2]
109+
return results[2].decode('ascii')
112110

113111
def serial_str(self):
114112
(is_valid, results) = self.get_tlv_field(
115113
self.eeprom_data, self._TLV_CODE_SERVICE_TAG)
116114
if not is_valid:
117115
return "N/A"
118116

119-
return results[2]
117+
return results[2].decode('ascii')
120118

121119
def revision_str(self):
122120
(is_valid, results) = self.get_tlv_field(
123121
self.eeprom_data, self._TLV_CODE_DEVICE_VERSION)
124122
if not is_valid:
125123
return "N/A"
126124

127-
return results[2]
125+
return results[2].decode('ascii')
128126

129127
def system_eeprom_info(self):
130128
"""

0 commit comments

Comments
 (0)