feature_phone.views module

This module defines the application’s views, which are needed to render pages.

“Pages” are generated in TwiML (Twilio Markup Language) for Twilio to play desired audio.

See https://www.twilio.com/docs/api/twiml and https://twilio.github.io/twilio-python/6.5.0/twiml/

class feature_phone.views.CommentRatingInstructions(**kwargs)

Bases: feature_phone.views.PromptView

Explain the peer evaluation section, and select the suggestions to be presented.

accept_keypress = True
accept_speech = False
post(request)

Serve the Twilio client directions for collecting input.

prompts = ['comment-rating-instructions']
submit_view = 'feature-phone:prompt-comment'
timeout = 0
class feature_phone.views.PromptAgeView(**kwargs)

Bases: feature_phone.views.PromptView

Ask listeners for their age.

accept_keypress = False
accept_speech = True
prompts = ['age-prompt']
recording_callback = 'feature-phone:download-age'
submit_view = 'feature-phone:prompt-barangay'
class feature_phone.views.PromptBarangayView(**kwargs)

Bases: feature_phone.views.PromptView

Ask listeners for their barangay.

accept_keypress = False
accept_speech = True
prompts = ['barangay-prompt']
recording_callback = 'feature-phone:download-barangay'
submit_view = 'feature-phone:quantitative-question-instructions'
class feature_phone.views.PromptCommentView(**kwargs)

Bases: feature_phone.views.PromptView

Play back a suggestion to the listener.

accept_keypress = True
accept_speech = True
ask(request, action)
post(request)

Serve the Twilio client directions for collecting input.

recording_callback = 'feature-phone:download-recording'
recording_max_duration = 15
submit_view = 'feature-phone:save-comment-rating'
class feature_phone.views.PromptGenderView(**kwargs)

Bases: feature_phone.views.PromptView

Ask listeners for their gender.

accept_keypress = True
accept_speech = False
prompts = ['gender-prompt']
submit_view = 'feature-phone:save-gender'
class feature_phone.views.PromptIRBNoticeView(**kwargs)

Bases: feature_phone.views.PromptView

Present an IRB notice to listeners, and allow them to opt-out.

accept_keypress = True
accept_speech = False
post(request)

Serve the Twilio client directions for collecting input.

prompts = ['welcome', 'introduction', 'irb-notice', 'irb-notice-prompt']
submit_view = 'feature-phone:verify-irb-notice'
class feature_phone.views.PromptQuantitativeQuestionView(**kwargs)

Bases: feature_phone.views.PromptView

Ask a quantitative question.

accept_keypress = True
accept_speech = True
ask(request, action)
post(request)

Serve the Twilio client directions for collecting input.

recording_callback = 'feature-phone:download-recording'
recording_max_duration = 15
submit_view = 'feature-phone:save-quantitative-rating'
class feature_phone.views.PromptView(**kwargs)

Bases: django.views.generic.base.View

Present a question to the listener, and gather any desired inputs.

submit_view

str – The name of the view the Twilio client yields control to after this prompt. Any data recorded arrives as POST parameters Digits or RecordingUrl.

prompts

list – A list of keys of instructions to read.

accept_keypress

bool – A flag that determines whether this view should accept a single keypress as input.

timeout

float – The maximum amount of time in seconds the Twilio client will wait for without input from the listener before moving to submit_view.

accept_speech

bool – A flag that determines whether this view should accept spoken recordings as input.

play_beep

bool – A flag that determines whether the Twilio client should play a beep tone to signal the start of a recording period.

recording_max_duration

float – The maximum amount of time a recording may take.

recording_callback

str – The name of the view that will handle actions made after Twilio finalizes the recording.

Note

Keypresses made while a prompt plays will interrupt the playback, while speech will not. Only speech made after the prompt plays will be recorded.

accept_keypress = True
accept_speech = False
ask(request, action)
dispatch(*args, **kwargs)
fallback(voice_response)
http_method_names = ['post']
play_beep = True
post(request)

Serve the Twilio client directions for collecting input.

prompts = []
recording_callback = None
recording_max_duration = 60
submit_view = None
timeout = 4
class feature_phone.views.QualitativeQuestionInstructionsView(**kwargs)

Bases: feature_phone.views.PromptView

Read the qualitative question to the participant.

accept_keypress = True
accept_speech = True
prompts = ['qualitative-question-instructions']
recording_callback = 'feature-phone:download-recording'
submit_view = 'feature-phone:save-comment'
class feature_phone.views.QuantiativeQuestionInstructionsView(**kwargs)

Bases: feature_phone.views.PromptView

Explain the quantitative question section, and initialize session data.

accept_keypress = True
accept_speech = False
ask(request, action)
prompts = ['quantitative-question-instructions', 'quantitative-question-reminder']
submit_view = 'feature-phone:prompt-quantitative-question'
timeout = 0
class feature_phone.views.SaveCommentRatingView(**kwargs)

Bases: feature_phone.views.SaveView

Recording a rating of a suggestion.

next_view = 'feature-phone:prompt-comment'
post(request)

Handle incoming input.

save(request, voice_response)
class feature_phone.views.SaveCommentView(**kwargs)

Bases: feature_phone.views.SaveView

Handle responses to the participant’s comment.

next_view = 'feature-phone:end'
post(request)

Handle incoming input.

class feature_phone.views.SaveGenderView(**kwargs)

Bases: feature_phone.views.SaveView

Save responses to the gender question.

key_to_gender = {'1': 'M', '2': 'F'}
next_view = 'feature-phone:prompt-age'
save(request, voice_response)
class feature_phone.views.SaveQuantitativeRatingView(**kwargs)

Bases: feature_phone.views.SaveView

Record a rating to a quantitative question.

next_view = 'feature-phone:prompt-quantitative-question'
post(request)

Handle incoming input.

save(request, voice_response)
class feature_phone.views.SaveView(**kwargs)

Bases: django.views.generic.base.View

Process incoming data, then redirect the listener to another view.

dispatch(*args, **kwargs)
http_method_names = ['post']
next_view = None
post(request)

Handle incoming input.

save(request, voice_response)
class feature_phone.views.VerifyIRBNoticeView(**kwargs)

Bases: feature_phone.views.SaveView

Hang up if the listener does not accept the IRB, or continue otherwise.

accept_irb_key = '1'
next_view = 'feature-phone:prompt-gender'
post(request)

Handle incoming input.

feature_phone.views.download_age_recording(*args, **kwargs)

Download recordings of listeners stating their ages.

feature_phone.views.download_barangay_recording(*args, **kwargs)

Download recordings of listeners stating their barangays.

feature_phone.views.download_recording(*args, **kwargs)

Download a recording for a Response instance, which must have had its URL set.

feature_phone.views.end(*args, **kwargs)

Clean up local session data, thank the listener, and hang up.

feature_phone.views.error(*args, **kwargs)

Read an error message to a listener, and gracefully exit.

This should never happen. Uses a minimal Say verb to avoid points of failure.

feature_phone.views.fetch_question_pks(question_type, include_orphans=False)

Fetch all primary keys (in order) of a given question type.

Parameters:
  • question_type – A ContentType instance of the question model.
  • include_orphans (bool) – A flag that indicates whether the query should return feature phone-only questions.
feature_phone.views.fetch_recording(file_field, url)

Download a recording from the given URL as a file field value.

feature_phone.views.get_respondent(session, pk_key='respondent-pk')
feature_phone.views.make_response(respondent, prompt, related_object)

Make a feature phone response.

feature_phone.views.play_recording(action, recording)

Play a voice recording, either from a file or using speech synthesis.

Parameters:
  • action – A Twilio object that supports Say and Play verbs.
  • recording – A Recording instance.
feature_phone.views.select_comment_pks(num_to_select=2)

Select comments to play to a listener.

feature_phone.views.speak(action, instruction_keys, pause_duration=0)

Play a list of instructions.

Parameters:
  • action – A Twilio object that supports Say, Play, and Pause verbs.
  • instruction_keys (list) – A list of instruction keys.
  • pause_duration (float) – The delay between instructions in seconds.

Note

To minimize possibly unwanted latency, a pause does not follow the last instruction spoken.

feature_phone.views.transcribe_rating(response, text='')

Transcribe a keypress to its related web-facing model.