Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a warning category and stacklevel to rerun warnings.warn calls (#…
…2985) Resolves: #2408 ### What: Stop overriding the global `warnings.formatwarning` Instead introduce a RerunWarning category and also set stacklevel appropriately for better warning context. Consider this example: ``` import warnings import rerun as rr warnings.warn("my warning") rr.log_points("foo", [1, 2, 3]) rr.init("foo") rr.log_points("foo", "not a point") ``` Before: wrongly annotated user-warning. No way to identify source of error. ``` WARNING:rerun:my warning WARNING:rerun:Rerun is disabled - log_points() call ignored. You must call rerun.init before using log APIs. WARNING:root:Ignoring rerun log call: Traceback (most recent call last): File "/home/jleibs/venv/lib/python3.10/site-packages/rerun_sdk/rerun/log/log_decorator.py", line 47, in wrapper return func(*args, **kwargs) File "/home/jleibs/venv/lib/python3.10/site-packages/rerun_sdk/rerun/log/points.py", line 228, in log_points positions = np.require(positions, dtype="float32") File "/home/jleibs/venv/lib/python3.10/site-packages/numpy/core/_asarray.py", line 110, in require return asanyarray(a, dtype=dtype) ValueError: could not convert string to float: 'not a point' ``` After: Consistent pythonic warnings and actionable line-numbers. ``` /home/jleibs/rerun/test.py:4: UserWarning: my warning warnings.warn("my warning") /home/jleibs/rerun/test.py:5: RerunWarning: Rerun is disabled - log_points() call ignored. You must call rerun.init before using log APIs. rr.log_points("foo", [1, 2, 3]) /home/jleibs/rerun/test.py:7: RerunWarning: Ignoring rerun log call: Traceback (most recent call last): File "/home/jleibs/rerun/rerun_py/rerun_sdk/rerun/log/log_decorator.py", line 51, in wrapper return func(*args, **kwargs) File "/home/jleibs/rerun/rerun_py/rerun_sdk/rerun/log/points.py", line 208, in log_points positions = np.require(positions, dtype="float32") File "/home/jleibs/rerun/venv/lib/python3.10/site-packages/numpy/core/_asarray.py", line 106, in require return asanyarray(a, dtype=dtype) ValueError: could not convert string to float: 'not a point' rr.log_points("foo", "not a point") ``` ### Checklist * [x] I have read and agree to [Contributor Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and the [Code of Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md) * [x] I've included a screenshot or gif (if applicable) * [x] I have tested [demo.rerun.io](https://demo.rerun.io/pr/2985) (if applicable) - [PR Build Summary](https://build.rerun.io/pr/2985) - [Docs preview](https://rerun.io/preview/pr%3Ajleibs%2Frerun_warnings/docs) - [Examples preview](https://rerun.io/preview/pr%3Ajleibs%2Frerun_warnings/examples)
- Loading branch information