lsst.pex.config
14.0-4-gae1598d
python
lsst
pex
config
choiceField.py
Go to the documentation of this file.
1
#
2
# LSST Data Management System
3
# Copyright 2008, 2009, 2010 LSST Corporation.
4
#
5
# This product includes software developed by the
6
# LSST Project (http://www.lsst.org/).
7
#
8
# This program is free software: you can redistribute it and/or modify
9
# it under the terms of the GNU General Public License as published by
10
# the Free Software Foundation, either version 3 of the License, or
11
# (at your option) any later version.
12
#
13
# This program is distributed in the hope that it will be useful,
14
# but WITHOUT ANY WARRANTY; without even the implied warranty of
15
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
# GNU General Public License for more details.
17
#
18
# You should have received a copy of the LSST License Statement and
19
# the GNU General Public License along with this program. If not,
20
# see <http://www.lsstcorp.org/LegalNotices/>.
21
#
22
oldStringType = str
# Need to keep hold of original str type
23
from
builtins
import
str
24
25
from
.config
import
Field, _typeStr
26
from
.callStack
import
getStackFrame
27
28
__all__ = [
"ChoiceField"
]
29
30
31
class
ChoiceField
(
Field
):
32
"""
33
Defines a Config Field which allows only a set of values
34
All allowed must be of the same type.
35
Allowed values should be provided as a dict of value, doc string pairs
36
37
"""
38
def
__init__
(self, doc, dtype, allowed, default=None, optional=True):
39
self.
allowed
= dict(allowed)
40
if
optional
and
None
not
in
self.
allowed
:
41
self.
allowed
[
None
] =
"Field is optional"
42
43
if
len(self.
allowed
) == 0:
44
raise
ValueError(
"ChoiceFields must allow at least one choice"
)
45
46
# Use standard string type if we are given a future str
47
if
dtype == str:
48
dtype = oldStringType
49
50
Field.__init__(self, doc=doc, dtype=dtype, default=default,
51
check=
None
, optional=optional)
52
53
self.
__doc__
+=
"\n\nAllowed values:\n\n"
54
for
choice, choiceDoc
in
self.
allowed
.items():
55
if
choice
is
not
None
and
not
isinstance(choice, dtype):
56
raise
ValueError(
"ChoiceField's allowed choice %s is of incorrect type %s. Expected %s"
%
57
(choice, _typeStr(choice), _typeStr(dtype)))
58
self.
__doc__
+=
"%s\n %s\n"
% (
'``{0!r}``'
.
format
(str(choice)), choiceDoc)
59
60
self.
source
=
getStackFrame
()
61
62
def
_validateValue(self, value):
63
Field._validateValue(self, value)
64
if
value
not
in
self.
allowed
:
65
msg =
"Value {} is not allowed.\n"
\
66
"\tAllowed values: [{}]"
.
format
(value,
", "
.join(str(key)
for
key
in
self.
allowed
))
67
raise
ValueError(msg)
lsst.pex.config.choiceField.ChoiceField.source
source
Definition:
choiceField.py:60
lsst.pex.config.choiceField.ChoiceField.allowed
allowed
Definition:
choiceField.py:39
lsst.pex.config.config.Field
Definition:
config.py:153
lsst.pex.config.callStack.getStackFrame
def getStackFrame(relative=0)
Definition:
callStack.py:54
lsst.pex.config.choiceField.ChoiceField
Definition:
choiceField.py:31
lsst.pex.config.history.format
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition:
history.py:134
lsst.pex.config.config.Field.__doc__
__doc__
Definition:
config.py:195
lsst.pex.config.choiceField.ChoiceField.__init__
def __init__(self, doc, dtype, allowed, default=None, optional=True)
Definition:
choiceField.py:38
Generated on Fri Mar 16 2018 10:17:22 for lsst.pex.config by
1.8.13