we can pickle object
[tiramisu.git] / tiramisu / error.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2012-2013 Team tiramisu (see AUTHORS for all contributors)
3 #
4 # This program is free software: you can redistribute it and/or modify it
5 # under the terms of the GNU Lesser General Public License as published by the
6 # Free Software Foundation, either version 3 of the License, or (at your
7 # option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 # FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
12 # details.
13 #
14 # You should have received a copy of the GNU Lesser General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 # ____________________________________________________________
17 "user defined exceptions"
18
19
20 # Exceptions for an Option
21 class PropertiesOptionError(AttributeError):
22     "attempt to access to an option with a property that is not allowed"
23     def __init__(self, msg, proptype):
24         self.proptype = proptype
25         super(PropertiesOptionError, self).__init__(msg)
26
27
28 #____________________________________________________________
29 # Exceptions for a Config
30 class ConfigError(Exception):
31     """attempt to change an option's owner without a value
32     or in case of `_cfgimpl_descr` is None
33     or if a calculation cannot be carried out"""
34     pass
35
36
37 class ConflictError(Exception):
38     "duplicate options are present in a single config"
39     pass
40
41
42 #____________________________________________________________
43 #┬ámiscellaneous exceptions
44 class RequirementError(Exception):
45     """a recursive loop occurs in the requirements tree
46     requires
47     """
48     pass
49
50
51 class SlaveError(Exception):
52     "problem with a slave's value length"
53     pass
54
55
56 class ConstError(TypeError):
57     "no uniq value in _NameSpace"
58     pass
59
60
61 #Warning
62 class ValueWarning(UserWarning):
63     """Option could warn user and not raise ValueError.
64
65     Example:
66
67     >>> import warnings
68     >>> from tiramisu.error import ValueWarning
69     >>> from tiramisu.option import StrOption, OptionDescription
70     >>> from tiramisu.config import Config
71     >>> warnings.simplefilter("always", ValueWarning)
72     >>> def a(val):
73     ...  raise ValueError('pouet')
74     ...
75     >>> s=StrOption('s', '', validator=a, warnings_only=True)
76     >>> o=OptionDescription('o', '', [s])
77     >>> c=Config(o)
78     >>> c.s = 'val'
79     StrOption:0: ValueWarning: invalid value val for option s: pouet
80     >>> with warnings.catch_warnings(record=True) as w:
81     ...     c.s = 'val'
82     ...
83     >>> w[0].message.opt == s
84     True
85     >>> print str(w[0].message)
86     invalid value val for option s: pouet
87     """
88     def __init__(self, msg, opt):
89         self.opt = opt
90         super(ValueWarning, self).__init__(msg)