"""NGPVAN Survey Questions Endpoints"""
from parsons.etl.table import Table
import logging
logger = logging.getLogger(__name__)
[docs]class SurveyQuestions(object):
def __init__(self, van_connection):
self.connection = van_connection
[docs] def get_survey_questions(self, statuses=['Active'], name=None, sq_type=None, question=None,
cycle=None):
"""
Get survey questions.
`Args:`
statuses: list
Filter to a list of statuses of survey questions. One or more of ``Active``,
``Archived``, and ``Inactive``.
name: str
Filter to survey questions with names begin with the input.
type: str
Filter to survey questions of a given type.
question: str
Filter to survey questions with script questions that contain the given input.
cycle: str
Filter to survey suestions with the given cycle. A year in the format "YYYY".
`Returns:`
Parsons Table
See :ref:`parsons-table` for output options.
"""
params = {'statuses': statuses,
'$top': self.page_size,
'name': name,
'type': sq_type,
'question': question,
'cycle': cycle}
tbl = Table(self.connection.get_request('surveyQuestions', params=params))
logger.info(f'Found {tbl.num_rows} survey questions.')
return tbl
[docs] def get_survey_question(self, survey_question_id):
"""
Get a survey question.
`Args:`
survey_question_id: int
The survey question id.
`Returns:`
Parsons Table
See :ref:`parsons-table` for output options.
"""
r = self.connection.get_request(f'surveyQuestions/{survey_question_id}')
logger.info(f'Found survey question {survey_question_id}.')
return r
[docs] def apply_survey_response(self, id, survey_question_id, survey_response_id,
id_type='vanid', result_code_id=None, contact_type_id=None,
input_type_id=None, date_canvassed=None):
"""
Apply a single survey response to a person.
`Args:`
id: str
A valid person id
survey_question_id: int
A valid survey question id
survey_response_id: int
A valid survey response id
id_type: str
A known person identifier type available on this VAN instance
such as ``dwid``
result_code_id : int
`Optional`; Specifies the result code of the response. If
not included,responses must be specified. Conversely, if
responses are specified, result_code_id must be null. Valid ids
can be found by using the :meth:`get_canvass_responses_result_codes`
contact_type_id : int
`Optional`; A valid contact type id
input_type_id : int
`Optional`; Defaults to 11 (API Input)
date_canvassed : str
`Optional`; ISO 8601 formatted date. Defaults to todays date
"""
response = {"surveyQuestionId": survey_question_id,
"surveyResponseId": survey_response_id,
"type": "surveyResponse"}
logger.info(f'Applying survey question {survey_question_id} to {id_type} {id}')
self.apply_response(id, response, id_type, result_code_id=result_code_id,
contact_type_id=contact_type_id, input_type_id=input_type_id,
date_canvassed=date_canvassed)