-
-
Notifications
You must be signed in to change notification settings - Fork 3.8k
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.py
add a classMyValueGenerator
that derives fromvalue_generators_domain.BaseValueGenerator
. It should contain agenerate_value
function that takes thecustomization_args
provided 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.html
that 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-editor
html tag which you should use here. - Add a companion
MyValueGenerator.js
javascript file.
Have an idea for how to improve the wiki? Please help make our documentation better by following our instructions for contributing to the wiki.
Core documentation
Developing Oppia
- FAQs
- Installing Oppia
- Getting started with the codebase
- Making your first PR
- Learning resources for developers
- Codebase Overview
- Coding Guidelines
- Coding style guide
- Guidelines for creating new files
- How to add a new page
- How to write frontend type definitions
- How to write design docs
- Revert and Regression Policy
- Server errors and solutions
-
Debugging
- If your presubmit checks fail
- If CI checks fail on your PR
- Finding the commit that introduced a bug
- Interpreting GitHub Actions Results
- Debugging Docs
- Debugging datastore locally
- Debugging end-to-end tests
- Debugging backend tests
- Debugging frontend tests
- Debug frontend code
- Debugging custom ESLint check tests
- Debugging custom Pylint check tests
- Debugging Stories
- Guidelines for launching new features
- Guidelines for making an urgent fix (hotfix)
- Lint Checks
- Oppia's code owners and checks to be carried out by developers
- Privacy aware programming
- Backend Type Annotations
- Bytes and string handling in Python 3
- Guidelines for Developers with Write Access to oppia/oppia
- Testing
- Release Process
Developer Reference
- Oppiabot
- Frontend
- Backend
- Translations
- Webpack
- Third-party libraries
- Extension frameworks
- Oppia-ml Extension
- Mobile development
- Mobile device testing
- Performance testing
- Build process
- Team structure
- Triaging Process
- Playbooks
- Wiki
- Past Events