lsst.pex.exceptions
gdaeeff99f8+a38ce5ea23
Loading...
Searching...
No Matches
python
lsst
pex
exceptions
wrappers.py
Go to the documentation of this file.
1
# This file is part of pex_exceptions.
2
#
3
# Developed for the LSST Data Management System.
4
# This product includes software developed by the LSST Project
5
# (https://www.lsst.org).
6
# See the COPYRIGHT file at the top-level directory of this distribution
7
# for details of code ownership.
8
#
9
# This program is free software: you can redistribute it and/or modify
10
# it under the terms of the GNU General Public License as published by
11
# the Free Software Foundation, either version 3 of the License, or
12
# (at your option) any later version.
13
#
14
# This program is distributed in the hope that it will be useful,
15
# but WITHOUT ANY WARRANTY; without even the implied warranty of
16
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
# GNU General Public License for more details.
18
#
19
# You should have received a copy of the GNU General Public License
20
# along with this program. If not, see <https://www.gnu.org/licenses/>.
21
22
__all__ = [
"register"
,
"ExceptionMeta"
,
"Exception"
,
"LogicError"
,
23
"DomainError"
,
"InvalidParameterError"
,
"LengthError"
,
24
"OutOfRangeError"
,
"RuntimeError"
,
"RangeError"
,
"OverflowError"
,
25
"UnderflowError"
,
"NotFoundError"
,
"IoError"
,
"TypeError"
,
26
"translate"
,
"declare"
]
27
28
import
warnings
29
import
builtins
30
31
from
.
import
exceptions
32
33
registry = {}
34
35
36
def
register
(cls):
37
"""A Python decorator that adds a Python exception wrapper to the registry that maps C++ Exceptions
38
to their Python wrapper classes.
39
"""
40
registry[cls.WrappedClass] = cls
41
return
cls
42
43
44
class
ExceptionMeta
(type):
45
"""A metaclass for custom exception wrappers, which adds lookup of class attributes
46
by delegating to the Swig-generated wrapper.
47
"""
48
49
def
__getattr__
(cls, name):
50
return
getattr(cls.
WrappedClass
, name)
51
52
53
@register
54
class
Exception
(builtins.Exception, metaclass=ExceptionMeta):
55
"""The base class for Python-wrapped LSST C++ exceptions.
56
"""
57
58
# wrappers.py is an implementation detail, not a public namespace, so we pretend this is defined
59
# in the package for pretty-printing purposes
60
__module__ =
"lsst.pex.exceptions"
61
62
WrappedClass =
exceptions.Exception
63
64
def
__init__
(self, arg, *args, **kwds):
65
if
isinstance(arg,
exceptions.Exception
):
66
cpp = arg
67
message = cpp.what()
68
else
:
69
message = arg
70
cpp = self.
WrappedClass
WrappedClass
(message, *args, **kwds)
71
super(Exception, self).
__init__
(message)
72
self.
cpp
= cpp
73
74
def
__getattr__
(self, name):
75
return
getattr(self.
cpp
, name)
76
77
def
__repr__
(self):
78
return
"%s('%s')"
% (type(self).__name__, self.
cpp
.what())
79
80
def
__str__
(self):
81
return
self.
cpp
.asString()
82
83
84
@register
85
class
LogicError
(
Exception
):
86
WrappedClass =
exceptions.LogicError
87
88
89
@register
90
class
DomainError
(
LogicError
):
91
WrappedClass =
exceptions.DomainError
92
93
94
@register
95
class
InvalidParameterError
(
LogicError
):
96
WrappedClass =
exceptions.InvalidParameterError
97
98
99
@register
100
class
LengthError
(
LogicError
):
101
WrappedClass =
exceptions.LengthError
102
103
104
@register
105
class
OutOfRangeError
(
LogicError
):
106
WrappedClass =
exceptions.OutOfRangeError
107
108
109
@register
110
class
RuntimeError
(
Exception
, builtins.RuntimeError):
111
WrappedClass =
exceptions.RuntimeError
112
113
114
@register
115
class
RangeError
(
RuntimeError
):
116
WrappedClass =
exceptions.RangeError
117
118
119
@register
120
class
OverflowError
(
RuntimeError
, builtins.OverflowError):
121
WrappedClass =
exceptions.OverflowError
122
123
124
@register
125
class
UnderflowError
(
RuntimeError
, builtins.ArithmeticError):
126
WrappedClass =
exceptions.UnderflowError
127
128
129
@register
130
class
NotFoundError
(
Exception
, builtins.LookupError):
131
WrappedClass =
exceptions.NotFoundError
132
133
134
@register
135
class
IoError
(
RuntimeError
, builtins.IOError):
136
WrappedClass =
exceptions.IoError
137
138
139
@register
140
class
TypeError
(
LogicError
, builtins.TypeError):
141
WrappedClass =
exceptions.TypeError
142
143
144
def
translate
(cpp):
145
"""Translate a C++ Exception instance to Python and return it."""
146
PyType = registry.get(type(cpp),
None
)
147
if
PyType
is
None
:
148
warnings.warn(
"Could not find appropriate Python type for C++ Exception"
)
149
PyType = Exception
150
return
PyType(cpp)
151
152
153
def
declare
(module, exception_name, base, wrapped_class):
154
"""Declare a new exception."""
155
setattr(module, exception_name,
register
(
ExceptionMeta
(exception_name, (base, ),
156
dict(WrappedClass=wrapped_class))))
lsst::pex::exceptions::DomainError
Reports arguments outside the domain of an operation.
Definition
Runtime.h:57
lsst::pex::exceptions::Exception
Provides consistent interface for LSST exceptions.
Definition
Exception.h:107
lsst::pex::exceptions::InvalidParameterError
Reports invalid arguments.
Definition
Runtime.h:66
lsst::pex::exceptions::IoError
Reports errors in external input/output operations.
Definition
Runtime.h:160
lsst::pex::exceptions::LengthError
Reports attempts to exceed implementation-defined length limits for some classes.
Definition
Runtime.h:76
lsst::pex::exceptions::LogicError
Reports errors in the logical structure of the program.
Definition
Runtime.h:46
lsst::pex::exceptions::NotFoundError
Reports attempts to access elements using an invalid key.
Definition
Runtime.h:151
lsst::pex::exceptions::OutOfRangeError
Reports attempts to access elements outside a valid range of indices.
Definition
Runtime.h:89
lsst::pex::exceptions::OverflowError
Reports when the result of an arithmetic operation is too large for the destination type.
Definition
Runtime.h:124
lsst::pex::exceptions::RangeError
Reports when the result of an operation cannot be represented by the destination type.
Definition
Runtime.h:115
lsst::pex::exceptions::RuntimeError
Reports errors that are due to events beyond the control of the program.
Definition
Runtime.h:104
lsst::pex::exceptions::TypeError
Reports errors from accepting an object of an unexpected or inappropriate type.
Definition
Runtime.h:167
lsst::pex::exceptions::UnderflowError
Reports when the result of an arithmetic operation is too small for the destination type.
Definition
Runtime.h:133
lsst::pex::exceptions.wrappers.DomainError
Definition
wrappers.py:90
lsst::pex::exceptions.wrappers.Exception
Definition
wrappers.py:54
lsst::pex::exceptions.wrappers.Exception.__repr__
__repr__(self)
Definition
wrappers.py:77
lsst::pex::exceptions.wrappers.Exception.__str__
__str__(self)
Definition
wrappers.py:80
lsst::pex::exceptions.wrappers.Exception.__getattr__
__getattr__(self, name)
Definition
wrappers.py:74
lsst::pex::exceptions.wrappers.Exception.cpp
cpp
Definition
wrappers.py:72
lsst::pex::exceptions.wrappers.Exception.__init__
__init__(self, arg, *args, **kwds)
Definition
wrappers.py:64
lsst::pex::exceptions.wrappers.Exception.WrappedClass
WrappedClass
Definition
wrappers.py:62
lsst::pex::exceptions.wrappers.ExceptionMeta
Definition
wrappers.py:44
lsst::pex::exceptions.wrappers.ExceptionMeta.__getattr__
__getattr__(cls, name)
Definition
wrappers.py:49
lsst::pex::exceptions.wrappers.ExceptionMeta.WrappedClass
WrappedClass
Definition
wrappers.py:50
lsst::pex::exceptions.wrappers.InvalidParameterError
Definition
wrappers.py:95
lsst::pex::exceptions.wrappers.IoError
Definition
wrappers.py:135
lsst::pex::exceptions.wrappers.LengthError
Definition
wrappers.py:100
lsst::pex::exceptions.wrappers.LogicError
Definition
wrappers.py:85
lsst::pex::exceptions.wrappers.NotFoundError
Definition
wrappers.py:130
lsst::pex::exceptions.wrappers.OutOfRangeError
Definition
wrappers.py:105
lsst::pex::exceptions.wrappers.OverflowError
Definition
wrappers.py:120
lsst::pex::exceptions.wrappers.RangeError
Definition
wrappers.py:115
lsst::pex::exceptions.wrappers.RuntimeError
Definition
wrappers.py:110
lsst::pex::exceptions.wrappers.TypeError
Definition
wrappers.py:140
lsst::pex::exceptions.wrappers.UnderflowError
Definition
wrappers.py:125
lsst::pex::exceptions.wrappers.translate
translate(cpp)
Definition
wrappers.py:144
lsst::pex::exceptions.wrappers.declare
declare(module, exception_name, base, wrapped_class)
Definition
wrappers.py:153
lsst::pex::exceptions.wrappers.register
register(cls)
Definition
wrappers.py:36
Generated on Sat Apr 6 2024 10:44:15 for lsst.pex.exceptions by
1.10.0