-class InList (list):
- """:class:`Request` validator class.
-
- Examples
- --------
-
- >>> i = InList(['abc', 'def', 5, True])
- >>> i('abc')
- >>> i(5)
- >>> i(False)
- Traceback (most recent call last):
- ...
- ValueError: False
- """
- def __init__(self, *args, **kwargs):
- list.__init__(self, *args, **kwargs)
-
- def __call__(self, value):
- """Raises ValueError if a given `value` is not in our internal
- list.
- """
- if value not in self:
- raise ValueError(value)
-
-class Interaction (object):
- """Mid-command inter-process interaction.
-
- Stores :attr:`type`, a string representing the interaction type
- ('boolean', 'string', ...).
- """
- def __init__(self, type):
- self.type = type
-
-class Request (Interaction):
- """Command engine requests for information from the UI.
- """
- def __init__(self, type, response_class,
- msg, default=None, validator=None):
- super(Request, self).__init__(type)
- self.response_class = response_class
- self.msg = msg
- self.default = default
- self.validator = validator
-
- def response(self, value):
- if self.validator != None:
- self.validator(value)
- return self.response_class(value)
-
-class Response (Interaction):
- """UI response to a :class:`Request`.
- """
- def __init__(self, type, value):
- super(Response, self).__init__(type)
- self.value = value
-
-class BooleanRequest (Request):
- def __init__(self, msg, default=None):
- super(BooleanRequest, self).__init__(
- 'boolean', BooleanResponse, msg, default,
- validator = InList([True, False, default]))
-
-class BooleanResponse (Response):
- def __init__(self, value):
- super(BooleanResponse, self).__init__('boolean', value)
-
-class StringRequest (Request):
- def __init__(self, msg, default=None):
- super(StringRequest, self).__init__(
- 'string', StringResponse, msg, default)
-
-class StringResponse (Response):
- def __init__(self, value):
- super(StringResponse, self).__init__('string', value)
-
-class FloatRequest (Request):
- def __init__(self, msg, default=None):
- super(FloatRequest, self).__init__(
- 'float', FloatResponse, msg, default)
-
-class FloatResponse (Response):
- def __init__(self, value):
- super(FloatResponse, self).__init__('float', value)
-
-class SelectionRequest (Request):
- def __init__(self, msg, default=None, options=[]):
- super(SelectionRequest, self).__init__(
- 'selection', SelectionResponse, msg, default)
- self.options = options
-
-class SelectionResponse (Response):
- def __init__(self, value):
- super(SelectionResponse, self).__init__('selection', value)
-