Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Unified Diff: third_party/boto/bin/mturk

Issue 698893003: Update checked in version of gsutil to version 4.6 (Closed) Base URL: http://dart.googlecode.com/svn/third_party/gsutil/
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/boto/bin/lss3 ('k') | third_party/boto/bin/route53 » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/boto/bin/mturk
===================================================================
--- third_party/boto/bin/mturk (revision 33376)
+++ third_party/boto/bin/mturk (working copy)
@@ -1,5 +1,5 @@
#!/usr/bin/env python
-# Copyright 2012 Kodi Arfer
+# Copyright 2012, 2014 Kodi Arfer
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the
@@ -40,6 +40,8 @@
nicknames = {}
nickname_pool = set(string.ascii_lowercase)
+get_assignments_page_size = 100
+
time_units = dict(
s = 1,
min = 60,
@@ -281,10 +283,20 @@
nicknames = {k: v for k, v in nicknames.items() if v != hit}
def list_assignments(hit, only_reviewable = False):
- assignments = map(digest_assignment, con.get_assignments(
- hit_id = hit,
- page_size = 100,
- status = 'Submitted' if only_reviewable else None))
+ # Accumulate all relevant assignments, one page of results at
+ # a time.
+ assignments = []
+ page = 1
+ while True:
+ rs = con.get_assignments(
+ hit_id = hit,
+ page_size = get_assignments_page_size,
+ page_number = page,
+ status = 'Submitted' if only_reviewable else None)
+ assignments += map(digest_assignment, rs)
+ if len(assignments) >= int(rs.TotalNumResults):
+ break
+ page += 1
if interactive:
print json.dumps(assignments, sort_keys = True, indent = 4)
print ' '.join([a['AssignmentId'] for a in assignments])
@@ -315,6 +327,16 @@
def notify_workers(subject, text, workers):
con.notify_workers(workers, subject, text)
+def give_qualification(qualification, workers, value = 1, notify = True):
+ for w in workers:
+ con.assign_qualification(qualification, w, value, notify)
+ if interactive: print 'Gave to', w
+
+def revoke_qualification(qualification, workers, message = None):
+ for w in workers:
+ con.revoke_qualification(w, qualification, message)
+ if interactive: print 'Revoked from', w
+
# --------------------------------------------------
# Mainline code
# --------------------------------------------------
@@ -332,10 +354,10 @@
sub = subs.add_parser('hit',
help = 'get information about a HIT')
- sub.add_argument('hit',
+ sub.add_argument('HIT',
help = 'nickname or ID of the HIT to show')
sub.set_defaults(f = show_hit, a = lambda:
- [get_hitid(args.hit)])
+ [get_hitid(args.HIT)])
sub = subs.add_parser('hits',
help = 'list all your HITs')
@@ -345,7 +367,7 @@
help = 'create a new HIT (external questions only)',
epilog = example_config_file,
formatter_class = argparse.RawDescriptionHelpFormatter)
- sub.add_argument('json_path',
+ sub.add_argument('JSON_PATH',
help = 'path to JSON configuration file for the HIT')
sub.add_argument('-u', '--question-url', dest = 'question_url',
metavar = 'URL',
@@ -357,13 +379,13 @@
type = float, metavar = 'PRICE',
help = 'reward amount, in USD')
sub.set_defaults(f = make_hit, a = lambda: dict(
- unjson(args.json_path).items() + [(k, getattr(args, k))
+ unjson(args.JSON_PATH).items() + [(k, getattr(args, k))
for k in ('question_url', 'assignments', 'reward')
if getattr(args, k) is not None]))
sub = subs.add_parser('extend',
help = 'add assignments or time to a HIT')
- sub.add_argument('hit',
+ sub.add_argument('HIT',
help = 'nickname or ID of the HIT to extend')
sub.add_argument('-a', '--assignments', dest = 'assignments',
metavar = 'N', type = int,
@@ -372,69 +394,96 @@
metavar = 'T',
help = 'amount of time to add to the expiration date')
sub.set_defaults(f = extend_hit, a = lambda:
- [get_hitid(args.hit), args.assignments,
+ [get_hitid(args.HIT), args.assignments,
args.time and parse_duration(args.time)])
sub = subs.add_parser('expire',
help = 'force a HIT to expire without deleting it')
- sub.add_argument('hit',
+ sub.add_argument('HIT',
help = 'nickname or ID of the HIT to expire')
sub.set_defaults(f = expire_hit, a = lambda:
- [get_hitid(args.hit)])
+ [get_hitid(args.HIT)])
sub = subs.add_parser('rm',
help = 'delete a HIT')
- sub.add_argument('hit',
+ sub.add_argument('HIT',
help = 'nickname or ID of the HIT to delete')
sub.set_defaults(f = delete_hit, a = lambda:
- [get_hitid(args.hit)])
+ [get_hitid(args.HIT)])
sub = subs.add_parser('as',
help = "list a HIT's submitted assignments")
- sub.add_argument('hit',
+ sub.add_argument('HIT',
help = 'nickname or ID of the HIT to get assignments for')
sub.add_argument('-r', '--reviewable', dest = 'only_reviewable',
action = 'store_true',
help = 'show only unreviewed assignments')
sub.set_defaults(f = list_assignments, a = lambda:
- [get_hitid(args.hit), args.only_reviewable])
+ [get_hitid(args.HIT), args.only_reviewable])
for command, fun, helpmsg in [
('approve', approve_assignments, 'approve assignments'),
('reject', reject_assignments, 'reject assignments'),
('unreject', unreject_assignments, 'approve previously rejected assignments')]:
sub = subs.add_parser(command, help = helpmsg)
- sub.add_argument('assignment', nargs = '+',
+ sub.add_argument('ASSIGNMENT', nargs = '+',
help = 'ID of an assignment')
sub.add_argument('-m', '--message', dest = 'message',
metavar = 'TEXT',
help = 'feedback message shown to workers')
sub.set_defaults(f = fun, a = lambda:
- [args.message, args.assignment])
+ [args.message, args.ASSIGNMENT])
sub = subs.add_parser('bonus',
help = 'give some workers a bonus')
- sub.add_argument('amount', type = float,
+ sub.add_argument('AMOUNT', type = float,
help = 'bonus amount, in USD')
- sub.add_argument('message',
+ sub.add_argument('MESSAGE',
help = 'the reason for the bonus (shown to workers in an email sent by MTurk)')
- sub.add_argument('widaid', nargs = '+',
+ sub.add_argument('WIDAID', nargs = '+',
help = 'a WORKER_ID,ASSIGNMENT_ID pair')
sub.set_defaults(f = grant_bonus, a = lambda:
- [args.message, args.amount,
- [p.split(',') for p in args.widaid]])
+ [args.MESSAGE, args.AMOUNT,
+ [p.split(',') for p in args.WIDAID]])
sub = subs.add_parser('notify',
help = 'send a message to some workers')
- sub.add_argument('subject',
+ sub.add_argument('SUBJECT',
help = 'subject of the message')
- sub.add_argument('message',
+ sub.add_argument('MESSAGE',
help = 'text of the message')
- sub.add_argument('worker', nargs = '+',
+ sub.add_argument('WORKER', nargs = '+',
help = 'ID of a worker')
sub.set_defaults(f = notify_workers, a = lambda:
- [args.subject, args.message, args.worker])
+ [args.SUBJECT, args.MESSAGE, args.WORKER])
+ sub = subs.add_parser('give-qual',
+ help = 'give a qualification to some workers')
+ sub.add_argument('QUAL',
+ help = 'ID of the qualification')
+ sub.add_argument('WORKER', nargs = '+',
+ help = 'ID of a worker')
+ sub.add_argument('-v', '--value', dest = 'value',
+ metavar = 'N', type = int, default = 1,
+ help = 'value of the qualification')
+ sub.add_argument('--dontnotify', dest = 'notify',
+ action = 'store_false', default = True,
+ help = "don't notify workers")
+ sub.set_defaults(f = give_qualification, a = lambda:
+ [args.QUAL, args.WORKER, args.value, args.notify])
+
+ sub = subs.add_parser('revoke-qual',
+ help = 'revoke a qualification from some workers')
+ sub.add_argument('QUAL',
+ help = 'ID of the qualification')
+ sub.add_argument('WORKER', nargs = '+',
+ help = 'ID of a worker')
+ sub.add_argument('-m', '--message', dest = 'message',
+ metavar = 'TEXT',
+ help = 'the reason the qualification was revoked (shown to workers in an email sent by MTurk)')
+ sub.set_defaults(f = revoke_qualification, a = lambda:
+ [args.QUAL, args.WORKER, args.message])
+
args = parser.parse_args()
init_by_args(args)
« no previous file with comments | « third_party/boto/bin/lss3 ('k') | third_party/boto/bin/route53 » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698