Simple command:

endpointscfg.py  gen_discovery_doc -o ~/projects/TestApp/generated -f rpc 
services.UserApi

Generates wrong discovery file. The piece of code that is failing is this 
(I removed all that was not relevant)

@endpoints.api( name='user', version='v1', description='User API'
              , allowed_client_ids=PERMS
              , hostname=g_hostname )
class UserApi(remote.Service):

    @endpoints.method(UserGetProfileStatsQ, UserGetProfileStatsA
                      , path='user/stats'
                      , name='user.get_stats'
                      , http_method='GET'
                      )
    def get_profile_stats(self, request):
        ...
        return UserGetProfileStatsA( ... )


    @endpoints.method(UserSetProfileQ, message_types.VoidMessage
                      , path='user/profile'
                      , name='user.save_profile'
                      , http_method='POST'
                      )
    def set_profile(self, request):
        ...
        return message_types.VoidMessage( )
            

    @endpoints.method(message_types.VoidMessage, UserGetProfileA
                      , path='user/profile'
                      , name='user.get_profile'
                      , http_method='GET'
                      )
    def get_profile(self, request):
        ...
        return UserGetProfileA( ... )



The first method, get_profile_stats, in the discovery file, instead of 

  "user.user.getstats": {
   "id": "user.user.getstats",
   "allowGet": true,
   "parameters": {
    "$ref": "UserApiMessagesUserGetProfileStatsQ"
   },
   "returns": {
    "$ref": "UserApiMessagesUserGetProfileStatsA"
   },

generates something like:

  "user.user.getstats": {
   "id": "user.user.getstats",
   "allowGet": true,
   "parameters": {
    "dummy": {
     "type": "string"
    },
    "user_id": {
     "type": "string"
    }
   },
   "returns": {
    "$ref": "UserApiMessagesUserGetProfileStatsA"
   },

Basically, it has "expanded" the UserApiMessagesUserGetProfileStatsQ to its 
fields. Therefore, the next step generates libraries for iOS that do not 
require any argument when doing the query for "get_user_profile_stats".

Some things I have found:

- If the name in endpoints.method match in 2 different functions but differ 
in http_method, the generation fails too. Example, I want to user 
user/profile (name="user.profile" for both: get_profile and set_profile) 
with GET HTTP method to read it, and with POST HTTP method to modify it. It 
cannot be done.

- If the method of get_user_stats has HTTP method = "PUT" (whatever that is 
not POST or GET), it generates "correctly" the discovery file.

I am wondering if I am misunderstanding the meaning of "path" and "name" 
fields in the endpoints.method. Or maybe I misunderstood the whole 
endpoints thing, and it is 1 class per each set of "PUT", "GET", "POST", 
... methods (but in the tictactoe example there are 2 POST and 1 GET in the 
same class).

Any help is highly appreciated. Thanks in advance!

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-appengine?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to