1>>> import uuid
2>>> import datetime
3>>> from _init_environment import MTurkConnection, mturk_host
4>>> from boto.mturk.question import Question, QuestionContent, AnswerSpecification, FreeTextAnswer
5
6>>> conn = MTurkConnection(host=mturk_host)
7
8# create content for a question
9>>> qn_content = QuestionContent()
10>>> qn_content.append_field('Title', 'Boto no hit type question content')
11>>> qn_content.append_field('Text', 'What is a boto no hit type?')
12
13# create the question specification
14>>> qn = Question(identifier=str(uuid.uuid4()),
15...               content=qn_content,
16...               answer_spec=AnswerSpecification(FreeTextAnswer()))
17
18# now, create the actual HIT for the question without using a HIT type
19# NOTE - the response_groups are specified to get back additional information for testing
20>>> keywords=['boto', 'test', 'doctest']
21>>> create_hit_rs = conn.create_hit(question=qn,
22...                                 lifetime=60*65,
23...                                 max_assignments=1,
24...                                 title='Boto Hit to be Reviewed',
25...                                 description='Boto reviewable_hits description',
26...                                 keywords=keywords,
27...                                 reward=0.23,
28...                                 duration=60*6,
29...                                 approval_delay=60*60,
30...                                 annotation='An annotation from boto create_hit test',
31...                                 response_groups=['Minimal',
32...                                                  'HITDetail',
33...                                                  'HITQuestion',
34...                                                  'HITAssignmentSummary',])
35
36# this is a valid request
37>>> create_hit_rs.status
38True
39
40>>> len(create_hit_rs)
411
42>>> hit = create_hit_rs[0]
43
44# for the requested hit type id
45# the HIT Type Id is a unicode string
46>>> hit_type_id = hit.HITTypeId
47>>> hit_type_id # doctest: +ELLIPSIS
48u'...'
49
50>>> from selenium_support import complete_hit, has_selenium
51>>> if has_selenium(): complete_hit(hit_type_id, response='reviewable_hits_test')
52>>> import time
53
54Give mechanical turk some time to process the hit
55>>> if has_selenium(): time.sleep(10)
56
57# should have some reviewable HIT's returned, especially if returning all HIT type's
58# NOTE: but only if your account has existing HIT's in the reviewable state
59>>> reviewable_rs = conn.get_reviewable_hits()
60
61# this is a valid request
62>>> reviewable_rs.status
63True
64
65>>> len(reviewable_rs) >= 1
66True
67
68# should contain at least one HIT object
69>>> reviewable_rs # doctest: +ELLIPSIS
70[<boto.mturk.connection.HIT instance at ...]
71
72>>> hit_id = reviewable_rs[0].HITId
73
74# check that we can retrieve the assignments for a HIT
75>>> assignments_rs = conn.get_assignments(hit_id)
76
77# this is a valid request
78>>> assignments_rs.status
79True
80
81>>> int(assignments_rs.NumResults) >= 1
82True
83
84>>> len(assignments_rs) == int(assignments_rs.NumResults)
85True
86
87>>> int(assignments_rs.PageNumber)
881
89
90>>> int(assignments_rs.TotalNumResults) >= 1
91True
92
93# should contain at least one Assignment object
94>>> assignments_rs # doctest: +ELLIPSIS
95[<boto.mturk.connection.Assignment instance at ...]
96
97# should have returned assignments for the requested HIT id
98>>> assignment = assignments_rs[0]
99
100>>> assignment.HITId == hit_id
101True
102
103# should have a valid status
104>>> assignment.AssignmentStatus in ['Submitted', 'Approved', 'Rejected']
105True
106
107# should have returned at least one answer
108>>> len(assignment.answers) > 0
109True
110
111# should contain at least one set of QuestionFormAnswer objects
112>>> assignment.answers # doctest: +ELLIPSIS
113[[<boto.mturk.connection.QuestionFormAnswer instance at ...]]
114
115>>> answer = assignment.answers[0][0]
116
117# the answer should have exactly one field
118>>> len(answer.fields)
1191
120
121>>> qid, text = answer.fields[0]
122
123>>> text # doctest: +ELLIPSIS
124u'...'
125
126# question identifier should be a unicode string
127>>> qid # doctest: +ELLIPSIS
128u'...'
129
130