Beispiel #1
0
def task_by_id(challenge_slug, task_id):
    "Either displays a task (assigning it) or else posts the commit"
    # make sure we're authenticated
    challenge = get_challenge_or_404(challenge_slug, True)
    task = get_task_or_404(challenge, task_id)
    osmid = session.get('osm_id')
    if request.method == 'GET':
        try:
            assign = int(request.args.get('assign', 1))
        except ValueError:
            abort(400)
        if assign:
            action = Action(task.id, "assigned", osmid)
            task.current_state = action
            db.session.add(action)
            db.session.add(task)
        return jsonify(marshal(task, task_fields))

    elif request.method == 'POST':
        valid_actions = [button.action for button in challenge.dlg['buttons']]
        action = None
        for key in valid_actions:
            if request.form.get(key):
                action = Action(task.id, key, osmid)
                task.current_action = action
                db.session.add(action)
                break
        if not action:
            abort(400)
        new_state = challenge.task_status(task)
        action = Action(task.id, new_state, osmid)
        task.current_action = action
        db.session.add(action)
        db.session.add(task)
        db.commit()
Beispiel #2
0
 def post(self, challenge_slug, task_id):
     challenge = get_challenge_or_404(challenge_slug, instance_type=False,
                                      abort_if_inactive=False)
     task = get_task_or_404(challenge, task_id)
     if request.form.get('run'):
         task['run'] = request.form['run']
     if request.form.get('text'):
         task['instruction'] = request.form['text']
     if request.form.get('location'):
         # WILL THIS WORK???
         task['location'] = request.form['location']
     if request.form.get('manifest'):
         task['manifest'] = request.form['manifest']
     db.session.add(task)
     db.commit()
     return task
Beispiel #3
0
 def post(self, challenge_slug, task_id):
     challenge = get_challenge_or_404(challenge_slug, instance_type=False,
                                      abort_if_inactive=False)
     task = get_task_or_404(challenge, task_id)
     if request.form.get('run'):
         task['run'] = request.form['run']
     if request.form.get('text'):
         task['instruction'] = request.form['text']
     if request.form.get('location'):
         # WILL THIS WORK???
         task['location'] = request.form['location']
     if request.form.get('manifest'):
         task['manifest'] = request.form['manifest']
     db.session.add(task)
     db.commit()
     return task
Beispiel #4
0
 def put(self, challenge_slug, task_id):
     challenge = get_challenge_or_404(challenge_slug, instance_type=False,
                                      abort_if_inactive=False)
     task = Task.query(Task.identifier == task_id). \
         filter(Task.challenge_slug == challenge.slug).first()
     if task:
         action = Action(task.id, "modified")
         db.session.add(action)
     else:
         task = Task(challenge.slug, task_id)
         db.session.add(task)
         db.session.flush()
         action = Action(task.id, "created")
         db.session.add(action)
         action = Action(task.id, "available")
         db.session.add(action)
     parser = reqparse.RequestParser()
     parser.add_argument('run', required=True,
                         help="New tasks must include a Run ID")
     parser.add_argument('text', dest='instruction')
     parser.add_argument('location', type=GeoPoint,
                         help="Location must be in the form lon|lat")
     parser.add_argument('manifest', type=JsonData,
                         help="Manifest must be valid JSON")
     args = parser.parse_args()
     if request.form.get('run'):
         task['run'] = request.form['run']
     if request.form.get('text'):
         task['instruction'] = request.form['text']
     if request.form.get('location'):
         # WILL THIS WORK???
         task['location'] = request.form['location']
     if request.form.get('manifest'):
         task['manifest'] = request.form['manifest']
     # LET'S HOPE ADDING IT TWICE DOESN'T BREAK ANYTHING
     db.session.add(task)
     db.commit()
     return task
Beispiel #5
0
 def put(self, challenge_slug, task_id):
     challenge = get_challenge_or_404(challenge_slug, instance_type=False,
                                      abort_if_inactive=False)
     task = Task.query(Task.identifier == task_id). \
         filter(Task.challenge_slug == challenge.slug).first()
     if task:
         action = Action(task.id, "modified")
         db.session.add(action)
     else:
         task = Task(challenge.slug, task_id)
         db.session.add(task)
         db.session.flush()
         action = Action(task.id, "created")
         db.session.add(action)
         action = Action(task.id, "available")
         db.session.add(action)
     parser = reqparse.RequestParser()
     parser.add_argument('run', required=True,
                         help="New tasks must include a Run ID")
     parser.add_argument('text', dest='instruction')
     parser.add_argument('location', type=GeoPoint,
                         help="Location must be in the form lon|lat")
     parser.add_argument('manifest', type=JsonData,
                         help="Manifest must be valid JSON")
     args = parser.parse_args()
     if request.form.get('run'):
         task['run'] = request.form['run']
     if request.form.get('text'):
         task['instruction'] = request.form['text']
     if request.form.get('location'):
         # WILL THIS WORK???
         task['location'] = request.form['location']
     if request.form.get('manifest'):
         task['manifest'] = request.form['manifest']
     # LET'S HOPE ADDING IT TWICE DOESN'T BREAK ANYTHING
     db.session.add(task)
     db.commit()
     return task