Iorrrrrrrrrr
Iorrrrrrrrrr

Reputation: 422

GAE: Writing the API: a simple PATCH method (Python)

I have a google-cloud-endpoints, in the docs, I did'nt find how to write a PATCH method. My request:

curl -XPATCH localhost:8080/_ah/api/hellogreeting/1 -d '{"message": "Hi"}'

My method handler looks like this:

from models import Greeting
from messages import GreetingMessage


@endpoints.method(ID_RESOURCE, Greeting,`
              path='hellogreeting/{id}', http_method='PATCH',
              name='greetings.patch')
def greetings_patch(self, request):
    request.message, request.username
    greeting = Greeting.get_by_id(request.id)
    greeting.message = request.message   # It's ok, cuz message exists in request
    greeting.username = request.username # request.username is None. Writing the IF conditions in each string(checking on empty), I think it not beatifully. 
    greeting.put()
    return GreetingMessage(message=greeting.message, username=greeting.username)

So, now in Greeting.username field will be None. And it's wrong. Writing the IF conditions in each string(checking on empty), I think it not beatifully. So, what is the best way for model updating partially?

Upvotes: 0

Views: 371

Answers (1)

David
David

Reputation: 5519

I do not think there is one in Cloud Endpoints, but you can code yours easily like the example below.

You will need to decide how you want your patch to behave, in particular when it comes to attributes that are objects : should you also apply the patch on the object attribute (in which case use recursion) or should you just replace the original object attribute with the new one like in my example.

def apply_patch(origin, patch):
    for name in dir( patch ):
            if not name.startswith( '__' ):
                setattr(origin,name,getattr(patch,name))

Upvotes: 1

Related Questions