Creating value generators
Parameters that are included within an exploration (both at the exploration level and the interactive widget level) must each specify both a value generator and an object type. The object type specifies the type of the parameter, while the value generator is responsible (via its generate_value function) for providing an object of the given type when the widget runs. For example, it might simply return a copy of an object given to it (Copier), or it might randomly select an object from a given list (RandomSelector).
Let’s suppose you want to create a new value generator called MyValueGenerator (though in practice you should use a more descriptive name).
In
extensions/value_generators/models/generators.pyadd a classMyValueGeneratorthat derives fromvalue_generators_domain.BaseValueGenerator. It should contain agenerate_valuefunction that takes thecustomization_argsprovided by the widget for the parameter in question, and returns an object of the type the widget specifies for this parameter.In `extensions/value_generators/models/generators_test.py add tests for your class.
In
extensions/value_generators/templates/, add a filemy_value_generator.htmlthat will be used to display the form for editing parameters. The html from the relevant object’s template will have been automatically compiled into aobject-editorhtml tag which you should use here.Add a companion
MyValueGenerator.jsjavascript file.