17
17
# along with Checkbox. If not, see <http://www.gnu.org/licenses/>.
19
19
from checkbox.attribute import Attribute
20
from checkbox.variables import (BoolVariable, StringVariable,
21
PathVariable, IntVariable, FloatVariable, ListVariable,
22
VariableFactory, Variable, get_variable)
20
from checkbox.variables import (ConstantVariable, BoolVariable, StringVariable,
21
PathVariable, UnicodeVariable, IntVariable, FloatVariable, ListVariable,
22
TupleVariable, AnyVariable, DictVariable, MapVariable, VariableFactory,
23
Variable, get_variable)
25
26
class Property(object):
89
93
super(PropertyType, self).__init__(self.variable_class, kwargs)
96
class PropertyFactory(PropertyType):
98
def __init__(self, type=None, **kwargs):
99
if "default" in kwargs:
100
raise ValueError("'default' not allowed for factories. "
101
"Use 'default_factory' instead.")
104
kwargs["item_factory"] = VariableFactory(type._variable_class,
105
**type._variable_kwargs)
106
super(PropertyFactory, self).__init__(**kwargs)
109
class Constant(PropertyFactory):
111
variable_class = ConstantVariable
92
114
class Bool(PropertyType):
94
116
variable_class = BoolVariable
114
141
variable_class = FloatVariable
117
class List(PropertyType):
144
class List(PropertyFactory):
119
146
variable_class = ListVariable
121
def __init__(self, **kwargs):
122
if "default" in kwargs:
123
raise ValueError("'default' not allowed for List. "
124
"Use 'default_factory' instead.")
125
type = kwargs.pop("type", None)
128
kwargs["item_factory"] = VariableFactory(type._variable_class,
129
**type._variable_kwargs)
130
super(List, self).__init__(**kwargs)
148
def __init__(self, *args, **kwargs):
149
kwargs["separator"] = kwargs.pop("separator", r"\s")
150
super(List, self).__init__(*args, **kwargs)
153
class Tuple(PropertyFactory):
155
variable_class = TupleVariable
158
class Any(PropertyType):
160
variable_class = AnyVariable
162
def __init__(self, schemas=[], **kwargs):
163
kwargs["schemas"] = [VariableFactory(schema._variable_class,
164
**schema._variable_kwargs) for schema in schemas]
165
self.schemas = schemas
166
super(Any, self).__init__(**kwargs)
169
class Dict(PropertyType):
171
variable_class = DictVariable
173
def __init__(self, key, value, **kwargs):
174
kwargs["key_schema"] = VariableFactory(key._variable_class,
175
**key._variable_kwargs)
176
kwargs["value_schema"] = VariableFactory(value._variable_class,
177
**value._variable_kwargs)
178
super(Dict, self).__init__(**kwargs)
181
class Map(PropertyType):
183
variable_class = MapVariable
185
def __init__(self, schema={}, **kwargs):
186
for key, type in schema.items():
187
schema[key] = VariableFactory(type._variable_class,
188
**type._variable_kwargs)
190
kwargs["schema"] = schema
191
super(Map, self).__init__(**kwargs)
196
def __init__(self, type, schema={}, **kwargs):
198
schema["type"] = Constant(default_factory=lambda: type, type=String())
199
super(Message, self).__init__(schema, **kwargs)