How do I update a list data_relation in Python Eve
Asked Answered
P

1

0

I have a model 'users' and a schema for it, which includes a one-to-many relation back to users:

'followers': {
    'type': 'list',
    'schema': {
            'type': 'objectid',
            'data_relation': {
                    'resource': 'users'
            }
    }
},

I am trying to update the list of followers. I tried sending PATCH request to the /users/545c7dccb505970bbf0e5ad1 endpoint with a 'followers' key and a list of objectids but it doesn't work. Also tried sending a PUT request to /users/545c7dccb505970bbf0e5ad1/followers/ but no luck.

So how do I add an object to this list with Python Eve REST API?

GET /users/545c7dccb505970bbf0e5ad1/
{
    "_updated": "Fri, 07 Nov 2014 08:07:40 GMT",
    "public_key": "test",
    "_etag": "256d6da738a0f39929d40d1c868e1f67661460be",
    "_links": {
        "self": {
            "href": "/users/545c7dccb505970bbf0e5ad1",
            "title": "User"
        },
        "parent": {
            "href": "",
            "title": "home"
        },
        "collection": {
            "href": "/users",
            "title": "users"
        }
    },
    "active": false,
    "_created": "Fri, 07 Nov 2014 08:07:40 GMT",
    "_id": "545c7dccb505970bbf0e5ad1"
}

PATCH /users/545c7dccb505970bbf0e5ad1
{
    "_status": "ERR",
    "_error": {
        "message": "You don't have the permission to access the requested resource. It is either read-protected or not readable by the server.",
        "code": 403
    }
}

PUT /users/545c7dccb505970bbf0e5ad1/followers
{
    "_status": "ERR",
    "_error": {
        "message": "The requested URL was not found on the server.  If you entered the URL manually please check your spelling and try again.",
        "code": 404
    }
}
Pontianak answered 7/11, 2014 at 22:53 Comment(0)
M
2

doesn't work is awfully broad... however at a guess you need to send your _etag token the server returned when fetching or creating the user... this is required to prevent updating from an out of date model

Marsha answered 7/11, 2014 at 23:0 Comment(3)
Where does the server return the _netid token? Is this a header of some sort? I don't see it in the JSON.Pontianak
Thanks, this worked. I had to add "If-Match" header to the request and put the _etag value there.Pontianak
Also, Eve docs have a section devoted to concurrency and data integrity control too. You were getting 422 Precondition Failed with your response (a detail worth posting in your question by the way), precisely because the ETag was missing in your request.Renettarenew

© 2022 - 2024 — McMap. All rights reserved.