The organization of the classes is analog to the one of sheets.
X_Structure contains the to_str() method which writes the texts and answers of the Exercise to the output.
The instanciable Exercises should all be a copy of X_Model. They just need to reimplement __init__() (which first calls X_Structure.__init__() to set properly some fields) to define the Questions that will be embedded in the field questions_list.
Finally, each Exercise has also some global variables which should be defined. More details about them: (this should be checked again...)
AVAILABLE_X_KIND_VALUES will define which kinds (and subkinds) of Exercises are handled by this class. Extract from the code:
# Here the list of available values for the parameter x_kind='' and the # matching x_subkind values # Note : the bypass value allows to give the value of *x_subkind* directly to # the matching question Constructor, bypassing the action of the present class AVAILABLE_X_KIND_VALUES = \ {'short_test' : ['x_subkind1', 'x_subkind2'], 'preformatted' : [''], 'bypass' : [''] }
X_LAYOUT_UNIT: will define the unit used in X_LAYOUTS
X_LAYOUTS: will define the layout of the Questions inside the Exercise
The instructions for use are all written in X_Model.py
X_Structure in the doc
X_Model in the doc