mirror of
https://github.com/ARM-software/devlib.git
synced 2025-01-31 02:00:45 +00:00
Douglas RAILLARD
2650a534f3
exception: Fix DevlibError unpickling
Unpickling of BaseException is done by feeding self.args to the exception type. This self.args attribute is initialized in two places: in BaseException.__new__ (before __init__ is called) and in BaseException.__init__ as well. The following code ends up with self.args == ('hello',), instead of (1, 2): class MyExcep(BaseException): def __init__(self, foo, bar): print('before super().__init__()', self.args) super().__init__('hello') print('after super().__init__()', self.args) MyExcep(1, 2) # Prints: # before super().__init__() (1, 2) # after super().__init__() ('hello',) When unplickling such instance, ('hello',) will be fed to MyExcep.__init__(), which will fail with a TypeError since it requires 2 positional arguments. In order to fix that, super().__init__() needs to be handwritten instead of getting the one from BaseException: class MyBase(BaseException): def __init__(self, msg): self.msg = msg class MyExcep(MyBase): def __init__(self, foo, bar): print('before super().__init__()', self.args) super().__init__('hello') print('after super().__init__()', self.args) MyExcep(1, 2) # Prints: # before super().__init__() (1, 2) # after super().__init__() (1, 2) This will correctly initialize self.args == (1, 2), allowing unpickling to work.
devlib ====== ``devlib`` exposes an interface for interacting with and collecting measurements from a variety of devices (such as mobile phones, tablets and development boards) running a Linux-based operating system. Installation ------------ :: sudo -H pip install devlib Usage ----- Please refer to the "Overview" section of the `documentation <http://devlib.readthedocs.io/en/latest/>`_. License ------- This package is distributed under `Apache v2.0 License <http://www.apache.org/licenses/LICENSE-2.0>`_. Feedback, Contrubutions and Support ----------------------------------- - Please use the GitHub Issue Tracker associated with this repository for feedback. - ARM licensees may contact ARM directly via their partner managers. - We welcome code contributions via GitHub Pull requests. Please try to stick to the style in the rest of the code for your contributions.
Description
Languages
Python
96%
Shell
1.8%
C
1.4%
Java
0.5%
Dockerfile
0.3%