quizApp.forms package

Submodules

quizApp.forms.activities module

Forms for the activities blueprint.

class quizApp.forms.activities.ActivityForm(*args, **kwargs)[source]

Bases: quizApp.forms.common.OrderFormMixin, wtforms_alchemy.ModelForm

Generalized class for creation/updating of Activities

class Meta

Bases: quizApp.forms.activities.Meta, wtforms_alchemy.Meta, wtforms.meta.DefaultMeta, object

ActivityForm.category = <UnboundField(StringField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Category', 'filters': [], 'validators': [<wtforms.validators.Optional object>, <wtforms.validators.Length object>]})>
ActivityForm.include_in_scorecards = <UnboundField(BooleanField, (), {'widget': None, 'description': '', 'default': True, 'label': u'Include this activity in any aggregate scorecards', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
ActivityForm.needs_comment = <UnboundField(BooleanField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Allow comments', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
ActivityForm.scorecard_settings = <UnboundField(ModelFormField, (<class 'quizApp.forms.common.ScorecardSettingsForm'>,), {})>
ActivityForm.submit = <UnboundField(SubmitField, ('Save',), {})>
class quizApp.forms.activities.ChoiceForm(*args, **kwargs)[source]

Bases: quizApp.forms.common.OrderFormMixin, wtforms_alchemy.ModelForm

Form for creating or updating choices.

class Meta

Bases: quizApp.forms.activities.Meta, wtforms_alchemy.Meta, wtforms.meta.DefaultMeta, object

ChoiceForm.choice = <UnboundField(StringField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Choice', 'filters': [], 'validators': [<wtforms.validators.Optional object>, <wtforms.validators.Length object>]})>
ChoiceForm.correct = <UnboundField(BooleanField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Correct', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
ChoiceForm.label = <UnboundField(StringField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Label', 'filters': [], 'validators': [<wtforms.validators.Optional object>, <wtforms.validators.Length object>]})>
ChoiceForm.points = <UnboundField(IntegerField, (), {'widget': None, 'description': '', 'default': 0, 'label': u'Point value of this choice', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
ChoiceForm.submit = <UnboundField(SubmitField, ('Save',), {})>
class quizApp.forms.activities.DatasetListForm(formdata=<class flask_wtf.form._Auto>, obj=None, prefix='', csrf_context=None, secret_key=None, csrf_enabled=None, *args, **kwargs)[source]

Bases: quizApp.forms.common.ListObjectForm

List a bunch of datasets.

get_choice_tuple(dataset)[source]
class quizApp.forms.activities.IntegerQuestionForm(*args, **kwargs)[source]

Bases: quizApp.forms.activities.ActivityForm

Create or update an IntegerQuestion.

class Meta

Bases: quizApp.forms.activities.Meta, wtforms_alchemy.Meta, wtforms_alchemy.Meta, wtforms.meta.DefaultMeta, object

IntegerQuestionForm.answer = <UnboundField(IntegerField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Correct answer', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
IntegerQuestionForm.explanation = <UnboundField(TextAreaField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Explanation', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
IntegerQuestionForm.lower_bound = <UnboundField(IntegerField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Lower bound', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
IntegerQuestionForm.num_media_items = <UnboundField(IntegerField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Number of media items to show', 'filters': [], 'validators': [<wtforms.validators.InputRequired object>]})>
IntegerQuestionForm.question = <UnboundField(TextAreaField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Question', 'filters': [], 'validators': [<wtforms.validators.InputRequired object>, <wtforms.validators.DataRequired object>]})>
IntegerQuestionForm.upper_bound = <UnboundField(IntegerField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Upper bound', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
class quizApp.forms.activities.QuestionForm(*args, **kwargs)[source]

Bases: quizApp.forms.activities.ActivityForm

Form that can be used for creating or updating questions.

class Meta

Bases: quizApp.forms.activities.Meta, wtforms_alchemy.Meta, wtforms_alchemy.Meta, wtforms.meta.DefaultMeta, object

QuestionForm.explanation = <UnboundField(TextAreaField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Explanation', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
QuestionForm.num_media_items = <UnboundField(IntegerField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Number of media items to show', 'filters': [], 'validators': [<wtforms.validators.InputRequired object>]})>
QuestionForm.question = <UnboundField(TextAreaField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Question', 'filters': [], 'validators': [<wtforms.validators.InputRequired object>, <wtforms.validators.DataRequired object>]})>
class quizApp.forms.activities.ScorecardForm(*args, **kwargs)[source]

Bases: quizApp.forms.activities.ActivityForm

Form that can be used for creating or updating scorecards.

class Meta

Bases: quizApp.forms.activities.Meta, wtforms_alchemy.Meta, wtforms_alchemy.Meta, wtforms.meta.DefaultMeta, object

ScorecardForm.prompt = <UnboundField(StringField, (), {'widget': None, 'description': '', 'default': u'', 'label': u'Comment prompt', 'filters': [], 'validators': [<wtforms.validators.Optional object>, <wtforms.validators.Length object>]})>
ScorecardForm.title = <UnboundField(StringField, (), {'widget': None, 'description': '', 'default': u'', 'label': u'Title', 'filters': [], 'validators': [<wtforms.validators.Optional object>, <wtforms.validators.Length object>]})>
quizApp.forms.activities.get_activity_form(activity, *args, **kwargs)[source]

Return the update form for the actiivty of the given type.

quizApp.forms.common module

Common forms or form elements live here.

class quizApp.forms.common.DeleteObjectForm(formdata=<class flask_wtf.form._Auto>, obj=None, prefix='', csrf_context=None, secret_key=None, csrf_enabled=None, *args, **kwargs)[source]

Bases: flask_wtf.form.Form

Display a button to delete some object.

submit = <UnboundField(SubmitField, ('Delete',), {})>
class quizApp.forms.common.ListObjectForm(formdata=<class flask_wtf.form._Auto>, obj=None, prefix='', csrf_context=None, secret_key=None, csrf_enabled=None, *args, **kwargs)[source]

Bases: flask_wtf.form.Form

A form that has a MultiCheckboxField of some objet.

get_choice_tuple(obj)[source]

Populate the list of choices with the appropriate tuple.

objects = <UnboundField(MultiCheckboxField, (), {'validators': [<wtforms.validators.DataRequired object>]})>
objects_mapping = {}
populate_objects(object_pool)[source]

Given a list of objects, populate the object field with choices.

reset_objects()[source]

Sometimes choices have to be reset.

submit = <UnboundField(SubmitField, ('Submit',), {})>
class quizApp.forms.common.MultiCheckboxField(label=None, validators=None, coerce=<type 'unicode'>, choices=None, **kwargs)[source]

Bases: wtforms.fields.core.SelectMultipleField

Like a SelectMultipleField, but use checkboxes instead,

option_widget = <wtforms.widgets.core.CheckboxInput object>
widget = <wtforms.widgets.core.ListWidget object>
class quizApp.forms.common.ObjectTypeForm(formdata=<class flask_wtf.form._Auto>, obj=None, prefix='', csrf_context=None, secret_key=None, csrf_enabled=None, *args, **kwargs)[source]

Bases: flask_wtf.form.Form

Select an object type from a drop down menu.

object_type = <UnboundField(SelectField, ('Type',), {})>
populate_object_type(mapping)[source]

Given a mapping of object types to human readable names, populate the object_type field.

submit = <UnboundField(SubmitField, ('Create',), {})>
class quizApp.forms.common.OrderFormMixin(*args, **kwargs)[source]

Bases: object

This mixin allows us to set the order of fields in a ModelForm.

To use, specify a Meta class in your form class and define order as an attribute in the Meta class.

Based on https://gist.github.com/rombr/89d4d9db0229237f40bbd46482764918/

order_fields(field_order)[source]

Given a field order, order the fields of this form as specified.

class quizApp.forms.common.ScorecardSettingsForm(*args, **kwargs)[source]

Bases: wtforms_alchemy.ModelForm

Form for rendering scorecard options.

class Meta

Bases: quizApp.forms.common.Meta, wtforms_alchemy.Meta, wtforms.meta.DefaultMeta, object

ScorecardSettingsForm.display_correctness = <UnboundField(BooleanField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Display correctness on scorecard', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
ScorecardSettingsForm.display_feedback = <UnboundField(BooleanField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Display feedback on scorecard', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
ScorecardSettingsForm.display_score = <UnboundField(BooleanField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Display points on scorecard', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
ScorecardSettingsForm.display_scorecard = <UnboundField(BooleanField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Display scorecards', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
ScorecardSettingsForm.display_time = <UnboundField(BooleanField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Display time on scorecard', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>

quizApp.forms.datasets module

Forms for dataset views.

class quizApp.forms.datasets.DatasetForm(*args, **kwargs)[source]

Bases: quizApp.forms.common.OrderFormMixin, wtforms_alchemy.ModelForm

Form for creation or update of a dataset.

class Meta

Bases: quizApp.forms.datasets.Meta, wtforms_alchemy.Meta, wtforms.meta.DefaultMeta, object

DatasetForm.info = <UnboundField(TextAreaField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Info', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
DatasetForm.name = <UnboundField(StringField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Name', 'filters': [], 'validators': [<wtforms.validators.InputRequired object>, <wtforms.validators.DataRequired object>, <wtforms.validators.Length object>]})>
DatasetForm.submit = <UnboundField(SubmitField, ('Save',), {})>
class quizApp.forms.datasets.GraphForm(*args, **kwargs)[source]

Bases: quizApp.forms.common.OrderFormMixin, wtforms_alchemy.ModelForm

Form for updating Graph objects.

class Meta

Bases: quizApp.forms.datasets.Meta, wtforms_alchemy.Meta, wtforms.meta.DefaultMeta, object

GraphForm.name = <UnboundField(StringField, (), {'widget': None, 'description': '', 'default': u'New media item', 'label': u'Name', 'filters': [], 'validators': [<wtforms.validators.Optional object>, <wtforms.validators.Length object>]})>
GraphForm.path = <UnboundField(UploadedFileField, ('Replace graph',), {'render_kw': {'accept': 'image/*'}})>
GraphForm.submit = <UnboundField(SubmitField, ('Save',), {})>
class quizApp.forms.datasets.TextForm(*args, **kwargs)[source]

Bases: quizApp.forms.common.OrderFormMixin, wtforms_alchemy.ModelForm

Form for updating Text objects.

class Meta

Bases: quizApp.forms.datasets.Meta, wtforms_alchemy.Meta, wtforms.meta.DefaultMeta, object

TextForm.name = <UnboundField(StringField, (), {'widget': None, 'description': '', 'default': u'New media item', 'label': u'Name', 'filters': [], 'validators': [<wtforms.validators.Optional object>, <wtforms.validators.Length object>]})>
TextForm.submit = <UnboundField(SubmitField, ('Save',), {})>
TextForm.text = <UnboundField(TextAreaField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Text', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
class quizApp.forms.datasets.UploadedFileField(label=None, validators=None, filters=(), description=u'', id=None, default=None, widget=None, render_kw=None, _form=None, _name=None, _prefix=u'', _translations=None, _meta=None)[source]

Bases: wtforms.fields.simple.FileField

This behaves just like FileField, however when populate_obj is called it will overwrite the file pointed to by obj.name with the uploaded file.

obj.directory must return the directory where the file is to be saved, if getattr(obj, name) does not exist.

populate_obj(obj, name)[source]

quizApp.forms.experiments module

Forms for the Experiments blueprint.

class quizApp.forms.experiments.ActivityAnswerForm(formdata=<class flask_wtf.form._Auto>, obj=None, prefix='', csrf_context=None, secret_key=None, csrf_enabled=None, *args, **kwargs)[source]

Bases: flask_wtf.form.Form

Form for rendering a general Activity. Mostly just for keeping track of render and submit time.

comment = <UnboundField(TextAreaField, (), {})>
populate_assignment(assignment)[source]

Populate the given assignment based on this form.

populate_from_activity(activity)[source]

Given an activity, populate defaults/validators/other things of that nature.

This should not stomp on form data. This is called before validation to ensure that user input meets validation requirements.

populate_from_assignment(assignment)[source]

Given an assignment, perform any processing necessary to display the activity - e.g. populate a list of choices, set field validators, etc.

This will call populate_from_result as well as populate_from_activity, so it will stomp on any form data in this form. This function is useful to call before rendering rather than before validation.

populate_from_result(result)[source]

Given a result object, populate this form as necessary.

This will only be called if there is a result object associated with an assignment.

render_time = <UnboundField(HiddenField, (), {})>
result

Create a Result object based on this form’s data.

The Result should be appropriate to the type of activity this form is dealing with.

submit = <UnboundField(SubmitField, ('Submit',), {})>
submit_time = <UnboundField(HiddenField, (), {})>
class quizApp.forms.experiments.ChoiceAnswerFormMixin[source]

Bases: object

Multiselect and singleselect questions both populate their choices in the same way, so this class serves as a base class to handle this.

populate_from_activity(question)[source]

Given a pool of choices, populate the choices field.

class quizApp.forms.experiments.CreateExperimentForm(*args, **kwargs)[source]

Bases: quizApp.forms.common.OrderFormMixin, wtforms_alchemy.ModelForm

Form for creating or updating an experiment’s properties.

class Meta

Bases: quizApp.forms.experiments.Meta, wtforms_alchemy.Meta, wtforms.meta.DefaultMeta, object

CreateExperimentForm.blurb = <UnboundField(TextAreaField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Blurb', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
CreateExperimentForm.disable_previous = <UnboundField(BooleanField, (), {'widget': None, 'description': '', 'default': None, 'label': u"Don't let participants go back after submitting an activity", 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
CreateExperimentForm.flash = <UnboundField(BooleanField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Flash MediaItems when displaying', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
CreateExperimentForm.flash_duration = <UnboundField(IntegerField, (), {'widget': None, 'description': '', 'default': 0, 'label': u'Flash duration (ms)', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
CreateExperimentForm.name = <UnboundField(StringField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Name', 'filters': [], 'validators': [<wtforms.validators.InputRequired object>, <wtforms.validators.DataRequired object>, <wtforms.validators.Length object>]})>
CreateExperimentForm.scorecard_settings = <UnboundField(ModelFormField, (<class 'quizApp.forms.common.ScorecardSettingsForm'>,), {})>
CreateExperimentForm.show_scores = <UnboundField(BooleanField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Show score tally during the experiment', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
CreateExperimentForm.show_timers = <UnboundField(BooleanField, (), {'widget': None, 'description': '', 'default': None, 'label': u'Show timers on activities', 'filters': [], 'validators': [<wtforms.validators.Optional object>]})>
CreateExperimentForm.start = <UnboundField(DateTimeField, (), {'widget': None, 'description': '', 'format': '%Y-%m-%d %H:%M:%S', 'default': None, 'label': u'Start', 'filters': [], 'validators': [<wtforms.validators.InputRequired object>]})>
CreateExperimentForm.stop = <UnboundField(DateTimeField, (), {'widget': None, 'description': '', 'format': '%Y-%m-%d %H:%M:%S', 'default': None, 'label': u'Stop', 'filters': [], 'validators': [<wtforms.validators.InputRequired object>]})>
CreateExperimentForm.submit = <UnboundField(SubmitField, ('Save',), {})>
CreateExperimentForm.validate()[source]

Validate the start and stop times, then do the rest as usual.

class quizApp.forms.experiments.FreeAnswerForm(formdata=<class flask_wtf.form._Auto>, obj=None, prefix='', csrf_context=None, secret_key=None, csrf_enabled=None, *args, **kwargs)[source]

Bases: quizApp.forms.experiments.ActivityAnswerForm

Form for rendering a free answer Question.

populate_from_activity(activity)[source]
populate_from_result(result)[source]
result
text = <UnboundField(TextAreaField, (), {})>
class quizApp.forms.experiments.IntegerAnswerForm(formdata=<class flask_wtf.form._Auto>, obj=None, prefix='', csrf_context=None, secret_key=None, csrf_enabled=None, *args, **kwargs)[source]

Bases: quizApp.forms.experiments.ActivityAnswerForm

Allow users to enter an integer as an answer.

integer = <UnboundField(IntegerField, (), {})>
populate_from_activity(activity)[source]
populate_from_result(result)[source]
result
class quizApp.forms.experiments.LikertField(label=None, validators=None, coerce=<type 'unicode'>, choices=None, **kwargs)[source]

Bases: wtforms.fields.core.RadioField

Field for displaying a Likert scale. The only difference from a RadioField is how its rendered, so this class is for rendering purposes.

class quizApp.forms.experiments.MultiSelectAnswerForm(formdata=<class flask_wtf.form._Auto>, obj=None, prefix='', csrf_context=None, secret_key=None, csrf_enabled=None, *args, **kwargs)[source]

Bases: quizApp.forms.experiments.ChoiceAnswerFormMixin, quizApp.forms.experiments.ActivityAnswerForm

Form for rendering a multiple choice question with check boxes.

choices = <UnboundField(MultiCheckboxField, (), {'validators': [<wtforms.validators.DataRequired object>], 'choices': []})>
populate_from_result(result)[source]
result
class quizApp.forms.experiments.MultipleChoiceAnswerForm(formdata=<class flask_wtf.form._Auto>, obj=None, prefix='', csrf_context=None, secret_key=None, csrf_enabled=None, *args, **kwargs)[source]

Bases: quizApp.forms.experiments.ChoiceAnswerFormMixin, quizApp.forms.experiments.ActivityAnswerForm

Form for rendering a multiple choice question with radio buttons.

choices = <UnboundField(RadioField, (), {'validators': [<wtforms.validators.DataRequired object>], 'choices': []})>
populate_from_result(result)[source]
result
class quizApp.forms.experiments.ScaleAnswerForm(formdata=<class flask_wtf.form._Auto>, obj=None, prefix='', csrf_context=None, secret_key=None, csrf_enabled=None, *args, **kwargs)[source]

Bases: quizApp.forms.experiments.MultipleChoiceAnswerForm

Form for rendering a likert scale question.

choices = <UnboundField(LikertField, (), {'validators': [<wtforms.validators.DataRequired object>]})>
populate_from_activity(activity)[source]
class quizApp.forms.experiments.ScorecardAnswerForm(formdata=<class flask_wtf.form._Auto>, obj=None, prefix='', csrf_context=None, secret_key=None, csrf_enabled=None, *args, **kwargs)[source]

Bases: quizApp.forms.experiments.ActivityAnswerForm

Form to render when rendering a scorecard.

populate_from_activity(activity)[source]
populate_from_result(result)[source]
result
quizApp.forms.experiments.get_answer_form(activity, data=None)[source]

Given an activity, return the proper form that should be displayed to the participant.

Module contents