Add python 3 support

It absolutely necessary to add support of python 3.
It seems easy to do. After looking through the code I see a few places where legacy py2 syntax is used - print used as statement not a function and "except IOError, err". "python3 setup.py install" shows all errors.
I tried to fix it by myself, "python3 setup.py install" works fine but I unable to import it.
Before fix:
root@raspberrypi:~# python3 oom/apps/inventory.py
Traceback (most recent call last):
  File "oom/apps/inventory.py", line 7, in <module>
    from oom import *
  File "/usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg/oom/__init__.py", line 16, in <module>
    from .oom import *
  File "/usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg/oom/oom.py", line 12, in <module>
    import oomlib
ModuleNotFoundError: No module named 'oomlib'
root@raspberrypi:~# cd oom/
root@raspberrypi:~/oom# python3 setup.py install
running install
running bdist_egg
running egg_info
writing oom.egg-info/PKG-INFO
writing dependency_links to oom.egg-info/dependency_links.txt
writing top-level names to oom.egg-info/top_level.txt
reading manifest file 'oom.egg-info/SOURCES.txt'
writing manifest file 'oom.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-armv7l/egg
running install_lib
running build_py
creating build/lib
creating build/lib/oom
copying oom/__init__.py -> build/lib/oom
copying oom/oom.py -> build/lib/oom
copying oom/oomlib.py -> build/lib/oom
copying oom/addonsample.py -> build/lib/oom
copying oom/oomjsonshim.py -> build/lib/oom
copying oom/oomcollectd.py -> build/lib/oom
copying oom/oomsysfsshim.py -> build/lib/oom
copying oom/oomtypes.py -> build/lib/oom
copying oom/decode.py -> build/lib/oom
creating build/lib/oom/module_data
copying oom/module_data/MUP0WB0_FCCABY_20160108_192637.txt -> build/lib/oom/module_data
copying oom/module_data/MUP0WB0_EEPROM_20160108_192637.txt -> build/lib/oom/module_data
copying oom/module_data/MUQ1BZB_FCCABY_20160108_192514.txt -> build/lib/oom/module_data
copying oom/module_data/qsfp28datafile.txt -> build/lib/oom/module_data
copying oom/module_data/qsfpdatafile.txt -> build/lib/oom/module_data
copying oom/module_data/MUQ1BZB_EEPROM_20160108_192514.txt -> build/lib/oom/module_data
creating build/lib/oom/keyfiles
copying oom/keyfiles/cfp.py -> build/lib/oom/keyfiles
copying oom/keyfiles/cmis.py -> build/lib/oom/keyfiles
copying oom/keyfiles/qsfp.py -> build/lib/oom/keyfiles
copying oom/keyfiles/sfp.py -> build/lib/oom/keyfiles
creating build/bdist.linux-armv7l/egg
creating build/bdist.linux-armv7l/egg/oom
copying build/lib/oom/__init__.py -> build/bdist.linux-armv7l/egg/oom
copying build/lib/oom/oom.py -> build/bdist.linux-armv7l/egg/oom
copying build/lib/oom/oomlib.py -> build/bdist.linux-armv7l/egg/oom
copying build/lib/oom/addonsample.py -> build/bdist.linux-armv7l/egg/oom
creating build/bdist.linux-armv7l/egg/oom/keyfiles
copying build/lib/oom/keyfiles/cfp.py -> build/bdist.linux-armv7l/egg/oom/keyfiles
copying build/lib/oom/keyfiles/cmis.py -> build/bdist.linux-armv7l/egg/oom/keyfiles
copying build/lib/oom/keyfiles/qsfp.py -> build/bdist.linux-armv7l/egg/oom/keyfiles
copying build/lib/oom/keyfiles/sfp.py -> build/bdist.linux-armv7l/egg/oom/keyfiles
copying build/lib/oom/oomjsonshim.py -> build/bdist.linux-armv7l/egg/oom
copying build/lib/oom/oomcollectd.py -> build/bdist.linux-armv7l/egg/oom
copying build/lib/oom/oomsysfsshim.py -> build/bdist.linux-armv7l/egg/oom
creating build/bdist.linux-armv7l/egg/oom/module_data
copying build/lib/oom/module_data/MUP0WB0_FCCABY_20160108_192637.txt -> build/bdist.linux-armv7l/egg/oom/module_data
copying build/lib/oom/module_data/MUP0WB0_EEPROM_20160108_192637.txt -> build/bdist.linux-armv7l/egg/oom/module_data
copying build/lib/oom/module_data/MUQ1BZB_FCCABY_20160108_192514.txt -> build/bdist.linux-armv7l/egg/oom/module_data
copying build/lib/oom/module_data/qsfp28datafile.txt -> build/bdist.linux-armv7l/egg/oom/module_data
copying build/lib/oom/module_data/qsfpdatafile.txt -> build/bdist.linux-armv7l/egg/oom/module_data
copying build/lib/oom/module_data/MUQ1BZB_EEPROM_20160108_192514.txt -> build/bdist.linux-armv7l/egg/oom/module_data
copying build/lib/oom/oomtypes.py -> build/bdist.linux-armv7l/egg/oom
copying build/lib/oom/decode.py -> build/bdist.linux-armv7l/egg/oom
byte-compiling build/bdist.linux-armv7l/egg/oom/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/oom.py to oom.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/oomlib.py to oomlib.cpython-37.pyc
  File "build/bdist.linux-armv7l/egg/oom/oomlib.py", line 487
    print outstr
               ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(outstr)?

byte-compiling build/bdist.linux-armv7l/egg/oom/addonsample.py to addonsample.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/keyfiles/cfp.py to cfp.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/keyfiles/cmis.py to cmis.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/keyfiles/qsfp.py to qsfp.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/keyfiles/sfp.py to sfp.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/oomjsonshim.py to oomjsonshim.cpython-37.pyc
  File "build/bdist.linux-armv7l/egg/oom/oomjsonshim.py", line 37
    print 'Using URL: %s' % temp
                        ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print('Using URL: %s' % temp)?

byte-compiling build/bdist.linux-armv7l/egg/oom/oomcollectd.py to oomcollectd.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/oomsysfsshim.py to oomsysfsshim.cpython-37.pyc
  File "build/bdist.linux-armv7l/egg/oom/oomsysfsshim.py", line 237
    except IOError, err:
                  ^
SyntaxError: invalid syntax

byte-compiling build/bdist.linux-armv7l/egg/oom/oomtypes.py to oomtypes.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/decode.py to decode.cpython-37.pyc
  File "build/bdist.linux-armv7l/egg/oom/decode.py", line 66
    print "wrong voltage format"
                               ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("wrong voltage format")?

creating build/bdist.linux-armv7l/egg/EGG-INFO
copying oom.egg-info/PKG-INFO -> build/bdist.linux-armv7l/egg/EGG-INFO
copying oom.egg-info/SOURCES.txt -> build/bdist.linux-armv7l/egg/EGG-INFO
copying oom.egg-info/dependency_links.txt -> build/bdist.linux-armv7l/egg/EGG-INFO
copying oom.egg-info/not-zip-safe -> build/bdist.linux-armv7l/egg/EGG-INFO
copying oom.egg-info/top_level.txt -> build/bdist.linux-armv7l/egg/EGG-INFO
creating 'dist/oom-0.5-py3.7.egg' and adding 'build/bdist.linux-armv7l/egg' to it
removing 'build/bdist.linux-armv7l/egg' (and everything under it)
Processing oom-0.5-py3.7.egg
removing '/usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg' (and everything under it)
creating /usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg
Extracting oom-0.5-py3.7.egg to /usr/local/lib/python3.7/dist-packages
  File "/usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg/oom/decode.py", line 66
    print "wrong voltage format"
                               ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("wrong voltage format")?

  File "/usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg/oom/oomjsonshim.py", line 37
    print 'Using URL: %s' % temp
                        ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print('Using URL: %s' % temp)?

  File "/usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg/oom/oomlib.py", line 487
    print outstr
               ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(outstr)?

  File "/usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg/oom/oomsysfsshim.py", line 237
    except IOError, err:
                  ^
SyntaxError: invalid syntax

oom 0.5 is already the active version in easy-install.pth

Installed /usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg
Processing dependencies for oom==0.5
Finished processing dependencies for oom==0.5

After
root@raspberrypi:~/oom# python3 setup.py install
running install
running bdist_egg
running egg_info
writing oom.egg-info/PKG-INFO
writing dependency_links to oom.egg-info/dependency_links.txt
writing top-level names to oom.egg-info/top_level.txt
reading manifest file 'oom.egg-info/SOURCES.txt'
writing manifest file 'oom.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-armv7l/egg
running install_lib
running build_py
copying oom/oomlib.py -> build/lib/oom
copying oom/oomjsonshim.py -> build/lib/oom
copying oom/oomsysfsshim.py -> build/lib/oom
copying oom/decode.py -> build/lib/oom
creating build/bdist.linux-armv7l/egg
creating build/bdist.linux-armv7l/egg/oom
copying build/lib/oom/__init__.py -> build/bdist.linux-armv7l/egg/oom
copying build/lib/oom/oom.py -> build/bdist.linux-armv7l/egg/oom
copying build/lib/oom/oomlib.py -> build/bdist.linux-armv7l/egg/oom
copying build/lib/oom/addonsample.py -> build/bdist.linux-armv7l/egg/oom
creating build/bdist.linux-armv7l/egg/oom/keyfiles
copying build/lib/oom/keyfiles/cfp.py -> build/bdist.linux-armv7l/egg/oom/keyfiles
copying build/lib/oom/keyfiles/cmis.py -> build/bdist.linux-armv7l/egg/oom/keyfiles
copying build/lib/oom/keyfiles/qsfp.py -> build/bdist.linux-armv7l/egg/oom/keyfiles
copying build/lib/oom/keyfiles/sfp.py -> build/bdist.linux-armv7l/egg/oom/keyfiles
copying build/lib/oom/oomjsonshim.py -> build/bdist.linux-armv7l/egg/oom
copying build/lib/oom/oomcollectd.py -> build/bdist.linux-armv7l/egg/oom
copying build/lib/oom/oomsysfsshim.py -> build/bdist.linux-armv7l/egg/oom
creating build/bdist.linux-armv7l/egg/oom/module_data
copying build/lib/oom/module_data/MUP0WB0_FCCABY_20160108_192637.txt -> build/bdist.linux-armv7l/egg/oom/module_data
copying build/lib/oom/module_data/MUP0WB0_EEPROM_20160108_192637.txt -> build/bdist.linux-armv7l/egg/oom/module_data
copying build/lib/oom/module_data/MUQ1BZB_FCCABY_20160108_192514.txt -> build/bdist.linux-armv7l/egg/oom/module_data
copying build/lib/oom/module_data/qsfp28datafile.txt -> build/bdist.linux-armv7l/egg/oom/module_data
copying build/lib/oom/module_data/qsfpdatafile.txt -> build/bdist.linux-armv7l/egg/oom/module_data
copying build/lib/oom/module_data/MUQ1BZB_EEPROM_20160108_192514.txt -> build/bdist.linux-armv7l/egg/oom/module_data
copying build/lib/oom/oomtypes.py -> build/bdist.linux-armv7l/egg/oom
copying build/lib/oom/decode.py -> build/bdist.linux-armv7l/egg/oom
byte-compiling build/bdist.linux-armv7l/egg/oom/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/oom.py to oom.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/oomlib.py to oomlib.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/addonsample.py to addonsample.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/keyfiles/cfp.py to cfp.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/keyfiles/cmis.py to cmis.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/keyfiles/qsfp.py to qsfp.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/keyfiles/sfp.py to sfp.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/oomjsonshim.py to oomjsonshim.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/oomcollectd.py to oomcollectd.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/oomsysfsshim.py to oomsysfsshim.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/oomtypes.py to oomtypes.cpython-37.pyc
byte-compiling build/bdist.linux-armv7l/egg/oom/decode.py to decode.cpython-37.pyc
creating build/bdist.linux-armv7l/egg/EGG-INFO
copying oom.egg-info/PKG-INFO -> build/bdist.linux-armv7l/egg/EGG-INFO
copying oom.egg-info/SOURCES.txt -> build/bdist.linux-armv7l/egg/EGG-INFO
copying oom.egg-info/dependency_links.txt -> build/bdist.linux-armv7l/egg/EGG-INFO
copying oom.egg-info/not-zip-safe -> build/bdist.linux-armv7l/egg/EGG-INFO
copying oom.egg-info/top_level.txt -> build/bdist.linux-armv7l/egg/EGG-INFO
creating 'dist/oom-0.5-py3.7.egg' and adding 'build/bdist.linux-armv7l/egg' to it
removing 'build/bdist.linux-armv7l/egg' (and everything under it)
Processing oom-0.5-py3.7.egg
removing '/usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg' (and everything under it)
creating /usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg
Extracting oom-0.5-py3.7.egg to /usr/local/lib/python3.7/dist-packages
oom 0.5 is already the active version in easy-install.pth

Installed /usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg
Processing dependencies for oom==0.5
Finished processing dependencies for oom==0.5

Trying to import
root@raspberrypi:~# python3
Python 3.7.3 (default, Apr  3 2019, 05:39:12)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from oom import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg/oom/__init__.py", line 16, in <module>
    from .oom import *
  File "/usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg/oom/oom.py", line 12, in <module>
    import oomlib
ModuleNotFoundError: No module named 'oomlib'
>>>

Find fix
root@raspberrypi:~# export PYTHONPATH=/usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg/oom/
root@raspberrypi:~# python3
Python 3.7.3 (default, Apr  3 2019, 05:39:12)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import oom
>>>

but now I see that lib needs deep dive py3 rewrite.
root@raspberrypi:~# python3
Python 3.7.3 (default, Apr  3 2019, 05:39:12)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from oom import *
>>> for port in oom_get_portlist():
...     status = oom_get_memory(port, 'SERIAL_ID')
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg/oom/oom.py", line 58, in oom_get_portlist
    port_list = oomlib.oom_get_portlist()
  File "/usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg/oom/oomlib.py", line 240, in oom_get_portlist
    pl = [Port(cport) for cport in cport_list]
  File "/usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg/oom/oomlib.py", line 240, in <listcomp>
    pl = [Port(cport) for cport in cport_list]
  File "/usr/local/lib/python3.7/dist-packages/oom-0.5-py3.7.egg/oom/oomlib.py", line 184, in __init__
    self.port_name = bytearray(cport.name).rstrip('\0')
TypeError: a bytes-like object is required, not 'str'

Will there be python3 support for this in near future?

Python3 support is on the list, but not very high on the list :-).
What do you plan on using OOM for?  More interest moves it higher on the list.

I'm looking for a way to collects opticsdump on ubuntu 18.04. Though I can
use python2.7, I have other modules which have dependency on python3. I
have made certain modifications on the current oom package and got it able
to run it on python3.4. PFA for execution results on python3 and also test
results.
If these results looks fine, how I can contribute here.
On Mon, Oct 14, 2019 at 6:30 AM donboll<EMAIL_ADDRESS>wrote:

Python3 support is on the list, but not very high on the list :-).
What do you plan on using OOM for? More interest moves it higher on the
list.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/opencomputeproject/oom/issues/11?email_source=notifications&email_token=AEGGQWS2K4H2DOHROA73LRDQOPAB7A5CNFSM4INQOQEKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBDESDQ#issuecomment-541477134,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AEGGQWTVGOTHHHTWNATT6N3QOPAB7ANCNFSM4INQOQEA
.

bhishma@bhishma:~$ python3 opticsdump.py
Port Name  Vendor           Type          Part #           Serial #
port1      FiberStore       SFP           SFP-10G-DAC      F1712078537-1
port2      FiberStore       SFP           SFP-10G-DAC      F1712078563-2
port3      FiberStore       SFP           SFP-10G-DAC      F1712078558-1
port4      FiberStore       SFP           SFP-10G-DAC      F1712078557-1
port5                       No Module
port6                       No Module
port7                       No Module
port8                       No Module
port9                       No Module
port10     FS               SFP           QSFP-4SFP10G-DAC G1805050580-3
port11     FS               SFP           QSFP-4SFP10G-DAC G1805050580-1
port12     FS               SFP           QSFP-4SFP10G-DAC G1805050580-2
port13     FS               SFP           QSFP-4SFP10G-DAC G1805050580-4
port14                      No Module
port15                      No Module
port16                      No Module
port17                      No Module
port18                      No Module
port19                      No Module
port20                      No Module
port21     FS               SFP           SFP-10G-DAC      G1807099919-2
port22     FS               SFP           SFP-10G-DAC      G1807099850-2
port23                      No Module
port24                      No Module
port25                      No Module
port26                      No Module
port27                      No Module
port28                      No Module
port29                      No Module
port30                      No Module
port31                      No Module
port32                      No Module
port33                      No Module
port34                      No Module
port35                      No Module
port36                      No Module
port37                      No Module
port38                      No Module
port39                      No Module
port40                      No Module
port41                      No Module
port42                      No Module
port43                      No Module
port44                      No Module
port45                      No Module
port46                      No Module
port47                      No Module
port48                      No Module
port49     FS               QSFP28        Q28-PC01         G1810038308-1
port50     FS               QSFP28        Q28-PC01         G1810038294-1
port51     FS               QSFP28        Q28-PC01         G1810038298-2
port52     FS               QSFP28        Q28-PC01         G1810038286-1
port53     FS               QSFP28        Q28-PC01         G1810038289-2
port54     SmartOptics      QSFP28        SO-QSFP28-ER4    INJAE6110152
bhishma@bhishma:~$ python3 opticsdump.py -p port54
DOM
RX1_POWER           = 0.0436    (calculated -13.605135107314139 dBm)
RX2_POWER           = 0.04290000000000001(calculated -13.675427078152758 dBm)
RX3_POWER           = 0.0478    (calculated -13.20572103387881 dBm)
RX4_POWER           = 0.0502    (calculated -12.992962828549805 dBm)
SUPPLY_VOLTAGE      = 3.2472000000000003
TEMPERATURE         = 39.4140625
TX1_BIAS            = 58.064
TX1_POWER           = 0.8572000000000001(calculated -0.6691783763020891 dBm)
TX2_BIAS            = 54.838
TX2_POWER           = 1.2056000000000002(calculated 0.8120323930657547 dBm)
TX3_BIAS            = 54.838
TX3_POWER           = 1.1339000000000001(calculated 0.5457475529482294 dBm)
TX4_BIAS            = 54.838
TX4_POWER           = 0.9789000000000001(calculated -0.09261671492462609 dBm)
SERIAL_ID
BR_NOMINAL          = 25750
CONNECTOR           = 7
CU_ATTENUATE_2_5    = 0
CU_ATTENUATE_5_0    = 0
DEVICE_TECH         = b'o'
ENCODING            = 3
EXTENDED_MODULE     = b'\x00'
EXT_IDENTIFIER      = 206
EXT_RATE_COMPLY     = 0
IDENTIFIER          = 17
LENGTH_OM1_62_5UM   = 0
LENGTH_OM2_50UM     = 0
LENGTH_OM3_50UM     = 0
LENGTH_OM4_OR_CU    = 0
LENGTH_SMF_KM       = 25000
MAX_CASE_TEMP       = 70
SPEC_COMPLIANCE     = b'\x80\x00\x00\x00\x00\x00\x00\x00'
VENDOR_NAME         = SmartOptics
VENDOR_OUI          = b'\x00SO'
VENDOR_PN           = SO-QSFP28-ER4
VENDOR_REV          = A1
WAVELENGTH          = 1310.0
WAVELEN_TOLERANCE   = 1.03
SERIAL_ID_EXT
DATE_CODE           = 190301
DIAG_MONITOR_TYPE   = 60
ENHANCED_OPTIONS    = 16
LINK_CODES          = 4
OPTIONS             = b'\x07?\xff'
VENDOR_SN           = INJAE6110152
ADVANCED_LOW_POWER_MODE   = 0
BIAS_HIGH_ALARM           = 110.0
BIAS_HIGH_WARN            = 100.0
BIAS_LOW_ALARM            = 30.0
BIAS_LOW_WARN             = 40.0
BR_NOMINAL                = 25750
CONNECTOR                 = 7
CU_ATTENUATE_2_5          = 0
CU_ATTENUATE_5_0          = 0
DATA_NOT_READY            = 0
DATE_CODE                 = 190301
DEVICE_TECH               = b'o'
DIAG_MONITOR_TYPE         = 60
ENCODING                  = 3
ENHANCED_OPTIONS          = 16
EXTENDED_MODULE           = b'\x00'
EXT_IDENTIFIER            = 206
EXT_RATE_COMPLY           = 0
FAR_END_IMPLEMENT         = 0
FAR_SIDE_MANAGED          = 0
FLAT_MEM                  = 0
HIGH_POWER_CLASS_ENABLE   = 1
IDENTIFIER                = 17
INIT_COMPLETE             = 0
INT_L                     = 1
LENGTH_OM1_62_5UM         = 0
LENGTH_OM2_50UM           = 0
LENGTH_OM3_50UM           = 0
LENGTH_OM4_OR_CU          = 0
LENGTH_SMF_KM             = 25000
LINK_CODES                = 4
L_RX1_LOL                 = 0
L_RX1_LOS                 = 0
L_RX1_POWER               = 0         (calculated 0.0 dBm)
L_RX1_POWER_HIGH_ALARM    = 0
L_RX1_POWER_HIGH_WARN     = 0
L_RX1_POWER_LOW_ALARM     = 0
L_RX1_POWER_LOW_WARN      = 0
L_RX1_RX2_POWER           = 0         (calculated 0.0 dBm)
L_RX2_LOL                 = 0
L_RX2_LOS                 = 0
L_RX2_POWER               = 0         (calculated 0.0 dBm)
L_RX2_POWER_HIGH_ALARM    = 0
L_RX2_POWER_HIGH_WARN     = 0
L_RX2_POWER_LOW_ALARM     = 0
L_RX2_POWER_LOW_WARN      = 0
L_RX3_LOL                 = 0
L_RX3_LOS                 = 0
L_RX3_POWER               = 0         (calculated 0.0 dBm)
L_RX3_POWER_HIGH_ALARM    = 0
L_RX3_POWER_HIGH_WARN     = 0
L_RX3_POWER_LOW_ALARM     = 0
L_RX3_POWER_LOW_WARN      = 0
L_RX3_RX4_POWER           = 0         (calculated 0.0 dBm)
L_RX4_LOL                 = 0
L_RX4_LOS                 = 0
L_RX4_POWER               = 0         (calculated 0.0 dBm)
L_RX4_POWER_HIGH_ALARM    = 0
L_RX4_POWER_HIGH_WARN     = 0
L_RX4_POWER_LOW_ALARM     = 0
L_RX4_POWER_LOW_WARN      = 0
L_TEMP_ALARM_WARN         = 0
L_TEMP_HIGH_ALARM         = 0
L_TEMP_HIGH_WARNING       = 0
L_TEMP_LOW_ALARM          = 0
L_TEMP_LOW_WARNING        = 0
L_TX1_ADAPT_EQ_FAULT      = 0
L_TX1_BIAS                = 0
L_TX1_BIAS_HIGH_ALARM     = 0
L_TX1_BIAS_HIGH_WARN      = 0
L_TX1_BIAS_LOW_ALARM      = 0
L_TX1_BIAS_LOW_WARN       = 0
L_TX1_FAULT               = 0
L_TX1_LOL                 = 0
L_TX1_LOS                 = 0
L_TX1_POWER               = 0         (calculated 0.0 dBm)
L_TX1_POWER_HIGH_ALARM    = 0
L_TX1_POWER_HIGH_WARN     = 0
L_TX1_POWER_LOW_ALARM     = 0
L_TX1_POWER_LOW_WARN      = 0
L_TX1_TX2_BIAS            = 0
L_TX1_TX2_POWER           = 0         (calculated 0.0 dBm)
L_TX2_ADAPT_EQ_FAULT      = 0
L_TX2_BIAS                = 0
L_TX2_BIAS_HIGH_ALARM     = 0
L_TX2_BIAS_HIGH_WARN      = 0
L_TX2_BIAS_LOW_ALARM      = 0
L_TX2_BIAS_LOW_WARN       = 0
L_TX2_FAULT               = 0
L_TX2_LOL                 = 0
L_TX2_LOS                 = 0
L_TX2_POWER               = 0         (calculated 0.0 dBm)
L_TX2_POWER_HIGH_ALARM    = 0
L_TX2_POWER_HIGH_WARN     = 0
L_TX2_POWER_LOW_ALARM     = 0
L_TX2_POWER_LOW_WARN      = 0
L_TX3_ADAPT_EQ_FAULT      = 0
L_TX3_BIAS                = 0
L_TX3_BIAS_HIGH_ALARM     = 0
L_TX3_BIAS_HIGH_WARN      = 0
L_TX3_BIAS_LOW_ALARM      = 0
L_TX3_BIAS_LOW_WARN       = 0
L_TX3_FAULT               = 0
L_TX3_LOL                 = 0
L_TX3_LOS                 = 0
L_TX3_POWER               = 0         (calculated 0.0 dBm)
L_TX3_POWER_HIGH_ALARM    = 0
L_TX3_POWER_HIGH_WARN     = 0
L_TX3_POWER_LOW_ALARM     = 0
L_TX3_POWER_LOW_WARN      = 0
L_TX3_TX4_BIAS            = 0
L_TX3_TX4_POWER           = 0         (calculated 0.0 dBm)
L_TX4_ADAPT_EQ_FAULT      = 0
L_TX4_BIAS                = 0
L_TX4_BIAS_HIGH_ALARM     = 0
L_TX4_BIAS_HIGH_WARN      = 0
L_TX4_BIAS_LOW_ALARM      = 0
L_TX4_BIAS_LOW_WARN       = 0
L_TX4_FAULT               = 0
L_TX4_LOL                 = 0
L_TX4_LOS                 = 0
L_TX4_POWER               = 0         (calculated 0.0 dBm)
L_TX4_POWER_HIGH_ALARM    = 0
L_TX4_POWER_HIGH_WARN     = 0
L_TX4_POWER_LOW_ALARM     = 0
L_TX4_POWER_LOW_WARN      = 0
L_TX_FAULT                = 0
L_TX_RX_LOL               = 0
L_TX_RX_LOS               = 0
L_VCC_ALARM_WARN          = 0
L_VCC_HIGH_ALARM          = 0
L_VCC_HIGH_WARN           = 0
L_VCC_LOW_ALARM           = 0
L_VCC_LOW_WARN            = 0
MAX_CASE_TEMP             = 70
M_TEMP_ALARM_WARN         = 0
M_TX_ADAPT_EQ_FAULT       = 0
M_TX_FAULT                = 0
M_TX_RX_CDR_LOL           = b'\x00'
M_TX_RX_LOS               = b'\x00'
M_VCC_ALARM_WARN          = 0
NEAR_END_IMPLEMENT        = 0
OPTIONS                   = b'\x07?\xff'
PASSWORD_CHANGE           = 0
PASSWORD_ENTRY            = 0
POWER_OVERRIDE            = 1
POWER_SET                 = 0
PROPAGATION_DELAY         = 0
REV_COMPLIANCE            = 7
RX1_APPLICATION_SELECT    = b'\x00'
RX1_CDR_CONTROL           = 1
RX1_POWER                 = 0.0436    (calculated -13.605135107314139 dBm)
RX1_POWER_DBM             = -13.605135107314139
RX1_RATE_SELECT           = 0
RX2_APPLICATION_SELECT    = b'\x00'
RX2_CDR_CONTROL           = 1
RX2_POWER                 = 0.04290000000000001(calculated -13.675427078152758 dBm)
RX2_POWER_DBM             = -13.675427078152758
RX2_RATE_SELECT           = 0
RX3_APPLICATION_SELECT    = b'\x00'
RX3_CDR_CONTROL           = 1
RX3_POWER                 = 0.0478    (calculated -13.20572103387881 dBm)
RX3_POWER_DBM             = -13.20572103387881
RX3_RATE_SELECT           = 0
RX4_APPLICATION_SELECT    = b'\x00'
RX4_CDR_CONTROL           = 1
RX4_POWER                 = 0.0502    (calculated -12.992962828549805 dBm)
RX4_POWER_DBM             = -12.992962828549805
RX4_RATE_SELECT           = 0
RX_POWER_HIGH_ALARM       = -3.499840475281614
RX_POWER_HIGH_WARN        = -4.500163888403112
RX_POWER_LOW_ALARM        = -20.0
RX_POWER_LOW_WARN         = -16.989700043360187
RX_RATE_SELECT            = b'\x00'
SPEC_COMPLIANCE           = b'\x80\x00\x00\x00\x00\x00\x00\x00'
SUPPLY_VOLTAGE            = 3.2472000000000003
TEMPERATURE               = 39.546875
TEMP_HIGH_ALARM           = 75.0
TEMP_HIGH_WARN            = 70.0
TEMP_LOW_ALARM            = -5.0
TEMP_LOW_WARN             = 0.0
TX1_APPLICATION_SELECT    = b'\x00'
TX1_BIAS                  = 58.064
TX1_CDR_CONTROL           = 1
TX1_DISABLE               = 0
TX1_POWER                 = 0.8572000000000001(calculated -0.6691783763020891 dBm)
TX1_POWER_DBM             = -0.6691783763020891
TX1_RATE_SELECT           = 0
TX2_APPLICATION_SELECT    = b'\x00'
TX2_BIAS                  = 54.838
TX2_CDR_CONTROL           = 1
TX2_DISABLE               = 0
TX2_POWER                 = 1.2056000000000002(calculated 0.8120323930657547 dBm)
TX2_POWER_DBM             = 0.8120323930657547
TX2_RATE_SELECT           = 0
TX3_APPLICATION_SELECT    = b'\x00'
TX3_BIAS                  = 54.838
TX3_CDR_CONTROL           = 1
TX3_DISABLE               = 0
TX3_POWER                 = 1.1337000000000002(calculated 0.54498146636677 dBm)
TX3_POWER_DBM             = 0.54498146636677
TX3_RATE_SELECT           = 0
TX4_APPLICATION_SELECT    = b'\x00'
TX4_BIAS                  = 54.838
TX4_CDR_CONTROL           = 1
TX4_DISABLE               = 0
TX4_POWER                 = 0.9789000000000001(calculated -0.09261671492462609 dBm)
TX4_POWER_DBM             = -0.09261671492462609
TX4_RATE_SELECT           = 0
TX_DISABLE                = 0
TX_POWER_HIGH_ALARM       = 4.00002345927956
TX_POWER_HIGH_WARN        = 3.0000820255381306
TX_POWER_LOW_ALARM        = -2.9998893767788752
TX_POWER_LOW_WARN         = -1.9997064075586568
TX_RATE_SELECT            = b'\x00'
TX_RX_CDR_CONTROL         = 255
VENDOR_NAME               = SmartOptics
VENDOR_OUI                = b'\x00SO'
VENDOR_PN                 = SO-QSFP28-ER4
VENDOR_REV                = A1
VENDOR_SN                 = INJAE6110152
VENDOR_SPECIFIC_105       = b'\x00\x00'
VENDOR_SPECIFIC_19        = b'\x00\x00\x00'
VENDOR_SPECIFIC_224       = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
VENDOR_SPECIFIC_30        = b'\x00\x00\x00\x00'
VENDOR_SPECIFIC_74        = b'\x00\x00\x00\x00\x00\x00\x00\x00'
VENDOR_SPECIFIC_8         = b'\x00'
VOLTAGE_HIGH_ALARM        = 3.6
VOLTAGE_HIGH_WARN         = 3.465
VOLTAGE_LOW_ALARM         = 3.0
VOLTAGE_LOW_WARN          = 3.135
WAVELENGTH                = 1310.0
WAVELEN_TOLERANCE         = 1.03
bhishma@bhishma:~$
bhishma@bhishma:~/oom3/test$ python3 keytest.py
BIAS_HIGH_ALARM: 0.0
BIAS_HIGH_WARN: 0.0
BIAS_LOW_ALARM: 0.0
BIAS_LOW_WARN: 0.0
BR_MAX: 10300
BR_MIN: 5253
BR_NOMINAL: 10300
CABLE_SPEC: b'\x0c\x00'
CONNECTOR: 33
DATE_CODE: 180108
DIAGNOSTIC_MONITORING_TYPE: 0
ENCODING: 0
ENHANCED_OPTIONS: 0
EXT_IDENTIFIER: 4
IDENTIFIER: 3
LENGTH_50UM: 0
LENGTH_62_5UM: 0
LENGTH_OM3: 0
LENGTH_OM4_OR_CU: 128
LENGTH_SMF: 0
LENGTH_SMF_KM: 0
L_ALARM_WARN: 0x0 0x0 0x0 0x0 0x0 0x0
OPTIONS: 0x0 0x12
OPT_LASER_TEMP: 0.0
OPT_TEC: 0.0
RATE_IDENTIFIER: 0
RX_POWER: 0.0
RX_POWER_DBM: -30
RX_POWER_HIGH_ALARM: -30
RX_POWER_HIGH_WARN: -30
RX_POWER_LOW_ALARM: -30
RX_POWER_LOW_WARN: -30
SFF_8472_COMPLIANCE: 0
TEMPERATURE: 0.0
TEMP_HIGH_ALARM: 0.0
TEMP_HIGH_WARN: 0.0
TEMP_LOW_ALARM: 0.0
TEMP_LOW_WARN: 0.0
TRANSCEIVER: 0x1 0x0 0x0 0x4 0x0 0x4 0x80 0xd5
TRANSCEIVER_EXT: 0
TX_BIAS: 0.0
TX_POWER: 0.0
TX_POWER_DBM: -30
TX_POWER_HIGH_ALARM: -30
TX_POWER_HIGH_WARN: -30
TX_POWER_LOW_ALARM: -30
TX_POWER_LOW_WARN: -30
VCC: 0.0
VENDOR_NAME: FiberStore
VENDOR_OUI: 0x0 0x0 0x0
VENDOR_PN: SFP-10G-DAC
VENDOR_REV: D
VENDOR_SN: F1712078537-1
VENDOR_SPECIFIC_96: 0x0 0xd8 0x20 0x20 0x20 0x20 0x20 0x20 0x66 0x61 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
VOLTAGE_HIGH_ALARM: 0.0
VOLTAGE_HIGH_WARN: 0.0
VOLTAGE_LOW_ALARM: 0.0
VOLTAGE_LOW_WARN: 0.0
WAVELENGTH: 0
functions, with their keys and values:
SERIAL_ID:
{'VENDOR_SN': 'F1712078537-1   ', 'VENDOR_PN': 'SFP-10G-DAC     ', 'DIAGNOSTIC_MONITORING_TYPE': 0, 'ENCODING': 0, 'BR_MAX': 10300, 'DATE_CODE': '180108  ', 'LENGTH_OM4_OR_CU': 128, 'IDENTIFIER': 3, 'RATE_IDENTIFIER': 0, 'WAVELENGTH': 0, 'LENGTH_SMF': 0, 'TRANSCEIVER_EXT': 0, 'BR_NOMINAL': 10300, 'BR_MIN': 5253, 'CABLE_SPEC': b'\x0c\x00', 'LENGTH_50UM': 0, 'VENDOR_NAME': 'FiberStore      ', 'LENGTH_SMF_KM': 0, 'VENDOR_OUI': b'\x00\x00\x00', 'EXT_IDENTIFIER': 4, 'VENDOR_REV': 'D   ', 'CONNECTOR': 33, 'SFF_8472_COMPLIANCE': 0, 'ENHANCED_OPTIONS': 0, 'LENGTH_62_5UM': 0, 'OPTIONS': b'\x00\x12', 'LENGTH_OM3': 0, 'TRANSCEIVER': b'\x01\x00\x00\x04\x00\x04\x80\xd5'}
DOM:
{'TX_BIAS': 0.0, 'VCC': 0.0, 'RX_POWER': 0.0, 'TEMPERATURE': 0.0, 'TX_POWER': 0.0}
writable keys, with before and after values (should match)
SOFT_TX_DISABLE_SELECT: 0,0
bhishma@bhishma:~/oom3/test$ python3 oomtest.py
34 raw memory reads for port port1
34 raw memory reads for port port2
34 raw memory reads for port port3
34 raw memory reads for port port4
1 raw memory reads for port port5
1 raw memory reads for port port6
1 raw memory reads for port port7
1 raw memory reads for port port8
1 raw memory reads for port port9
34 raw memory reads for port port10
34 raw memory reads for port port11
34 raw memory reads for port port12
34 raw memory reads for port port13
1 raw memory reads for port port14
1 raw memory reads for port port15
1 raw memory reads for port port16
1 raw memory reads for port port17
1 raw memory reads for port port18
1 raw memory reads for port port19
1 raw memory reads for port port20
34 raw memory reads for port port21
34 raw memory reads for port port22
1 raw memory reads for port port23
1 raw memory reads for port port24
1 raw memory reads for port port25
1 raw memory reads for port port26
1 raw memory reads for port port27
1 raw memory reads for port port28
1 raw memory reads for port port29
1 raw memory reads for port port30
1 raw memory reads for port port31
1 raw memory reads for port port32
1 raw memory reads for port port33
1 raw memory reads for port port34
1 raw memory reads for port port35
1 raw memory reads for port port36
1 raw memory reads for port port37
1 raw memory reads for port port38
1 raw memory reads for port port39
1 raw memory reads for port port40
1 raw memory reads for port port41
1 raw memory reads for port port42
1 raw memory reads for port port43
1 raw memory reads for port port44
1 raw memory reads for port port45
1 raw memory reads for port port46
1 raw memory reads for port port47
1 raw memory reads for port port48
186 raw memory reads for port port49
186 raw memory reads for port port50
186 raw memory reads for port port51
186 raw memory reads for port port52
186 raw memory reads for port port53
186 raw memory reads for port port54
ubuntu@rtbrick:~/oom3/test$ python3 qtest.py
0xA0, page 0, offset 0, 128 bytes
0000x:  00000000 00000000 00000000 00000000
0010x:  00000000 00000000 00000000 00000000
0020x:  00000000 00000000 00000000 00000000
0030x:  00000000 00000000 00000000 00000000
0040x:  00000000 00000000 00000000 00000000
0050x:  00000000 00000000 00000000 00000000
0060x:  00000000 00000000 00000000 00000000
0070x:  00000000 00000000 00000000 00000000
0xA0, page 0, offset 128, 128 bytes
0080x:  00000000 00000000 00000000 00000000
0090x:  00000000 00000000 00000000 00000000
00a0x:  00000000 00000000 00000000 00000000
00b0x:  00000000 00000000 00000000 00000000
00c0x:  00000000 00000000 00000000 00000000
00d0x:  00000000 00000000 00000000 00000000
00e0x:  00000000 00000000 00000000 00000000
00f0x:  00000000 00000000 00000000 00000000
0 keys implemented
functions, with their keys and values:
writable keys, with before and after values (should match)
bhishma@bhishma:~/oom3/test$

I’d like to see the changes you made to support Python3.  Can you create a fork on github that I can examine?  Or build a patch on the latest OOM bits and send that to me?  I’m not sure I want to take the changes directly, but I would like to see how extensive they are.  I know that at least one set of changes is to fix the print statements to add ‘()’.  There are a bunch of them in decode.py, which I think should actually be replaced by exceptions.  So, I’m interested in the scope of the changes, but might take the opportunity to incorporate them into a broader set of changes.
And, a few questions about your Python3 fixes…

Does OOM still work with Python2.7 after your fixes?  I’d really like to have a single version that works for both.

What platform were the tests (below) run on?  Hardware, OS, OS version, what driver was managing the EEPROM?

Thanks
Don
From: bacharya<EMAIL_ADDRESS>Sent: Monday, October 14, 2019 6:32 AM
To: opencomputeproject/oom<EMAIL_ADDRESS>Cc: donboll<EMAIL_ADDRESS>Comment<EMAIL_ADDRESS>Subject: Re: [opencomputeproject/oom] Add python 3 support (#11)
I'm looking for a way to collects opticsdump on ubuntu 18.04. Though I can
use python2.7, I have other modules which have dependency on python3. I
have made certain modifications on the current oom package and got it able
to run it on python3.4. PFA for execution results on python3 and also test
results.
If these results looks fine, how I can contribute here.
On Mon, Oct 14, 2019 at 6:30 AM donboll<EMAIL_ADDRESS><EMAIL_ADDRESS>> wrote:

Python3 support is on the list, but not very high on the list :-).
What do you plan on using OOM for? More interest moves it higher on the
list.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<https://github.com/opencomputeproject/oom/issues/11?email_source=notifications https://github.com/opencomputeproject/oom/issues/11?email_source=notifications&email_token=AEGGQWS2K4H2DOHROA73LRDQOPAB7A5CNFSM4INQOQEKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBDESDQ#issuecomment-541477134 &email_token=AEGGQWS2K4H2DOHROA73LRDQOPAB7A5CNFSM4INQOQEKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBDESDQ#issuecomment-541477134>,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AEGGQWTVGOTHHHTWNATT6N3QOPAB7ANCNFSM4INQOQEA
.

bhishma@bhishma:~$ python3 opticsdump.py
Port Name Vendor Type Part # Serial #
port1 FiberStore SFP SFP-10G-DAC F1712078537-1
port2 FiberStore SFP SFP-10G-DAC F1712078563-2
port3 FiberStore SFP SFP-10G-DAC F1712078558-1
port4 FiberStore SFP SFP-10G-DAC F1712078557-1
port5 No Module
port6 No Module
port7 No Module
port8 No Module
port9 No Module
port10 FS SFP QSFP-4SFP10G-DAC G1805050580-3
port11 FS SFP QSFP-4SFP10G-DAC G1805050580-1
port12 FS SFP QSFP-4SFP10G-DAC G1805050580-2
port13 FS SFP QSFP-4SFP10G-DAC G1805050580-4
port14 No Module
port15 No Module
port16 No Module
port17 No Module
port18 No Module
port19 No Module
port20 No Module
port21 FS SFP SFP-10G-DAC G1807099919-2
port22 FS SFP SFP-10G-DAC G1807099850-2
port23 No Module
port24 No Module
port25 No Module
port26 No Module
port27 No Module
port28 No Module
port29 No Module
port30 No Module
port31 No Module
port32 No Module
port33 No Module
port34 No Module
port35 No Module
port36 No Module
port37 No Module
port38 No Module
port39 No Module
port40 No Module
port41 No Module
port42 No Module
port43 No Module
port44 No Module
port45 No Module
port46 No Module
port47 No Module
port48 No Module
port49 FS QSFP28 Q28-PC01 G1810038308-1
port50 FS QSFP28 Q28-PC01 G1810038294-1
port51 FS QSFP28 Q28-PC01 G1810038298-2
port52 FS QSFP28 Q28-PC01 G1810038286-1
port53 FS QSFP28 Q28-PC01 G1810038289-2
port54 SmartOptics QSFP28 SO-QSFP28-ER4 INJAE6110152
bhishma@bhishma:~$ python3 opticsdump.py -p port54
DOM
RX1_POWER = 0.0436 (calculated -13.605135107314139 dBm)
RX2_POWER = 0.04290000000000001(calculated -13.675427078152758 dBm)
RX3_POWER = 0.0478 (calculated -13.20572103387881 dBm)
RX4_POWER = 0.0502 (calculated -12.992962828549805 dBm)
SUPPLY_VOLTAGE = 3.2472000000000003
TEMPERATURE = 39.4140625
TX1_BIAS = 58.064
TX1_POWER = 0.8572000000000001(calculated -0.6691783763020891 dBm)
TX2_BIAS = 54.838
TX2_POWER = 1.2056000000000002(calculated 0.8120323930657547 dBm)
TX3_BIAS = 54.838
TX3_POWER = 1.1339000000000001(calculated 0.5457475529482294 dBm)
TX4_BIAS = 54.838
TX4_POWER = 0.9789000000000001(calculated -0.09261671492462609 dBm)
SERIAL_ID
BR_NOMINAL = 25750
CONNECTOR = 7
CU_ATTENUATE_2_5 = 0
CU_ATTENUATE_5_0 = 0
DEVICE_TECH = b'o'
ENCODING = 3
EXTENDED_MODULE = b'\x00'
EXT_IDENTIFIER = 206
EXT_RATE_COMPLY = 0
IDENTIFIER = 17
LENGTH_OM1_62_5UM = 0
LENGTH_OM2_50UM = 0
LENGTH_OM3_50UM = 0
LENGTH_OM4_OR_CU = 0
LENGTH_SMF_KM = 25000
MAX_CASE_TEMP = 70
SPEC_COMPLIANCE = b'\x80\x00\x00\x00\x00\x00\x00\x00'
VENDOR_NAME = SmartOptics
VENDOR_OUI = b'\x00SO'
VENDOR_PN = SO-QSFP28-ER4
VENDOR_REV = A1
WAVELENGTH = 1310.0
WAVELEN_TOLERANCE = 1.03
SERIAL_ID_EXT
DATE_CODE = 190301
DIAG_MONITOR_TYPE = 60
ENHANCED_OPTIONS = 16
LINK_CODES = 4
OPTIONS = b'\x07?\xff'
VENDOR_SN = INJAE6110152
ADVANCED_LOW_POWER_MODE = 0
BIAS_HIGH_ALARM = 110.0
BIAS_HIGH_WARN = 100.0
BIAS_LOW_ALARM = 30.0
BIAS_LOW_WARN = 40.0
BR_NOMINAL = 25750
CONNECTOR = 7
CU_ATTENUATE_2_5 = 0
CU_ATTENUATE_5_0 = 0
DATA_NOT_READY = 0
DATE_CODE = 190301
DEVICE_TECH = b'o'
DIAG_MONITOR_TYPE = 60
ENCODING = 3
ENHANCED_OPTIONS = 16
EXTENDED_MODULE = b'\x00'
EXT_IDENTIFIER = 206
EXT_RATE_COMPLY = 0
FAR_END_IMPLEMENT = 0
FAR_SIDE_MANAGED = 0
FLAT_MEM = 0
HIGH_POWER_CLASS_ENABLE = 1
IDENTIFIER = 17
INIT_COMPLETE = 0
INT_L = 1
LENGTH_OM1_62_5UM = 0
LENGTH_OM2_50UM = 0
LENGTH_OM3_50UM = 0
LENGTH_OM4_OR_CU = 0
LENGTH_SMF_KM = 25000
LINK_CODES = 4
L_RX1_LOL = 0
L_RX1_LOS = 0
L_RX1_POWER = 0 (calculated 0.0 dBm)
L_RX1_POWER_HIGH_ALARM = 0
L_RX1_POWER_HIGH_WARN = 0
L_RX1_POWER_LOW_ALARM = 0
L_RX1_POWER_LOW_WARN = 0
L_RX1_RX2_POWER = 0 (calculated 0.0 dBm)
L_RX2_LOL = 0
L_RX2_LOS = 0
L_RX2_POWER = 0 (calculated 0.0 dBm)
L_RX2_POWER_HIGH_ALARM = 0
L_RX2_POWER_HIGH_WARN = 0
L_RX2_POWER_LOW_ALARM = 0
L_RX2_POWER_LOW_WARN = 0
L_RX3_LOL = 0
L_RX3_LOS = 0
L_RX3_POWER = 0 (calculated 0.0 dBm)
L_RX3_POWER_HIGH_ALARM = 0
L_RX3_POWER_HIGH_WARN = 0
L_RX3_POWER_LOW_ALARM = 0
L_RX3_POWER_LOW_WARN = 0
L_RX3_RX4_POWER = 0 (calculated 0.0 dBm)
L_RX4_LOL = 0
L_RX4_LOS = 0
L_RX4_POWER = 0 (calculated 0.0 dBm)
L_RX4_POWER_HIGH_ALARM = 0
L_RX4_POWER_HIGH_WARN = 0
L_RX4_POWER_LOW_ALARM = 0
L_RX4_POWER_LOW_WARN = 0
L_TEMP_ALARM_WARN = 0
L_TEMP_HIGH_ALARM = 0
L_TEMP_HIGH_WARNING = 0
L_TEMP_LOW_ALARM = 0
L_TEMP_LOW_WARNING = 0
L_TX1_ADAPT_EQ_FAULT = 0
L_TX1_BIAS = 0
L_TX1_BIAS_HIGH_ALARM = 0
L_TX1_BIAS_HIGH_WARN = 0
L_TX1_BIAS_LOW_ALARM = 0
L_TX1_BIAS_LOW_WARN = 0
L_TX1_FAULT = 0
L_TX1_LOL = 0
L_TX1_LOS = 0
L_TX1_POWER = 0 (calculated 0.0 dBm)
L_TX1_POWER_HIGH_ALARM = 0
L_TX1_POWER_HIGH_WARN = 0
L_TX1_POWER_LOW_ALARM = 0
L_TX1_POWER_LOW_WARN = 0
L_TX1_TX2_BIAS = 0
L_TX1_TX2_POWER = 0 (calculated 0.0 dBm)
L_TX2_ADAPT_EQ_FAULT = 0
L_TX2_BIAS = 0
L_TX2_BIAS_HIGH_ALARM = 0
L_TX2_BIAS_HIGH_WARN = 0
L_TX2_BIAS_LOW_ALARM = 0
L_TX2_BIAS_LOW_WARN = 0
L_TX2_FAULT = 0
L_TX2_LOL = 0
L_TX2_LOS = 0
L_TX2_POWER = 0 (calculated 0.0 dBm)
L_TX2_POWER_HIGH_ALARM = 0
L_TX2_POWER_HIGH_WARN = 0
L_TX2_POWER_LOW_ALARM = 0
L_TX2_POWER_LOW_WARN = 0
L_TX3_ADAPT_EQ_FAULT = 0
L_TX3_BIAS = 0
L_TX3_BIAS_HIGH_ALARM = 0
L_TX3_BIAS_HIGH_WARN = 0
L_TX3_BIAS_LOW_ALARM = 0
L_TX3_BIAS_LOW_WARN = 0
L_TX3_FAULT = 0
L_TX3_LOL = 0
L_TX3_LOS = 0
L_TX3_POWER = 0 (calculated 0.0 dBm)
L_TX3_POWER_HIGH_ALARM = 0
L_TX3_POWER_HIGH_WARN = 0
L_TX3_POWER_LOW_ALARM = 0
L_TX3_POWER_LOW_WARN = 0
L_TX3_TX4_BIAS = 0
L_TX3_TX4_POWER = 0 (calculated 0.0 dBm)
L_TX4_ADAPT_EQ_FAULT = 0
L_TX4_BIAS = 0
L_TX4_BIAS_HIGH_ALARM = 0
L_TX4_BIAS_HIGH_WARN = 0
L_TX4_BIAS_LOW_ALARM = 0
L_TX4_BIAS_LOW_WARN = 0
L_TX4_FAULT = 0
L_TX4_LOL = 0
L_TX4_LOS = 0
L_TX4_POWER = 0 (calculated 0.0 dBm)
L_TX4_POWER_HIGH_ALARM = 0
L_TX4_POWER_HIGH_WARN = 0
L_TX4_POWER_LOW_ALARM = 0
L_TX4_POWER_LOW_WARN = 0
L_TX_FAULT = 0
L_TX_RX_LOL = 0
L_TX_RX_LOS = 0
L_VCC_ALARM_WARN = 0
L_VCC_HIGH_ALARM = 0
L_VCC_HIGH_WARN = 0
L_VCC_LOW_ALARM = 0
L_VCC_LOW_WARN = 0
MAX_CASE_TEMP = 70
M_TEMP_ALARM_WARN = 0
M_TX_ADAPT_EQ_FAULT = 0
M_TX_FAULT = 0
M_TX_RX_CDR_LOL = b'\x00'
M_TX_RX_LOS = b'\x00'
M_VCC_ALARM_WARN = 0
NEAR_END_IMPLEMENT = 0
OPTIONS = b'\x07?\xff'
PASSWORD_CHANGE = 0
PASSWORD_ENTRY = 0
POWER_OVERRIDE = 1
POWER_SET = 0
PROPAGATION_DELAY = 0
REV_COMPLIANCE = 7
RX1_APPLICATION_SELECT = b'\x00'
RX1_CDR_CONTROL = 1
RX1_POWER = 0.0436 (calculated -13.605135107314139 dBm)
RX1_POWER_DBM = -13.605135107314139
RX1_RATE_SELECT = 0
RX2_APPLICATION_SELECT = b'\x00'
RX2_CDR_CONTROL = 1
RX2_POWER = 0.04290000000000001(calculated -13.675427078152758 dBm)
RX2_POWER_DBM = -13.675427078152758
RX2_RATE_SELECT = 0
RX3_APPLICATION_SELECT = b'\x00'
RX3_CDR_CONTROL = 1
RX3_POWER = 0.0478 (calculated -13.20572103387881 dBm)
RX3_POWER_DBM = -13.20572103387881
RX3_RATE_SELECT = 0
RX4_APPLICATION_SELECT = b'\x00'
RX4_CDR_CONTROL = 1
RX4_POWER = 0.0502 (calculated -12.992962828549805 dBm)
RX4_POWER_DBM = -12.992962828549805
RX4_RATE_SELECT = 0
RX_POWER_HIGH_ALARM = -3.499840475281614
RX_POWER_HIGH_WARN = -4.500163888403112
RX_POWER_LOW_ALARM = -20.0
RX_POWER_LOW_WARN = -16.989700043360187
RX_RATE_SELECT = b'\x00'
SPEC_COMPLIANCE = b'\x80\x00\x00\x00\x00\x00\x00\x00'
SUPPLY_VOLTAGE = 3.2472000000000003
TEMPERATURE = 39.546875
TEMP_HIGH_ALARM = 75.0
TEMP_HIGH_WARN = 70.0
TEMP_LOW_ALARM = -5.0
TEMP_LOW_WARN = 0.0
TX1_APPLICATION_SELECT = b'\x00'
TX1_BIAS = 58.064
TX1_CDR_CONTROL = 1
TX1_DISABLE = 0
TX1_POWER = 0.8572000000000001(calculated -0.6691783763020891 dBm)
TX1_POWER_DBM = -0.6691783763020891
TX1_RATE_SELECT = 0
TX2_APPLICATION_SELECT = b'\x00'
TX2_BIAS = 54.838
TX2_CDR_CONTROL = 1
TX2_DISABLE = 0
TX2_POWER = 1.2056000000000002(calculated 0.8120323930657547 dBm)
TX2_POWER_DBM = 0.8120323930657547
TX2_RATE_SELECT = 0
TX3_APPLICATION_SELECT = b'\x00'
TX3_BIAS = 54.838
TX3_CDR_CONTROL = 1
TX3_DISABLE = 0
TX3_POWER = 1.1337000000000002(calculated 0.54498146636677 dBm)
TX3_POWER_DBM = 0.54498146636677
TX3_RATE_SELECT = 0
TX4_APPLICATION_SELECT = b'\x00'
TX4_BIAS = 54.838
TX4_CDR_CONTROL = 1
TX4_DISABLE = 0
TX4_POWER = 0.9789000000000001(calculated -0.09261671492462609 dBm)
TX4_POWER_DBM = -0.09261671492462609
TX4_RATE_SELECT = 0
TX_DISABLE = 0
TX_POWER_HIGH_ALARM = 4.00002345927956
TX_POWER_HIGH_WARN = 3.0000820255381306
TX_POWER_LOW_ALARM = -2.9998893767788752
TX_POWER_LOW_WARN = -1.9997064075586568
TX_RATE_SELECT = b'\x00'
TX_RX_CDR_CONTROL = 255
VENDOR_NAME = SmartOptics
VENDOR_OUI = b'\x00SO'
VENDOR_PN = SO-QSFP28-ER4
VENDOR_REV = A1
VENDOR_SN = INJAE6110152
VENDOR_SPECIFIC_105 = b'\x00\x00'
VENDOR_SPECIFIC_19 = b'\x00\x00\x00'
VENDOR_SPECIFIC_224 = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
VENDOR_SPECIFIC_30 = b'\x00\x00\x00\x00'
VENDOR_SPECIFIC_74 = b'\x00\x00\x00\x00\x00\x00\x00\x00'
VENDOR_SPECIFIC_8 = b'\x00'
VOLTAGE_HIGH_ALARM = 3.6
VOLTAGE_HIGH_WARN = 3.465
VOLTAGE_LOW_ALARM = 3.0
VOLTAGE_LOW_WARN = 3.135
WAVELENGTH = 1310.0
WAVELEN_TOLERANCE = 1.03
bhishma@bhishma:~$
bhishma@bhishma:~/oom3/test$ python3 keytest.py
BIAS_HIGH_ALARM: 0.0
BIAS_HIGH_WARN: 0.0
BIAS_LOW_ALARM: 0.0
BIAS_LOW_WARN: 0.0
BR_MAX: 10300
BR_MIN: 5253
BR_NOMINAL: 10300
CABLE_SPEC: b'\x0c\x00'
CONNECTOR: 33
DATE_CODE: 180108
DIAGNOSTIC_MONITORING_TYPE: 0
ENCODING: 0
ENHANCED_OPTIONS: 0
EXT_IDENTIFIER: 4
IDENTIFIER: 3
LENGTH_50UM: 0
LENGTH_62_5UM: 0
LENGTH_OM3: 0
LENGTH_OM4_OR_CU: 128
LENGTH_SMF: 0
LENGTH_SMF_KM: 0
L_ALARM_WARN: 0x0 0x0 0x0 0x0 0x0 0x0
OPTIONS: 0x0 0x12
OPT_LASER_TEMP: 0.0
OPT_TEC: 0.0
RATE_IDENTIFIER: 0
RX_POWER: 0.0
RX_POWER_DBM: -30
RX_POWER_HIGH_ALARM: -30
RX_POWER_HIGH_WARN: -30
RX_POWER_LOW_ALARM: -30
RX_POWER_LOW_WARN: -30
SFF_8472_COMPLIANCE: 0
TEMPERATURE: 0.0
TEMP_HIGH_ALARM: 0.0
TEMP_HIGH_WARN: 0.0
TEMP_LOW_ALARM: 0.0
TEMP_LOW_WARN: 0.0
TRANSCEIVER: 0x1 0x0 0x0 0x4 0x0 0x4 0x80 0xd5
TRANSCEIVER_EXT: 0
TX_BIAS: 0.0
TX_POWER: 0.0
TX_POWER_DBM: -30
TX_POWER_HIGH_ALARM: -30
TX_POWER_HIGH_WARN: -30
TX_POWER_LOW_ALARM: -30
TX_POWER_LOW_WARN: -30
VCC: 0.0
VENDOR_NAME: FiberStore
VENDOR_OUI: 0x0 0x0 0x0
VENDOR_PN: SFP-10G-DAC
VENDOR_REV: D
VENDOR_SN: F1712078537-1
VENDOR_SPECIFIC_96: 0x0 0xd8 0x20 0x20 0x20 0x20 0x20 0x20 0x66 0x61 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
VOLTAGE_HIGH_ALARM: 0.0
VOLTAGE_HIGH_WARN: 0.0
VOLTAGE_LOW_ALARM: 0.0
VOLTAGE_LOW_WARN: 0.0
WAVELENGTH: 0
functions, with their keys and values:
SERIAL_ID:
{'VENDOR_SN': 'F1712078537-1 ', 'VENDOR_PN': 'SFP-10G-DAC ', 'DIAGNOSTIC_MONITORING_TYPE': 0, 'ENCODING': 0, 'BR_MAX': 10300, 'DATE_CODE': '180108 ', 'LENGTH_OM4_OR_CU': 128, 'IDENTIFIER': 3, 'RATE_IDENTIFIER': 0, 'WAVELENGTH': 0, 'LENGTH_SMF': 0, 'TRANSCEIVER_EXT': 0, 'BR_NOMINAL': 10300, 'BR_MIN': 5253, 'CABLE_SPEC': b'\x0c\x00', 'LENGTH_50UM': 0, 'VENDOR_NAME': 'FiberStore ', 'LENGTH_SMF_KM': 0, 'VENDOR_OUI': b'\x00\x00\x00', 'EXT_IDENTIFIER': 4, 'VENDOR_REV': 'D ', 'CONNECTOR': 33, 'SFF_8472_COMPLIANCE': 0, 'ENHANCED_OPTIONS': 0, 'LENGTH_62_5UM': 0, 'OPTIONS': b'\x00\x12', 'LENGTH_OM3': 0, 'TRANSCEIVER': b'\x01\x00\x00\x04\x00\x04\x80\xd5'}
DOM:
{'TX_BIAS': 0.0, 'VCC': 0.0, 'RX_POWER': 0.0, 'TEMPERATURE': 0.0, 'TX_POWER': 0.0}
writable keys, with before and after values (should match)
SOFT_TX_DISABLE_SELECT: 0,0
bhishma@bhishma:~/oom3/test$ python3 oomtest.py
34 raw memory reads for port port1
34 raw memory reads for port port2
34 raw memory reads for port port3
34 raw memory reads for port port4
1 raw memory reads for port port5
1 raw memory reads for port port6
1 raw memory reads for port port7
1 raw memory reads for port port8
1 raw memory reads for port port9
34 raw memory reads for port port10
34 raw memory reads for port port11
34 raw memory reads for port port12
34 raw memory reads for port port13
1 raw memory reads for port port14
1 raw memory reads for port port15
1 raw memory reads for port port16
1 raw memory reads for port port17
1 raw memory reads for port port18
1 raw memory reads for port port19
1 raw memory reads for port port20
34 raw memory reads for port port21
34 raw memory reads for port port22
1 raw memory reads for port port23
1 raw memory reads for port port24
1 raw memory reads for port port25
1 raw memory reads for port port26
1 raw memory reads for port port27
1 raw memory reads for port port28
1 raw memory reads for port port29
1 raw memory reads for port port30
1 raw memory reads for port port31
1 raw memory reads for port port32
1 raw memory reads for port port33
1 raw memory reads for port port34
1 raw memory reads for port port35
1 raw memory reads for port port36
1 raw memory reads for port port37
1 raw memory reads for port port38
1 raw memory reads for port port39
1 raw memory reads for port port40
1 raw memory reads for port port41
1 raw memory reads for port port42
1 raw memory reads for port port43
1 raw memory reads for port port44
1 raw memory reads for port port45
1 raw memory reads for port port46
1 raw memory reads for port port47
1 raw memory reads for port port48
186 raw memory reads for port port49
186 raw memory reads for port port50
186 raw memory reads for port port51
186 raw memory reads for port port52
186 raw memory reads for port port53
186 raw memory reads for port port54
ubuntu@rtbrick:~/oom3/test$ python3 qtest.py
0xA0, page 0, offset 0, 128 bytes
0000x: 00000000 00000000 00000000 00000000
0010x: 00000000 00000000 00000000 00000000
0020x: 00000000 00000000 00000000 00000000
0030x: 00000000 00000000 00000000 00000000
0040x: 00000000 00000000 00000000 00000000
0050x: 00000000 00000000 00000000 00000000
0060x: 00000000 00000000 00000000 00000000
0070x: 00000000 00000000 00000000 00000000
0xA0, page 0, offset 128, 128 bytes
0080x: 00000000 00000000 00000000 00000000
0090x: 00000000 00000000 00000000 00000000
00a0x: 00000000 00000000 00000000 00000000
00b0x: 00000000 00000000 00000000 00000000
00c0x: 00000000 00000000 00000000 00000000
00d0x: 00000000 00000000 00000000 00000000
00e0x: 00000000 00000000 00000000 00000000
00f0x: 00000000 00000000 00000000 00000000
0 keys implemented
functions, with their keys and values:
writable keys, with before and after values (should match)
bhishma@bhishma:~/oom3/test$
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub https://github.com/opencomputeproject/oom/issues/11?email_source=notifications&email_token=AD6VCJ2UBIJWXZ6EFZDW2UDQORYE7A5CNFSM4INQOQEKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBEWAOQ#issuecomment-541679674 , or unsubscribe https://github.com/notifications/unsubscribe-auth/AD6VCJ24XEUH6SQFOZQDO7LQORYE7ANCNFSM4INQOQEA .  https://github.com/notifications/beacon/AD6VCJ7ONY2QPS7FJADYLT3QORYE7A5CNFSM4INQOQEKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBEWAOQ.gif

Hi All,
any progress on that task?

Sorry, no.  Still on the list.  Is it holding you up?
From: Mikhail Sokolov<EMAIL_ADDRESS>Sent: Monday, March 16, 2020 1:49 PM
To: opencomputeproject/oom<EMAIL_ADDRESS>Cc: donboll<EMAIL_ADDRESS>Comment<EMAIL_ADDRESS>Subject: Re: [opencomputeproject/oom] Add python 3 support (#11)
Hi All,
any progress on that task?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub https://github.com/opencomputeproject/oom/issues/11#issuecomment-599751619 , or unsubscribe https://github.com/notifications/unsubscribe-auth/AD6VCJZZYXRQFUSAGXX46FDRH2GC3ANCNFSM4INQOQEA .

I'm looking for a way to collects opticsdump on ubuntu 18.04. Though I can use python2.7, I have other modules which have dependency on python3. I have made certain modifications on the current oom package and got it able to run it on python3.4. PFA for execution results on python3 and also test results. If these results looks fine, how I can contribute here.
On Mon, Oct 14, 2019 at 6:30 AM donboll @.***> wrote: Python3 support is on the list, but not very high on the list :-). What do you plan on using OOM for? More interest moves it higher on the list. — You are receiving this because you commented. Reply to this email directly, view it on GitHub <#11?email_source=notifications&email_token=AEGGQWS2K4H2DOHROA73LRDQOPAB7A5CNFSM4INQOQEKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBDESDQ#issuecomment-541477134>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEGGQWTVGOTHHHTWNATT6N3QOPAB7ANCNFSM4INQOQEA .
bhishma@bhishma:~$ python3 opticsdump.py Port Name Vendor Type Part # Serial # port1 FiberStore SFP SFP-10G-DAC F1712078537-1 port2 FiberStore SFP SFP-10G-DAC F1712078563-2 port3 FiberStore SFP SFP-10G-DAC F1712078558-1 port4 FiberStore SFP SFP-10G-DAC F1712078557-1 port5 No Module port6 No Module port7 No Module port8 No Module port9 No Module port10 FS SFP QSFP-4SFP10G-DAC G1805050580-3 port11 FS SFP QSFP-4SFP10G-DAC G1805050580-1 port12 FS SFP QSFP-4SFP10G-DAC G1805050580-2 port13 FS SFP QSFP-4SFP10G-DAC G1805050580-4 port14 No Module port15 No Module port16 No Module port17 No Module port18 No Module port19 No Module port20 No Module port21 FS SFP SFP-10G-DAC G1807099919-2 port22 FS SFP SFP-10G-DAC G1807099850-2 port23 No Module port24 No Module port25 No Module port26 No Module port27 No Module port28 No Module port29 No Module port30 No Module port31 No Module port32 No Module port33 No Module port34 No Module port35 No Module port36 No Module port37 No Module port38 No Module port39 No Module port40 No Module port41 No Module port42 No Module port43 No Module port44 No Module port45 No Module port46 No Module port47 No Module port48 No Module port49 FS QSFP28 Q28-PC01 G1810038308-1 port50 FS QSFP28 Q28-PC01 G1810038294-1 port51 FS QSFP28 Q28-PC01 G1810038298-2 port52 FS QSFP28 Q28-PC01 G1810038286-1 port53 FS QSFP28 Q28-PC01 G1810038289-2 port54 SmartOptics QSFP28 SO-QSFP28-ER4 INJAE6110152 bhishma@bhishma:~$ python3 opticsdump.py -p port54 DOM RX1_POWER = 0.0436 (calculated -13.605135107314139 dBm) RX2_POWER = 0.04290000000000001(calculated -13.675427078152758 dBm) RX3_POWER = 0.0478 (calculated -13.20572103387881 dBm) RX4_POWER = 0.0502 (calculated -12.992962828549805 dBm) SUPPLY_VOLTAGE = 3.2472000000000003 TEMPERATURE = 39.4140625 TX1_BIAS = 58.064 TX1_POWER = 0.8572000000000001(calculated -0.6691783763020891 dBm) TX2_BIAS = 54.838 TX2_POWER = 1.2056000000000002(calculated 0.8120323930657547 dBm) TX3_BIAS = 54.838 TX3_POWER = 1.1339000000000001(calculated 0.5457475529482294 dBm) TX4_BIAS = 54.838 TX4_POWER = 0.9789000000000001(calculated -0.09261671492462609 dBm) SERIAL_ID BR_NOMINAL = 25750 CONNECTOR = 7 CU_ATTENUATE_2_5 = 0 CU_ATTENUATE_5_0 = 0 DEVICE_TECH = b'o' ENCODING = 3 EXTENDED_MODULE = b'\x00' EXT_IDENTIFIER = 206 EXT_RATE_COMPLY = 0 IDENTIFIER = 17 LENGTH_OM1_62_5UM = 0 LENGTH_OM2_50UM = 0 LENGTH_OM3_50UM = 0 LENGTH_OM4_OR_CU = 0 LENGTH_SMF_KM = 25000 MAX_CASE_TEMP = 70 SPEC_COMPLIANCE = b'\x80\x00\x00\x00\x00\x00\x00\x00' VENDOR_NAME = SmartOptics VENDOR_OUI = b'\x00SO' VENDOR_PN = SO-QSFP28-ER4 VENDOR_REV = A1 WAVELENGTH = 1310.0 WAVELEN_TOLERANCE = 1.03 SERIAL_ID_EXT DATE_CODE = 190301 DIAG_MONITOR_TYPE = 60 ENHANCED_OPTIONS = 16 LINK_CODES = 4 OPTIONS = b'\x07?\xff' VENDOR_SN = INJAE6110152 ADVANCED_LOW_POWER_MODE = 0 BIAS_HIGH_ALARM = 110.0 BIAS_HIGH_WARN = 100.0 BIAS_LOW_ALARM = 30.0 BIAS_LOW_WARN = 40.0 BR_NOMINAL = 25750 CONNECTOR = 7 CU_ATTENUATE_2_5 = 0 CU_ATTENUATE_5_0 = 0 DATA_NOT_READY = 0 DATE_CODE = 190301 DEVICE_TECH = b'o' DIAG_MONITOR_TYPE = 60 ENCODING = 3 ENHANCED_OPTIONS = 16 EXTENDED_MODULE = b'\x00' EXT_IDENTIFIER = 206 EXT_RATE_COMPLY = 0 FAR_END_IMPLEMENT = 0 FAR_SIDE_MANAGED = 0 FLAT_MEM = 0 HIGH_POWER_CLASS_ENABLE = 1 IDENTIFIER = 17 INIT_COMPLETE = 0 INT_L = 1 LENGTH_OM1_62_5UM = 0 LENGTH_OM2_50UM = 0 LENGTH_OM3_50UM = 0 LENGTH_OM4_OR_CU = 0 LENGTH_SMF_KM = 25000 LINK_CODES = 4 L_RX1_LOL = 0 L_RX1_LOS = 0 L_RX1_POWER = 0 (calculated 0.0 dBm) L_RX1_POWER_HIGH_ALARM = 0 L_RX1_POWER_HIGH_WARN = 0 L_RX1_POWER_LOW_ALARM = 0 L_RX1_POWER_LOW_WARN = 0 L_RX1_RX2_POWER = 0 (calculated 0.0 dBm) L_RX2_LOL = 0 L_RX2_LOS = 0 L_RX2_POWER = 0 (calculated 0.0 dBm) L_RX2_POWER_HIGH_ALARM = 0 L_RX2_POWER_HIGH_WARN = 0 L_RX2_POWER_LOW_ALARM = 0 L_RX2_POWER_LOW_WARN = 0 L_RX3_LOL = 0 L_RX3_LOS = 0 L_RX3_POWER = 0 (calculated 0.0 dBm) L_RX3_POWER_HIGH_ALARM = 0 L_RX3_POWER_HIGH_WARN = 0 L_RX3_POWER_LOW_ALARM = 0 L_RX3_POWER_LOW_WARN = 0 L_RX3_RX4_POWER = 0 (calculated 0.0 dBm) L_RX4_LOL = 0 L_RX4_LOS = 0 L_RX4_POWER = 0 (calculated 0.0 dBm) L_RX4_POWER_HIGH_ALARM = 0 L_RX4_POWER_HIGH_WARN = 0 L_RX4_POWER_LOW_ALARM = 0 L_RX4_POWER_LOW_WARN = 0 L_TEMP_ALARM_WARN = 0 L_TEMP_HIGH_ALARM = 0 L_TEMP_HIGH_WARNING = 0 L_TEMP_LOW_ALARM = 0 L_TEMP_LOW_WARNING = 0 L_TX1_ADAPT_EQ_FAULT = 0 L_TX1_BIAS = 0 L_TX1_BIAS_HIGH_ALARM = 0 L_TX1_BIAS_HIGH_WARN = 0 L_TX1_BIAS_LOW_ALARM = 0 L_TX1_BIAS_LOW_WARN = 0 L_TX1_FAULT = 0 L_TX1_LOL = 0 L_TX1_LOS = 0 L_TX1_POWER = 0 (calculated 0.0 dBm) L_TX1_POWER_HIGH_ALARM = 0 L_TX1_POWER_HIGH_WARN = 0 L_TX1_POWER_LOW_ALARM = 0 L_TX1_POWER_LOW_WARN = 0 L_TX1_TX2_BIAS = 0 L_TX1_TX2_POWER = 0 (calculated 0.0 dBm) L_TX2_ADAPT_EQ_FAULT = 0 L_TX2_BIAS = 0 L_TX2_BIAS_HIGH_ALARM = 0 L_TX2_BIAS_HIGH_WARN = 0 L_TX2_BIAS_LOW_ALARM = 0 L_TX2_BIAS_LOW_WARN = 0 L_TX2_FAULT = 0 L_TX2_LOL = 0 L_TX2_LOS = 0 L_TX2_POWER = 0 (calculated 0.0 dBm) L_TX2_POWER_HIGH_ALARM = 0 L_TX2_POWER_HIGH_WARN = 0 L_TX2_POWER_LOW_ALARM = 0 L_TX2_POWER_LOW_WARN = 0 L_TX3_ADAPT_EQ_FAULT = 0 L_TX3_BIAS = 0 L_TX3_BIAS_HIGH_ALARM = 0 L_TX3_BIAS_HIGH_WARN = 0 L_TX3_BIAS_LOW_ALARM = 0 L_TX3_BIAS_LOW_WARN = 0 L_TX3_FAULT = 0 L_TX3_LOL = 0 L_TX3_LOS = 0 L_TX3_POWER = 0 (calculated 0.0 dBm) L_TX3_POWER_HIGH_ALARM = 0 L_TX3_POWER_HIGH_WARN = 0 L_TX3_POWER_LOW_ALARM = 0 L_TX3_POWER_LOW_WARN = 0 L_TX3_TX4_BIAS = 0 L_TX3_TX4_POWER = 0 (calculated 0.0 dBm) L_TX4_ADAPT_EQ_FAULT = 0 L_TX4_BIAS = 0 L_TX4_BIAS_HIGH_ALARM = 0 L_TX4_BIAS_HIGH_WARN = 0 L_TX4_BIAS_LOW_ALARM = 0 L_TX4_BIAS_LOW_WARN = 0 L_TX4_FAULT = 0 L_TX4_LOL = 0 L_TX4_LOS = 0 L_TX4_POWER = 0 (calculated 0.0 dBm) L_TX4_POWER_HIGH_ALARM = 0 L_TX4_POWER_HIGH_WARN = 0 L_TX4_POWER_LOW_ALARM = 0 L_TX4_POWER_LOW_WARN = 0 L_TX_FAULT = 0 L_TX_RX_LOL = 0 L_TX_RX_LOS = 0 L_VCC_ALARM_WARN = 0 L_VCC_HIGH_ALARM = 0 L_VCC_HIGH_WARN = 0 L_VCC_LOW_ALARM = 0 L_VCC_LOW_WARN = 0 MAX_CASE_TEMP = 70 M_TEMP_ALARM_WARN = 0 M_TX_ADAPT_EQ_FAULT = 0 M_TX_FAULT = 0 M_TX_RX_CDR_LOL = b'\x00' M_TX_RX_LOS = b'\x00' M_VCC_ALARM_WARN = 0 NEAR_END_IMPLEMENT = 0 OPTIONS = b'\x07?\xff' PASSWORD_CHANGE = 0 PASSWORD_ENTRY = 0 POWER_OVERRIDE = 1 POWER_SET = 0 PROPAGATION_DELAY = 0 REV_COMPLIANCE = 7 RX1_APPLICATION_SELECT = b'\x00' RX1_CDR_CONTROL = 1 RX1_POWER = 0.0436 (calculated -13.605135107314139 dBm) RX1_POWER_DBM = -13.605135107314139 RX1_RATE_SELECT = 0 RX2_APPLICATION_SELECT = b'\x00' RX2_CDR_CONTROL = 1 RX2_POWER = 0.04290000000000001(calculated -13.675427078152758 dBm) RX2_POWER_DBM = -13.675427078152758 RX2_RATE_SELECT = 0 RX3_APPLICATION_SELECT = b'\x00' RX3_CDR_CONTROL = 1 RX3_POWER = 0.0478 (calculated -13.20572103387881 dBm) RX3_POWER_DBM = -13.20572103387881 RX3_RATE_SELECT = 0 RX4_APPLICATION_SELECT = b'\x00' RX4_CDR_CONTROL = 1 RX4_POWER = 0.0502 (calculated -12.992962828549805 dBm) RX4_POWER_DBM = -12.992962828549805 RX4_RATE_SELECT = 0 RX_POWER_HIGH_ALARM = -3.499840475281614 RX_POWER_HIGH_WARN = -4.500163888403112 RX_POWER_LOW_ALARM = -20.0 RX_POWER_LOW_WARN = -16.989700043360187 RX_RATE_SELECT = b'\x00' SPEC_COMPLIANCE = b'\x80\x00\x00\x00\x00\x00\x00\x00' SUPPLY_VOLTAGE = 3.2472000000000003 TEMPERATURE = 39.546875 TEMP_HIGH_ALARM = 75.0 TEMP_HIGH_WARN = 70.0 TEMP_LOW_ALARM = -5.0 TEMP_LOW_WARN = 0.0 TX1_APPLICATION_SELECT = b'\x00' TX1_BIAS = 58.064 TX1_CDR_CONTROL = 1 TX1_DISABLE = 0 TX1_POWER = 0.8572000000000001(calculated -0.6691783763020891 dBm) TX1_POWER_DBM = -0.6691783763020891 TX1_RATE_SELECT = 0 TX2_APPLICATION_SELECT = b'\x00' TX2_BIAS = 54.838 TX2_CDR_CONTROL = 1 TX2_DISABLE = 0 TX2_POWER = 1.2056000000000002(calculated 0.8120323930657547 dBm) TX2_POWER_DBM = 0.8120323930657547 TX2_RATE_SELECT = 0 TX3_APPLICATION_SELECT = b'\x00' TX3_BIAS = 54.838 TX3_CDR_CONTROL = 1 TX3_DISABLE = 0 TX3_POWER = 1.1337000000000002(calculated 0.54498146636677 dBm) TX3_POWER_DBM = 0.54498146636677 TX3_RATE_SELECT = 0 TX4_APPLICATION_SELECT = b'\x00' TX4_BIAS = 54.838 TX4_CDR_CONTROL = 1 TX4_DISABLE = 0 TX4_POWER = 0.9789000000000001(calculated -0.09261671492462609 dBm) TX4_POWER_DBM = -0.09261671492462609 TX4_RATE_SELECT = 0 TX_DISABLE = 0 TX_POWER_HIGH_ALARM = 4.00002345927956 TX_POWER_HIGH_WARN = 3.0000820255381306 TX_POWER_LOW_ALARM = -2.9998893767788752 TX_POWER_LOW_WARN = -1.9997064075586568 TX_RATE_SELECT = b'\x00' TX_RX_CDR_CONTROL = 255 VENDOR_NAME = SmartOptics VENDOR_OUI = b'\x00SO' VENDOR_PN = SO-QSFP28-ER4 VENDOR_REV = A1 VENDOR_SN = INJAE6110152 VENDOR_SPECIFIC_105 = b'\x00\x00' VENDOR_SPECIFIC_19 = b'\x00\x00\x00' VENDOR_SPECIFIC_224 = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' VENDOR_SPECIFIC_30 = b'\x00\x00\x00\x00' VENDOR_SPECIFIC_74 = b'\x00\x00\x00\x00\x00\x00\x00\x00' VENDOR_SPECIFIC_8 = b'\x00' VOLTAGE_HIGH_ALARM = 3.6 VOLTAGE_HIGH_WARN = 3.465 VOLTAGE_LOW_ALARM = 3.0 VOLTAGE_LOW_WARN = 3.135 WAVELENGTH = 1310.0 WAVELEN_TOLERANCE = 1.03 bhishma@bhishma:~$ bhishma@bhishma:~/oom3/test$ python3 keytest.py BIAS_HIGH_ALARM: 0.0 BIAS_HIGH_WARN: 0.0 BIAS_LOW_ALARM: 0.0 BIAS_LOW_WARN: 0.0 BR_MAX: 10300 BR_MIN: 5253 BR_NOMINAL: 10300 CABLE_SPEC: b'\x0c\x00' CONNECTOR: 33 DATE_CODE: 180108 DIAGNOSTIC_MONITORING_TYPE: 0 ENCODING: 0 ENHANCED_OPTIONS: 0 EXT_IDENTIFIER: 4 IDENTIFIER: 3 LENGTH_50UM: 0 LENGTH_62_5UM: 0 LENGTH_OM3: 0 LENGTH_OM4_OR_CU: 128 LENGTH_SMF: 0 LENGTH_SMF_KM: 0 L_ALARM_WARN: 0x0 0x0 0x0 0x0 0x0 0x0 OPTIONS: 0x0 0x12 OPT_LASER_TEMP: 0.0 OPT_TEC: 0.0 RATE_IDENTIFIER: 0 RX_POWER: 0.0 RX_POWER_DBM: -30 RX_POWER_HIGH_ALARM: -30 RX_POWER_HIGH_WARN: -30 RX_POWER_LOW_ALARM: -30 RX_POWER_LOW_WARN: -30 SFF_8472_COMPLIANCE: 0 TEMPERATURE: 0.0 TEMP_HIGH_ALARM: 0.0 TEMP_HIGH_WARN: 0.0 TEMP_LOW_ALARM: 0.0 TEMP_LOW_WARN: 0.0 TRANSCEIVER: 0x1 0x0 0x0 0x4 0x0 0x4 0x80 0xd5 TRANSCEIVER_EXT: 0 TX_BIAS: 0.0 TX_POWER: 0.0 TX_POWER_DBM: -30 TX_POWER_HIGH_ALARM: -30 TX_POWER_HIGH_WARN: -30 TX_POWER_LOW_ALARM: -30 TX_POWER_LOW_WARN: -30 VCC: 0.0 VENDOR_NAME: FiberStore VENDOR_OUI: 0x0 0x0 0x0 VENDOR_PN: SFP-10G-DAC VENDOR_REV: D VENDOR_SN: F1712078537-1 VENDOR_SPECIFIC_96: 0x0 0xd8 0x20 0x20 0x20 0x20 0x20 0x20 0x66 0x61 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff VOLTAGE_HIGH_ALARM: 0.0 VOLTAGE_HIGH_WARN: 0.0 VOLTAGE_LOW_ALARM: 0.0 VOLTAGE_LOW_WARN: 0.0 WAVELENGTH: 0 functions, with their keys and values: SERIAL_ID: {'VENDOR_SN': 'F1712078537-1 ', 'VENDOR_PN': 'SFP-10G-DAC ', 'DIAGNOSTIC_MONITORING_TYPE': 0, 'ENCODING': 0, 'BR_MAX': 10300, 'DATE_CODE': '180108 ', 'LENGTH_OM4_OR_CU': 128, 'IDENTIFIER': 3, 'RATE_IDENTIFIER': 0, 'WAVELENGTH': 0, 'LENGTH_SMF': 0, 'TRANSCEIVER_EXT': 0, 'BR_NOMINAL': 10300, 'BR_MIN': 5253, 'CABLE_SPEC': b'\x0c\x00', 'LENGTH_50UM': 0, 'VENDOR_NAME': 'FiberStore ', 'LENGTH_SMF_KM': 0, 'VENDOR_OUI': b'\x00\x00\x00', 'EXT_IDENTIFIER': 4, 'VENDOR_REV': 'D ', 'CONNECTOR': 33, 'SFF_8472_COMPLIANCE': 0, 'ENHANCED_OPTIONS': 0, 'LENGTH_62_5UM': 0, 'OPTIONS': b'\x00\x12', 'LENGTH_OM3': 0, 'TRANSCEIVER': b'\x01\x00\x00\x04\x00\x04\x80\xd5'} DOM: {'TX_BIAS': 0.0, 'VCC': 0.0, 'RX_POWER': 0.0, 'TEMPERATURE': 0.0, 'TX_POWER': 0.0} writable keys, with before and after values (should match) SOFT_TX_DISABLE_SELECT: 0,0 bhishma@bhishma:~/oom3/test$ python3 oomtest.py 34 raw memory reads for port port1 34 raw memory reads for port port2 34 raw memory reads for port port3 34 raw memory reads for port port4 1 raw memory reads for port port5 1 raw memory reads for port port6 1 raw memory reads for port port7 1 raw memory reads for port port8 1 raw memory reads for port port9 34 raw memory reads for port port10 34 raw memory reads for port port11 34 raw memory reads for port port12 34 raw memory reads for port port13 1 raw memory reads for port port14 1 raw memory reads for port port15 1 raw memory reads for port port16 1 raw memory reads for port port17 1 raw memory reads for port port18 1 raw memory reads for port port19 1 raw memory reads for port port20 34 raw memory reads for port port21 34 raw memory reads for port port22 1 raw memory reads for port port23 1 raw memory reads for port port24 1 raw memory reads for port port25 1 raw memory reads for port port26 1 raw memory reads for port port27 1 raw memory reads for port port28 1 raw memory reads for port port29 1 raw memory reads for port port30 1 raw memory reads for port port31 1 raw memory reads for port port32 1 raw memory reads for port port33 1 raw memory reads for port port34 1 raw memory reads for port port35 1 raw memory reads for port port36 1 raw memory reads for port port37 1 raw memory reads for port port38 1 raw memory reads for port port39 1 raw memory reads for port port40 1 raw memory reads for port port41 1 raw memory reads for port port42 1 raw memory reads for port port43 1 raw memory reads for port port44 1 raw memory reads for port port45 1 raw memory reads for port port46 1 raw memory reads for port port47 1 raw memory reads for port port48 186 raw memory reads for port port49 186 raw memory reads for port port50 186 raw memory reads for port port51 186 raw memory reads for port port52 186 raw memory reads for port port53 186 raw memory reads for port port54 ubuntu@rtbrick:~/oom3/test$ python3 qtest.py 0xA0, page 0, offset 0, 128 bytes 0000x: 00000000 00000000 00000000 00000000 0010x: 00000000 00000000 00000000 00000000 0020x: 00000000 00000000 00000000 00000000 0030x: 00000000 00000000 00000000 00000000 0040x: 00000000 00000000 00000000 00000000 0050x: 00000000 00000000 00000000 00000000 0060x: 00000000 00000000 00000000 00000000 0070x: 00000000 00000000 00000000 00000000 0xA0, page 0, offset 128, 128 bytes 0080x: 00000000 00000000 00000000 00000000 0090x: 00000000 00000000 00000000 00000000 00a0x: 00000000 00000000 00000000 00000000 00b0x: 00000000 00000000 00000000 00000000 00c0x: 00000000 00000000 00000000 00000000 00d0x: 00000000 00000000 00000000 00000000 00e0x: 00000000 00000000 00000000 00000000 00f0x: 00000000 00000000 00000000 00000000 0 keys implemented functions, with their keys and values: writable keys, with before and after values (should match) bhishma@bhishma:~/oom3/test$

Hello,
We are currently trying to use the results of the OOM project in a research project.
Python3 is absolutely necessary for this.
Is there any progress in Python3 or other useful additions for OOM.
Kind Regards and thx for the help,
Stefan

I didn't see working code that was mentioned by @bacharya .
May @donboll got something directly. @donboll ?

Interesting results, looks encouraging.  A couple of questions…
Does your code work on both python 2.7 and 3.4?
What are you running on?  I’m particularly interested in how you get the raw data from the system.  Are you using the optoe driver, or some other driver, or command scripts?  Which shim are you using?  Also OS and hardware.
I always run pep8 on the python code to clean it up and conform to the community style.
Create a pull request so I can see the code.  I’ll take a look and go from there.
Don
From: sto-zal @.***
Sent: Tuesday, June 29, 2021 1:13 AM
To: opencomputeproject/oom @.>
Cc: donboll @.>; Comment @.***>
Subject: Re: [opencomputeproject/oom] Add python 3 support (#11)
I'm looking for a way to collects opticsdump on ubuntu 18.04. Though I can use python2.7, I have other modules which have dependency on python3. I have made certain modifications on the current oom package and got it able to run it on python3.4. PFA for execution results on python3 and also test results. If these results looks fine, how I can contribute here.
On Mon, Oct 14, 2019 at 6:30 AM donboll @.> wrote: Python3 support is on the list, but not very high on the list :-). What do you plan on using OOM for? More interest moves it higher on the list. — You are receiving this because you commented. Reply to this email directly, view it on GitHub <#11 https://github.com/opencomputeproject/oom/issues/11 ?email_source=notifications&email_token=AEGGQWS2K4H2DOHROA73LRDQOPAB7A5CNFSM4INQOQEKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBDESDQ#issuecomment-541477134>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEGGQWTVGOTHHHTWNATT6N3QOPAB7ANCNFSM4INQOQEA .
@.:$ python3 opticsdump.py Port Name Vendor Type Part # Serial # port1 FiberStore SFP SFP-10G-DAC F1712078537-1 port2 FiberStore SFP SFP-10G-DAC F1712078563-2 port3 FiberStore SFP SFP-10G-DAC F1712078558-1 port4 FiberStore SFP SFP-10G-DAC F1712078557-1 port5 No Module port6 No Module port7 No Module port8 No Module port9 No Module port10 FS SFP QSFP-4SFP10G-DAC G1805050580-3 port11 FS SFP QSFP-4SFP10G-DAC G1805050580-1 port12 FS SFP QSFP-4SFP10G-DAC G1805050580-2 port13 FS SFP QSFP-4SFP10G-DAC G1805050580-4 port14 No Module port15 No Module port16 No Module port17 No Module port18 No Module port19 No Module port20 No Module port21 FS SFP SFP-10G-DAC G1807099919-2 port22 FS SFP SFP-10G-DAC G1807099850-2 port23 No Module port24 No Module port25 No Module port26 No Module port27 No Module port28 No Module port29 No Module port30 No Module port31 No Module port32 No Module port33 No Module port34 No Module port35 No Module port36 No Module port37 No Module port38 No Module port39 No Module port40 No Module port41 No Module port42 No Module port43 No Module port44 No Module port45 No Module port46 No Module port47 No Module port48 No Module port49 FS QSFP28 Q28-PC01 G1810038308-1 port50 FS QSFP28 Q28-PC01 G1810038294-1 port51 FS QSFP28 Q28-PC01 G1810038298-2 port52 FS QSFP28 Q28-PC01 G1810038286-1 port53 FS QSFP28 Q28-PC01 G1810038289-2 port54 SmartOptics QSFP28 SO-QSFP28-ER4 INJAE6110152 @.:$ python3 opticsdump.py -p port54 DOM RX1_POWER = 0.0436 (calculated -13.605135107314139 dBm) RX2_POWER = 0.04290000000000001(calculated -13.675427078152758 dBm) RX3_POWER = 0.0478 (calculated -13.20572103387881 dBm) RX4_POWER = 0.0502 (calculated -12.992962828549805 dBm) SUPPLY_VOLTAGE = 3.2472000000000003 TEMPERATURE = 39.4140625 TX1_BIAS = 58.064 TX1_POWER = 0.8572000000000001(calculated -0.6691783763020891 dBm) TX2_BIAS = 54.838 TX2_POWER = 1.2056000000000002(calculated 0.8120323930657547 dBm) TX3_BIAS = 54.838 TX3_POWER = 1.1339000000000001(calculated 0.5457475529482294 dBm) TX4_BIAS = 54.838 TX4_POWER = 0.9789000000000001(calculated -0.09261671492462609 dBm) SERIAL_ID BR_NOMINAL = 25750 CONNECTOR = 7 CU_ATTENUATE_2_5 = 0 CU_ATTENUATE_5_0 = 0 DEVICE_TECH = b'o' ENCODING = 3 EXTENDED_MODULE = b'\x00' EXT_IDENTIFIER = 206 EXT_RATE_COMPLY = 0 IDENTIFIER = 17 LENGTH_OM1_62_5UM = 0 LENGTH_OM2_50UM = 0 LENGTH_OM3_50UM = 0 LENGTH_OM4_OR_CU = 0 LENGTH_SMF_KM = 25000 MAX_CASE_TEMP = 70 SPEC_COMPLIANCE = b'\x80\x00\x00\x00\x00\x00\x00\x00' VENDOR_NAME = SmartOptics VENDOR_OUI = b'\x00SO' VENDOR_PN = SO-QSFP28-ER4 VENDOR_REV = A1 WAVELENGTH = 1310.0 WAVELEN_TOLERANCE = 1.03 SERIAL_ID_EXT DATE_CODE = 190301 DIAG_MONITOR_TYPE = 60 ENHANCED_OPTIONS = 16 LINK_CODES = 4 OPTIONS = b'\x07?\xff' VENDOR_SN = INJAE6110152 ADVANCED_LOW_POWER_MODE = 0 BIAS_HIGH_ALARM = 110.0 BIAS_HIGH_WARN = 100.0 BIAS_LOW_ALARM = 30.0 BIAS_LOW_WARN = 40.0 BR_NOMINAL = 25750 CONNECTOR = 7 CU_ATTENUATE_2_5 = 0 CU_ATTENUATE_5_0 = 0 DATA_NOT_READY = 0 DATE_CODE = 190301 DEVICE_TECH = b'o' DIAG_MONITOR_TYPE = 60 ENCODING = 3 ENHANCED_OPTIONS = 16 EXTENDED_MODULE = b'\x00' EXT_IDENTIFIER = 206 EXT_RATE_COMPLY = 0 FAR_END_IMPLEMENT = 0 FAR_SIDE_MANAGED = 0 FLAT_MEM = 0 HIGH_POWER_CLASS_ENABLE = 1 IDENTIFIER = 17 INIT_COMPLETE = 0 INT_L = 1 LENGTH_OM1_62_5UM = 0 LENGTH_OM2_50UM = 0 LENGTH_OM3_50UM = 0 LENGTH_OM4_OR_CU = 0 LENGTH_SMF_KM = 25000 LINK_CODES = 4 L_RX1_LOL = 0 L_RX1_LOS = 0 L_RX1_POWER = 0 (calculated 0.0 dBm) L_RX1_POWER_HIGH_ALARM = 0 L_RX1_POWER_HIGH_WARN = 0 L_RX1_POWER_LOW_ALARM = 0 L_RX1_POWER_LOW_WARN = 0 L_RX1_RX2_POWER = 0 (calculated 0.0 dBm) L_RX2_LOL = 0 L_RX2_LOS = 0 L_RX2_POWER = 0 (calculated 0.0 dBm) L_RX2_POWER_HIGH_ALARM = 0 L_RX2_POWER_HIGH_WARN = 0 L_RX2_POWER_LOW_ALARM = 0 L_RX2_POWER_LOW_WARN = 0 L_RX3_LOL = 0 L_RX3_LOS = 0 L_RX3_POWER = 0 (calculated 0.0 dBm) L_RX3_POWER_HIGH_ALARM = 0 L_RX3_POWER_HIGH_WARN = 0 L_RX3_POWER_LOW_ALARM = 0 L_RX3_POWER_LOW_WARN = 0 L_RX3_RX4_POWER = 0 (calculated 0.0 dBm) L_RX4_LOL = 0 L_RX4_LOS = 0 L_RX4_POWER = 0 (calculated 0.0 dBm) L_RX4_POWER_HIGH_ALARM = 0 L_RX4_POWER_HIGH_WARN = 0 L_RX4_POWER_LOW_ALARM = 0 L_RX4_POWER_LOW_WARN = 0 L_TEMP_ALARM_WARN = 0 L_TEMP_HIGH_ALARM = 0 L_TEMP_HIGH_WARNING = 0 L_TEMP_LOW_ALARM = 0 L_TEMP_LOW_WARNING = 0 L_TX1_ADAPT_EQ_FAULT = 0 L_TX1_BIAS = 0 L_TX1_BIAS_HIGH_ALARM = 0 L_TX1_BIAS_HIGH_WARN = 0 L_TX1_BIAS_LOW_ALARM = 0 L_TX1_BIAS_LOW_WARN = 0 L_TX1_FAULT = 0 L_TX1_LOL = 0 L_TX1_LOS = 0 L_TX1_POWER = 0 (calculated 0.0 dBm) L_TX1_POWER_HIGH_ALARM = 0 L_TX1_POWER_HIGH_WARN = 0 L_TX1_POWER_LOW_ALARM = 0 L_TX1_POWER_LOW_WARN = 0 L_TX1_TX2_BIAS = 0 L_TX1_TX2_POWER = 0 (calculated 0.0 dBm) L_TX2_ADAPT_EQ_FAULT = 0 L_TX2_BIAS = 0 L_TX2_BIAS_HIGH_ALARM = 0 L_TX2_BIAS_HIGH_WARN = 0 L_TX2_BIAS_LOW_ALARM = 0 L_TX2_BIAS_LOW_WARN = 0 L_TX2_FAULT = 0 L_TX2_LOL = 0 L_TX2_LOS = 0 L_TX2_POWER = 0 (calculated 0.0 dBm) L_TX2_POWER_HIGH_ALARM = 0 L_TX2_POWER_HIGH_WARN = 0 L_TX2_POWER_LOW_ALARM = 0 L_TX2_POWER_LOW_WARN = 0 L_TX3_ADAPT_EQ_FAULT = 0 L_TX3_BIAS = 0 L_TX3_BIAS_HIGH_ALARM = 0 L_TX3_BIAS_HIGH_WARN = 0 L_TX3_BIAS_LOW_ALARM = 0 L_TX3_BIAS_LOW_WARN = 0 L_TX3_FAULT = 0 L_TX3_LOL = 0 L_TX3_LOS = 0 L_TX3_POWER = 0 (calculated 0.0 dBm) L_TX3_POWER_HIGH_ALARM = 0 L_TX3_POWER_HIGH_WARN = 0 L_TX3_POWER_LOW_ALARM = 0 L_TX3_POWER_LOW_WARN = 0 L_TX3_TX4_BIAS = 0 L_TX3_TX4_POWER = 0 (calculated 0.0 dBm) L_TX4_ADAPT_EQ_FAULT = 0 L_TX4_BIAS = 0 L_TX4_BIAS_HIGH_ALARM = 0 L_TX4_BIAS_HIGH_WARN = 0 L_TX4_BIAS_LOW_ALARM = 0 L_TX4_BIAS_LOW_WARN = 0 L_TX4_FAULT = 0 L_TX4_LOL = 0 L_TX4_LOS = 0 L_TX4_POWER = 0 (calculated 0.0 dBm) L_TX4_POWER_HIGH_ALARM = 0 L_TX4_POWER_HIGH_WARN = 0 L_TX4_POWER_LOW_ALARM = 0 L_TX4_POWER_LOW_WARN = 0 L_TX_FAULT = 0 L_TX_RX_LOL = 0 L_TX_RX_LOS = 0 L_VCC_ALARM_WARN = 0 L_VCC_HIGH_ALARM = 0 L_VCC_HIGH_WARN = 0 L_VCC_LOW_ALARM = 0 L_VCC_LOW_WARN = 0 MAX_CASE_TEMP = 70 M_TEMP_ALARM_WARN = 0 M_TX_ADAPT_EQ_FAULT = 0 M_TX_FAULT = 0 M_TX_RX_CDR_LOL = b'\x00' M_TX_RX_LOS = b'\x00' M_VCC_ALARM_WARN = 0 NEAR_END_IMPLEMENT = 0 OPTIONS = b'\x07?\xff' PASSWORD_CHANGE = 0 PASSWORD_ENTRY = 0 POWER_OVERRIDE = 1 POWER_SET = 0 PROPAGATION_DELAY = 0 REV_COMPLIANCE = 7 RX1_APPLICATION_SELECT = b'\x00' RX1_CDR_CONTROL = 1 RX1_POWER = 0.0436 (calculated -13.605135107314139 dBm) RX1_POWER_DBM = -13.605135107314139 RX1_RATE_SELECT = 0 RX2_APPLICATION_SELECT = b'\x00' RX2_CDR_CONTROL = 1 RX2_POWER = 0.04290000000000001(calculated -13.675427078152758 dBm) RX2_POWER_DBM = -13.675427078152758 RX2_RATE_SELECT = 0 RX3_APPLICATION_SELECT = b'\x00' RX3_CDR_CONTROL = 1 RX3_POWER = 0.0478 (calculated -13.20572103387881 dBm) RX3_POWER_DBM = -13.20572103387881 RX3_RATE_SELECT = 0 RX4_APPLICATION_SELECT = b'\x00' RX4_CDR_CONTROL = 1 RX4_POWER = 0.0502 (calculated -12.992962828549805 dBm) RX4_POWER_DBM = -12.992962828549805 RX4_RATE_SELECT = 0 RX_POWER_HIGH_ALARM = -3.499840475281614 RX_POWER_HIGH_WARN = -4.500163888403112 RX_POWER_LOW_ALARM = -20.0 RX_POWER_LOW_WARN = -16.989700043360187 RX_RATE_SELECT = b'\x00' SPEC_COMPLIANCE = b'\x80\x00\x00\x00\x00\x00\x00\x00' SUPPLY_VOLTAGE = 3.2472000000000003 TEMPERATURE = 39.546875 TEMP_HIGH_ALARM = 75.0 TEMP_HIGH_WARN = 70.0 TEMP_LOW_ALARM = -5.0 TEMP_LOW_WARN = 0.0 TX1_APPLICATION_SELECT = b'\x00' TX1_BIAS = 58.064 TX1_CDR_CONTROL = 1 TX1_DISABLE = 0 TX1_POWER = 0.8572000000000001(calculated -0.6691783763020891 dBm) TX1_POWER_DBM = -0.6691783763020891 TX1_RATE_SELECT = 0 TX2_APPLICATION_SELECT = b'\x00' TX2_BIAS = 54.838 TX2_CDR_CONTROL = 1 TX2_DISABLE = 0 TX2_POWER = 1.2056000000000002(calculated 0.8120323930657547 dBm) TX2_POWER_DBM = 0.8120323930657547 TX2_RATE_SELECT = 0 TX3_APPLICATION_SELECT = b'\x00' TX3_BIAS = 54.838 TX3_CDR_CONTROL = 1 TX3_DISABLE = 0 TX3_POWER = 1.1337000000000002(calculated 0.54498146636677 dBm) TX3_POWER_DBM = 0.54498146636677 TX3_RATE_SELECT = 0 TX4_APPLICATION_SELECT = b'\x00' TX4_BIAS = 54.838 TX4_CDR_CONTROL = 1 TX4_DISABLE = 0 TX4_POWER = 0.9789000000000001(calculated -0.09261671492462609 dBm) TX4_POWER_DBM = -0.09261671492462609 TX4_RATE_SELECT = 0 TX_DISABLE = 0 TX_POWER_HIGH_ALARM = 4.00002345927956 TX_POWER_HIGH_WARN = 3.0000820255381306 TX_POWER_LOW_ALARM = -2.9998893767788752 TX_POWER_LOW_WARN = -1.9997064075586568 TX_RATE_SELECT = b'\x00' TX_RX_CDR_CONTROL = 255 VENDOR_NAME = SmartOptics VENDOR_OUI = b'\x00SO' VENDOR_PN = SO-QSFP28-ER4 VENDOR_REV = A1 VENDOR_SN = INJAE6110152 VENDOR_SPECIFIC_105 = b'\x00\x00' VENDOR_SPECIFIC_19 = b'\x00\x00\x00' VENDOR_SPECIFIC_224 = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' VENDOR_SPECIFIC_30 = b'\x00\x00\x00\x00' VENDOR_SPECIFIC_74 = b'\x00\x00\x00\x00\x00\x00\x00\x00' VENDOR_SPECIFIC_8 = b'\x00' VOLTAGE_HIGH_ALARM = 3.6 VOLTAGE_HIGH_WARN = 3.465 VOLTAGE_LOW_ALARM = 3.0 VOLTAGE_LOW_WARN = 3.135 WAVELENGTH = 1310.0 WAVELEN_TOLERANCE = 1.03 @.:$ @.:/oom3/test$ python3 keytest.py BIAS_HIGH_ALARM: 0.0 BIAS_HIGH_WARN: 0.0 BIAS_LOW_ALARM: 0.0 BIAS_LOW_WARN: 0.0 BR_MAX: 10300 BR_MIN: 5253 BR_NOMINAL: 10300 CABLE_SPEC: b'\x0c\x00' CONNECTOR: 33 DATE_CODE: 180108 DIAGNOSTIC_MONITORING_TYPE: 0 ENCODING: 0 ENHANCED_OPTIONS: 0 EXT_IDENTIFIER: 4 IDENTIFIER: 3 LENGTH_50UM: 0 LENGTH_62_5UM: 0 LENGTH_OM3: 0 LENGTH_OM4_OR_CU: 128 LENGTH_SMF: 0 LENGTH_SMF_KM: 0 L_ALARM_WARN: 0x0 0x0 0x0 0x0 0x0 0x0 OPTIONS: 0x0 0x12 OPT_LASER_TEMP: 0.0 OPT_TEC: 0.0 RATE_IDENTIFIER: 0 RX_POWER: 0.0 RX_POWER_DBM: -30 RX_POWER_HIGH_ALARM: -30 RX_POWER_HIGH_WARN: -30 RX_POWER_LOW_ALARM: -30 RX_POWER_LOW_WARN: -30 SFF_8472_COMPLIANCE: 0 TEMPERATURE: 0.0 TEMP_HIGH_ALARM: 0.0 TEMP_HIGH_WARN: 0.0 TEMP_LOW_ALARM: 0.0 TEMP_LOW_WARN: 0.0 TRANSCEIVER: 0x1 0x0 0x0 0x4 0x0 0x4 0x80 0xd5 TRANSCEIVER_EXT: 0 TX_BIAS: 0.0 TX_POWER: 0.0 TX_POWER_DBM: -30 TX_POWER_HIGH_ALARM: -30 TX_POWER_HIGH_WARN: -30 TX_POWER_LOW_ALARM: -30 TX_POWER_LOW_WARN: -30 VCC: 0.0 VENDOR_NAME: FiberStore VENDOR_OUI: 0x0 0x0 0x0 VENDOR_PN: SFP-10G-DAC VENDOR_REV: D VENDOR_SN: F1712078537-1 VENDOR_SPECIFIC_96: 0x0 0xd8 0x20 0x20 0x20 0x20 0x20 0x20 0x66 0x61 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0x20 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff VOLTAGE_HIGH_ALARM: 0.0 VOLTAGE_HIGH_WARN: 0.0 VOLTAGE_LOW_ALARM: 0.0 VOLTAGE_LOW_WARN: 0.0 WAVELENGTH: 0 functions, with their keys and values: SERIAL_ID: {'VENDOR_SN': 'F1712078537-1 ', 'VENDOR_PN': 'SFP-10G-DAC ', 'DIAGNOSTIC_MONITORING_TYPE': 0, 'ENCODING': 0, 'BR_MAX': 10300, 'DATE_CODE': '180108 ', 'LENGTH_OM4_OR_CU': 128, 'IDENTIFIER': 3, 'RATE_IDENTIFIER': 0, 'WAVELENGTH': 0, 'LENGTH_SMF': 0, 'TRANSCEIVER_EXT': 0, 'BR_NOMINAL': 10300, 'BR_MIN': 5253, 'CABLE_SPEC': b'\x0c\x00', 'LENGTH_50UM': 0, 'VENDOR_NAME': 'FiberStore ', 'LENGTH_SMF_KM': 0, 'VENDOR_OUI': b'\x00\x00\x00', 'EXT_IDENTIFIER': 4, 'VENDOR_REV': 'D ', 'CONNECTOR': 33, 'SFF_8472_COMPLIANCE': 0, 'ENHANCED_OPTIONS': 0, 'LENGTH_62_5UM': 0, 'OPTIONS': b'\x00\x12', 'LENGTH_OM3': 0, 'TRANSCEIVER': b'\x01\x00\x00\x04\x00\x04\x80\xd5'} DOM: {'TX_BIAS': 0.0, 'VCC': 0.0, 'RX_POWER': 0.0, 'TEMPERATURE': 0.0, 'TX_POWER': 0.0} writable keys, with before and after values (should match) SOFT_TX_DISABLE_SELECT: 0,0 @.:/oom3/test$ python3 oomtest.py 34 raw memory reads for port port1 34 raw memory reads for port port2 34 raw memory reads for port port3 34 raw memory reads for port port4 1 raw memory reads for port port5 1 raw memory reads for port port6 1 raw memory reads for port port7 1 raw memory reads for port port8 1 raw memory reads for port port9 34 raw memory reads for port port10 34 raw memory reads for port port11 34 raw memory reads for port port12 34 raw memory reads for port port13 1 raw memory reads for port port14 1 raw memory reads for port port15 1 raw memory reads for port port16 1 raw memory reads for port port17 1 raw memory reads for port port18 1 raw memory reads for port port19 1 raw memory reads for port port20 34 raw memory reads for port port21 34 raw memory reads for port port22 1 raw memory reads for port port23 1 raw memory reads for port port24 1 raw memory reads for port port25 1 raw memory reads for port port26 1 raw memory reads for port port27 1 raw memory reads for port port28 1 raw memory reads for port port29 1 raw memory reads for port port30 1 raw memory reads for port port31 1 raw memory reads for port port32 1 raw memory reads for port port33 1 raw memory reads for port port34 1 raw memory reads for port port35 1 raw memory reads for port port36 1 raw memory reads for port port37 1 raw memory reads for port port38 1 raw memory reads for port port39 1 raw memory reads for port port40 1 raw memory reads for port port41 1 raw memory reads for port port42 1 raw memory reads for port port43 1 raw memory reads for port port44 1 raw memory reads for port port45 1 raw memory reads for port port46 1 raw memory reads for port port47 1 raw memory reads for port port48 186 raw memory reads for port port49 186 raw memory reads for port port50 186 raw memory reads for port port51 186 raw memory reads for port port52 186 raw memory reads for port port53 186 raw memory reads for port port54 @.:/oom3/test$ python3 qtest.py 0xA0, page 0, offset 0, 128 bytes 0000x: 00000000 00000000 00000000 00000000 0010x: 00000000 00000000 00000000 00000000 0020x: 00000000 00000000 00000000 00000000 0030x: 00000000 00000000 00000000 00000000 0040x: 00000000 00000000 00000000 00000000 0050x: 00000000 00000000 00000000 00000000 0060x: 00000000 00000000 00000000 00000000 0070x: 00000000 00000000 00000000 00000000 0xA0, page 0, offset 128, 128 bytes 0080x: 00000000 00000000 00000000 00000000 0090x: 00000000 00000000 00000000 00000000 00a0x: 00000000 00000000 00000000 00000000 00b0x: 00000000 00000000 00000000 00000000 00c0x: 00000000 00000000 00000000 00000000 00d0x: 00000000 00000000 00000000 00000000 00e0x: 00000000 00000000 00000000 00000000 00f0x: 00000000 00000000 00000000 00000000 0 keys implemented functions, with their keys and values: writable keys, with before and after values (should match) @.:~/oom3/test$
Hello,
We are currently trying to use the results of the OOM project in a research project.
Python3 is absolutely necessary for this.
Is there any progress in Python3 or other useful additions for OOM.
Kind Regards and thx for the help,
Stefan
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub https://github.com/opencomputeproject/oom/issues/11#issuecomment-870380080 , or unsubscribe https://github.com/notifications/unsubscribe-auth/AD6VCJZF3Y2RTGFPUBFRVPDTVF6CTANCNFSM4INQOQEA .  https://github.com/notifications/beacon/AD6VCJ6SY4TIYCJZEGV6F23TVF6CTA5CNFSM4INQOQEKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOGPQPEMA.gif

@bacharya could you please share your python3 code. If you don't have enough time to finish the work, maybe someone else could do. I could try, I have some free time now.

@insekt Please check the pull request: https://github.com/opencomputeproject/oom/pull/23 with python3 changes.

@bacharya many thanks, I'll review it and test it on my pet-project.

Hello,
also from my side many thanks for the Python3 update!
I still have some general question, regarding the implementation.
We would like to use the OOM project on a Buildroot Linux (Linux 5.10.5 aarch64) in a distributed environment.
We have our own platform ("NUC" size carrier "SXoM CBS2 eNUC 1" with SMARC and FMC interfaces).
We use currently up to 20 of these systems with a SMARC  ARM A72 and a FMC Module with a TSN capable Marvell switch (88Q6113) in a mesh network. Our system (switch Module) uses a modified QSFP+ transceiver for the backbone connection, which we would like to monitor.  The QSFP+ is connected to the SMARC module via the i2c BUS. (i2cdetect and dump shows all information’s)
In the moment I still struggle a little bit with the understanding of the software architecture.
Kind Regards and thanks in advance for suggestions,
Stefan

Sorry for the delay responding, I’ve been offline for a couple of weeks…
The OOM architecture can be described in four layers:
The lowest layer is access via ic2 to the raw data of the device.  There is a linux driver, optoe, in the OOM github repo.  It is associated with the i2c device (provided by underlying i2c device tree drivers, which are responsible for handling i2c muxes and switch dependent paths from the CPU to the i2c device).  It provides a user space accessible file in /sys/bus/i2c/devices/-0050/eeprom.  (The public version of optoe may not build on linux versions later than 4.16.  I have a version that fixes that which I can make available and will put in the repo soon.  It was proposed for upstream inclusion but rejected because the netdev architects do not want to allow direct access to these devices.)  Alternatively, this raw access can be provided by i2c utilities (your i2cdetect  and dump for example).  Often these utilities are custom-built for the switch.
The next layer is called the shim in OOM.  Different shims are provided, or can be written, to call different lower level software.  If you use the optoe driver, the default shim (oomsysfsshim.py) will access the data in the /sys/bus/…/eeprom files.  Other shims access the raw data by calling the appropriate drivers or utilities and provide the OOM internal standard interfaces to the upper levels of OOM.
The bulk of the OOM code is system independent.  It takes requests from OOM applications, fetches the appropriate data from the device, and decodes it as appropriate for the type of data being accessed.  (It also encodes and writes data to the device as appropriate.)  It provides direct access to the raw data, but more usefully provides key:value access to the registers in the device.  There are tables describing the location and format of dozens to hundreds of registers in SFP, QSFP and CMIS (aka QSFP-DD) devices.  There are instructions on how to add additional registers to the decoding process.
The final layer is the application layer.  This is your code to access the data through OOM.  There are examples in the apps and demo directories in the OOM repo.
Let me know if you need more details.
Don
From: sto-zal @.***
Sent: Friday, July 16, 2021 2:52 AM
To: opencomputeproject/oom @.>
Cc: donboll @.>; Mention @.***>
Subject: Re: [opencomputeproject/oom] Add python 3 support (#11)
Hello,
also from my side many thanks for the Python3 update!
I still have some general question, regarding the implementation.
We would like to use the OOM project on a Buildroot Linux (Linux 5.10.5 aarch64) in a distributed environment.
We have our own platform ("NUC" size carrier "SXoM CBS2 eNUC 1" with SMARC and FMC interfaces).
We use currently up to 20 of these systems with a SMARC ARM A72 and a FMC Module with a TSN capable Marvell switch (88Q6113) in a mesh network. Our system (switch Module) uses a modified QSFP+ transceiver for the backbone connection, which we would like to monitor. The QSFP+ is connected to the SMARC module via the i2c BUS. (i2cdetect and dump shows all information’s)
In the moment I still struggle a little bit with the understanding of the software architecture.
Kind Regards and thanks in advance for suggestions,
Stefan
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub https://github.com/opencomputeproject/oom/issues/11#issuecomment-881323723 , or unsubscribe https://github.com/notifications/unsubscribe-auth/AD6VCJ32HGZRG56MWI6R53LTX76LJANCNFSM4INQOQEA .

Fixed with the Python 3 support merged into the github repo on August 12, 2021.


Documentation is hard to follow

Can you please share your source code for the excellent API story book? Just a snippet of the main part showing how you construct the grid, hook up callbacks, apply basic theming. There's a lot of great examples like "Add a column" with clean built-in support but I just can't seem to find your source code anywhere.

agreed, going through the storybook and seeing the examples, but not seeing how to achieve those results is annoying

alright I will try to break this out. It was my desire because I mean... I write a lot of these, but yall convinced me.

Being able to open each storybook example as a standalone CodeSandbox project would be great

The problem with that is the data source. I have built a very fast "fake" data source that my mock data source doesn't serve as a factor in the performance evaluation. It's just not a good example of how a real data source should be built. This is useful for me for testing, less useful for docs...

Okay the sources are now available. Not perfect but I consider this closed now. If you have other sugestions let me know in a new report.


Icons to Svg

The text one isn't supported by some devices and looks different on each browser. I have the svg version of the original settings icon.
Here is the current ones for me:
Chrome
Firefox
See, They're different.

I can recolor the image and use the css filter brightness() property to make it white.


feat: initial draft for help endpoint.

Description

Aimed at providing an overview of the help/{command} endpoint.
The parameters will be passed in the request body.
The hardcoded commands will be changed in a later stage to retrieve them from a GitHub repository, ensuring they don't become stale.
As we talked about earlier, I've made just one route which takes in a parameter. For instance, it doesn’t include something like: get('/help/generate').
The request body will be like: {   "command": "command1" } or {   "command": "command1 subcommand1" }
Could you please review it and provide any suggestions or changes?

hi @princerajpoot20, since you have another PR opened for the help endpoint, can you close this draft PR?


getting error signinRedirectCallback code flow

Hi Im getting the below error on signinRedirectCallback for code flow
message: " (401)"
stack: "Error:  (401)↵    at XMLHttpRequest.s.onload [as __zone_symbol__ON_PROPERTYload] (http://localhost:4200/vendor.js:209739:17867)↵    at XMLHttpRequest.wrapFn (http://localhost:4200/polyfills.j
the same code and configuration work for implicit flow (response_type is only change)
Thanks

resolved. issue on our end


Add missing tabularx package

Texts were misaligned because of missing tabularx import

@ygnr can you send a preview screenshot ?

thanks

Just noticed, thanks for merging (y)


[ci] Rename PLUGIN_SHARDING to PACKAGE_SHARDING.

Make this environment variable consistent with flutter/packages (in this PR)
Fixes https://github.com/flutter/flutter/issues/111126
Pre-launch Checklist

[x] I read the Contributor Guide and followed the process outlined there for submitting PRs.
[x] I read the Tree Hygiene wiki page, which explains my responsibilities.
[x] I read and followed the relevant style guides and ran the auto-formatter. (Unlike the flutter/flutter repo, the flutter/plugins repo does use dart format.)
[x] I signed the CLA.
[x] The title of the PR starts with the name of the plugin surrounded by square brackets, e.g. [shared_preferences]
[x] I listed at least one issue that this PR fixes in the description above.
[ ] I updated pubspec.yaml with an appropriate new version according to the pub versioning philosophy, or this PR is exempt from version changes.
[ ] I updated CHANGELOG.md to add a description of the change, following repository CHANGELOG style.
[x] I updated/added relevant documentation (doc comments with ///).
[ ] I added new tests to check the change I am making, or this PR is test-exempt.
[x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel on Discord.

test-exempt: configuration


Unable to initialize Connect Request using Sample Apps with Real Wallet Apps

Describe the bug
Whenever I use the deeplink option in a debug version of the wallet apps, I noticed that real wallet applications like MetaMask and Rainbow Wallet will get deeplinked into, but no actions will happen.  There will be no popups to ask me to authorize and essentially the flows die.
SDK Version
//Latest versions
const val BOM_VERSION = "1.2.0"
const val FOUNDATION_VERSION = "1.2.0"
const val CORE_VERSION = "1.7.0"
const val SIGN_VERSION = "2.5.0"
const val AUTH_VERSION = "1.5.0"
const val CHAT_VERSION = "1.0.0-alpha06"
const val WEB_3_WALLET = "1.0.0"
To Reproduce
Steps to reproduce the behavior:

I downloaded the WalletConnectKotlinV2 zip and extracted it, opening it in android studio.
I  updated the CoreClient.initialize to take in a projectId I registered with the website.
Then I installed both the sign.dapp and the sign.wallet sample apps.
I try deeplinking into WCWallet
Gives me an authorization bottom sheet, for which I can then authorize and will navigate back into the Dapp with the connected wallet
If I instead decide to deeplink into MetaMask or Rainbow, nothing happens

Expected behavior
Metamask or Rainbow should show a request for me to authorize, for which I can then navigate back to the app.
Screenshots
Device (please complete the following information):

Device: Pixel 4
OS: Android 13

Additional context
Add any other context about the problem here.

Hi @yipeiguan! Metamask and Rainbow do not currently support V2. Here's a list of compatible wallets: https://explorer.walletconnect.com/?version=2&page=1

Thanks for confirming @Elyniss.  Does that mean on March 1st, will dapps that use Wallet Connect V1 stop working?  Or will they continue to work?

We plan to turn off our V1 Relay Server, which means that any that uses it will stop working

I am facing issue right now also with etaMask and Rainbow. The code works perfectly with Trust Wallet. Anything to consider while deeplinking it into Metamask and Rainbow?


feat(rust): add formatter for rust

What is this PR for?
Adding formatter for rust, using rustfmt that comes with rust-analyzer installation.
Configuration requires manual installation of rust-analyzer anyway (or at least present in the PATH), so adding a formatter looks like a good idea.
Installing rust-analyzer comes with the rustfmt formatter anyway.
Does this PR fix an existing issue?
Missing formatter for rust
Checklist

[X] I've read the CONTRIBUTING guidelines.

Additional Comment
I'm open to feedback from the implementation. It's my first PR contribution to OSS, so pardon me for any errors I might make.
Thanks in advance

Doesn't the lsp rust-analyzer already do this?

Doesn't the lsp rust-analyzer already do this?

To my knowledge, no.
The rust-analyzer can pass (additional?) arguments to rustfmt, but it's still required as an external dependency and doesn't integrate with conform.nvim for formatting.

That's what I mean. There's no need for conform here.
rust-analyzer also includes a formatter = rustfmt.
Check with :LazyFormatInfo

Doesn't the lsp rust-analyzer already do this?

yep, this isn't needed imo (unless someone doesn't want to use the lsp, not sure why they wouldn't)

That's what I mean. There's no need for conform here. rust-analyzer also includes a formatter = rustfmt. Check with :LazyFormatInfo

Doesn't the lsp rust-analyzer already do this?

yep, this isn't needed imo (unless someone doesn't want to use the lsp, not sure why they wouldn't)

Got it, my bad. My config had overridden the format keybinding and didn't behave properly.
Closing the PR, as it's not needed


question

is ignorecooldown fully client side/visual or does it actually alter pvp in a cheat like way

also, a real issue i found was that the config resets every time i open my game

also, an issue i found is that editing the config in game then restarting the game resets the config. this doesnt occur when using the giz5.json file

Hi, thanks for opening issue!
IgnoreCooldown is fully client-sided and just removes cooldown animation from your main hand!
I fixed the issue where the config was not saved properly. Please download the 1.5.4 from here


MultiPoint scaling

In GeoJson.js, I'm pretty certain this code will not work on MultiPoints.
  var rescales = {

    Point: function (o, e, k) {
      e.setAttribute("transform", "translate(" + o.x + "," + o.y + ")" + k);
    },

    MultiPoint: function (o, e, k) {
      e.setAttribute("transform", "translate(" + o.x + "," + o.y + ")" + k);
    }

  };

It is invoked by:
k = "scale(" + Math.pow(2, tile.zoom - zoom) + ")";
i = -1;
n = (features = tile.features).length;
while (++i < n) rescale((feature = features[i]).data, feature.element, k);
tile.scale = zoom;

Ah, I see. projectPointsForMultiPoint pre-processes multipoints.


Suggestions

Suggestion
It would be great to have a syntax like sequelize model create that sets the fields and then add the row to the database.
Question
Are you planning to add more features like hooks?
Possible contribution
Also, I just made a method that erases the rows (with TRUNCATE) of all the tables created by models. As it's just a method I didn't bother to open a pull request and maybe there's a better approach to it like saving all created tables in the database object and obviously this command is different depending on the database. I also had to search on the folder because there may be other tables that were not created using the model, like nessie-migrations table.

import { walk } from 'https://deno.land/std/fs/mod.ts';
import db from '../../src/database/db.ts';

const modelsDir = './src/app/models';
const matchFilter: RegExp[] = [];
matchFilter.push(new RegExp('[:upper:]*[a-z].ts'));

/**
 * Clear all model tables from the database.
 * Uses the statement 'TRUNCATE <tablename>'
 */
export default async function truncateModels() {
  for await (const entry of walk(modelsDir, { match: matchFilter })) {
    const pathSplit = entry.path.split('/');
    const model = pathSplit[3].toLowerCase();
    const tableName = model.split('.')[0] + 's';
    await db.execute(`TRUNCATE ${tableName};`);
  }
}

Finally, thanks for the module! it's working great.

Hi Leonardo,
Thanks for your contribution! 😁
I just added a static method called insert to the Model class, which will create the model instance and save it to the database at the same time. Check out this commit.
I also have planned to add hooks feature on the Model class, but I don't know exactly when it will be available.
Finally, the feature that you're proposing is very helpful, thanks! 😁
However, I think it's better to have the truncate table feature as a static method of Model. Truncating a table is mostly used for testing. So, I think it's better to call this method directly from the model class itself.
Example:
class Model {
  // ...

  public static async truncate(): Promise<void> {
    await this.adapter.execute(`TRUNCATE ${this.tableName}`);
  }
}

So, the users can simply put this in their test case.
await User.truncate()

What do you think? 🤔

Insert is just what I wanted!
And you're right, I'm using truncate for testing. The truncate (or destroy like sequelize uses) inside the model is a good approach. However, it's still important to export a list of the models added using db.AddModel, so something like this is possible:
models = db.getAllModels();
models.forEach(model => {
  await model.truncate();
});

Thanks!

Totally agree!
Looking forward to reviewing your pull request! Let me know if you need anything from me.