4 def register_question(question_class):
5 QUESTION_CLASS[question_class.__name__] = question_class
8 class Question (object):
17 def __init__(self, id=None, prompt=None, answer=None, help=None,
25 if dependencies is None:
27 self.dependencies = dependencies
30 return '<{} id:{!r}>'.format(type(self).__name__, self.id)
33 return '<{} id:{!r} at {:#x}>'.format(
34 type(self).__name__, self.id, id(self))
36 def __getstate__(self):
37 return {attr: getattr(self, attr)
38 for attr in self._state_attributes}
40 def __setstate__(self, state):
42 state['id'] = state.get('prompt', None)
43 if 'dependencies' not in state:
44 state['dependencies'] = []
45 self.__dict__.update(state)
47 def check(self, answer):
48 return answer == self.answer
51 class NormalizedStringQuestion (Question):
52 def normalize(self, string):
53 return string.strip().lower()
55 def check(self, answer):
56 return self.normalize(answer) == self.normalize(self.answer)
59 for name,obj in list(locals().items()):
60 if name.startswith('_'):
63 subclass = issubclass(obj, Question)
64 except TypeError: # obj is not a class
67 register_question(obj)