Exemplo n.º 1
0
    def put(self, id=None):
        if id is None:
            # Somebody called PUT /api/<collection> which we don't support.
            return self.http_method_not_allowed('GET, HEAD, POST')

        id = self.model.get_long_uid(id)

        if not owns(self.get_current_user(), id):
            return self.http_forbidden()

        force = self.request.get('force', None) == 'true'  # from query str
        params = self.get_params(self.model.property_types())  # json body

        # Don't allow any changes to response privacy.
        params.pop('private', None)

        try:
            entity = Response.update_or_conflict(id, params, force)
        except ResponseNotFound:
            return self.http_not_found()
        except JsonTextValueLengthError:
            return self.http_payload_too_large("Value too long.")
        except JsonTextDictLengthError:
            return self.http_payload_too_large("Body has too many keys.")
        except ResponseBodyKeyConflict as e:
            return self.http_conflict({
                'message':
                ("Keys conflict: {}. Repeat with ?force=true to override.".
                 format(', '.join(e.args[0]))),
                'keys':
                e.args[0],
            })

        self.write(entity)
Exemplo n.º 2
0
    def test_update_creates_task(self):
        # **Don't** use .put() here, because responses are saved with a
        # custom transaction via insert_or_conflict() and update_or_conflict().

        user_response_params = dict(
            self.response_params,
            type=Response.USER_LEVEL_SYMBOL,
            private=True,
            user_id='User_foo',
        )
        r = Response.create(**user_response_params)
        r.put() # Creates one task.

        # Modifying should create a (second) task.
        new_params = dict(user_response_params, progress = 100)
        updated = Response.update_or_conflict(r.uid, new_params, False)
        expected_payload = json.dumps(
            updated.to_dict(),
            default=util.json_dumps_default,
        )
        tasks = self.taskqueue_stub.get_filtered_tasks()
        self.assertEqual(len(tasks), 2)
        self.assertEqual(tasks[1].payload, expected_payload)