Introduction

To install ssaw, simply run this command in your terminal:

$ pip install ssaw

The next step is to import the module and initialize connection with the server:

import ssaw

client = ssaw.Client('https://demo.mysurvey.solutions',
    token='your token goes here')

# see https://docs.mysurvey.solutions/headquarters/accounts/token-based-authentication/

Now we’re ready to interact with the Survey Solutions server.

Get list of questionnaires:

for q in ssaw.QuestionnairesApi(client).get_list():
    print(q.title)

Download latest export file in SPSS format:

from ssaw import ExportApi

# without export_path parameter file will be saved
# in the current working directory
filename = ExportApi(client).get(export_type="SPSS",
    questionnaire_identity="64136490cbc24a71a1df10f4b7115599$1")

Create new assignment:

from ssaw.models import Assignment
from ssaw import AssignmentsApi, QuestionnairesApi
from ssaw.models import InterviewAnswers

identifying_data = [
    {"Variable": "address", "Answer": "123 Main Street"},
    {"Variable": "name", "Answer": "Jane Doe"}
]
newobj = Assignment(
    responsible="inter1",
    questionnaire_id="",
    quantity=5,
    identifying_data=identifying_data)

res = AssignmentsApi(client).create(newobj)
print(res.id)

# More advanced example with data-preloading
q_doc = QuestionnairesApi(client).document(
    id="00000000-0000-0000-0000-000000000000", version=1)

d = InterviewAnswers(q_doc)
d.set_answer(variable="address", answer="123 Main Street")
d.set_answer(variable="name", answer="Jane Doe")
# question in the first-level roster
d.set_answer(variable="member_name", answer="Jane", roster_vector=0)
# second-level roster
d.set_answer(variable="pet", answer="Cat", roster_vector=[0, 0])

newobj = Assignment(
    responsible="inter1",
    questionnaire_id="",
    quantity=5,
    identifying_data=d.dict())

res = AssignmentsApi(client).create(newobj)

Get list of interviews that were updated during last 15 minutes (using GraphQL):

import datetime
from ssaw import InterviewApi

timestamp = datetime.datetime.now() - datetime.timedelta(minutes=15)
for i in InterviewsApi(client).get_list(update_date_gt=timestamp):
    print(i)

Get list of map files linked to the interviewer and remove the links:

from ssaw import MapsApi

for m in MapsApi(client).get_list(filter_user="inter"):
    print(m.file_name)
    MapsApi(client).delete_user(file_name=m.file_name,
        user_name="inter")

Work with worspaces:

from ssaw import WorkspacesApi

# we need to execute workspace commands
# with administrator credentials
admin_s = ssaw.Client('https://demo.mysurvey.solutions',
    'admin_user', 'admin_password')

_ = WorkspacesApi(admin_s).create('new', 'this is a new workspace')
for w in WorkspacesApi(admin_s).get_list():
    print(w)

if WorkspacesApi(admin_s).disable('old'):
    print('The old workspace has been disabled')
    print('and is no longer accessible')