Google Cloud Multiple Response Endpoint Method

I have a google method that should be able to return either MaleResponseMessage, or FemaleResponseMessage. Is there any way to indicate that, for example, with

@endpoints.method(message_types.VoidMessage, [MaleResponseMessage, FemaleResponseMessage])

Of course, it is possible to declare a super message class, for example PersonResponseMessage, for wrapping MaleResponseMessageor FemaleResponseMessage. But is there something similar to the snippet above?

EDIT:

Trying to implement my own proposal, I got stuck. The only thing that two types of messages have is a request: the same request fields (with additional logical female=true/false) for PersonRequest. MaleResponseMessageand FemaleResponseMessagedo not have a common field. This way I use one endpoint method as @bossylobster shows, where I check

if request.female : # request.female == True
    return get_female(etc, etc)
else: # request.female == False // implies male
    return get_male(etc,etc)

For an answer I need something like

class PersonResponse(messages.Message):
  if ??? :
     item = messages.MessageField(MaleResponseMessage,1)
  else:
      item = messages.MessageField(FemaleResponseMessage,1)

, ??? . -, isinstance type. ? ?

class PersonResponse(messages.Message):
  if type(Message()) == MaleResponseMessage :
     item = messages.MessageField(MaleResponseMessage,1)
  else:
      item = messages.MessageField(FemaleResponseMessage,1)
+5
2

.

+2

. ; , API Google , .

, , .

from protorpc import messages

class Gender(messages.Enum):
    MALE = 0
    FEMALE = 1

class GenderRequest(messages.Enum):
    gender = messages.EnumField(Gender, 1, required=True)

class PersonResponse(messages.Message):
    gender = messages.EnumField(Gender, 1)
    # shared fields
    # female specific fields
    # male specific fields

    @endpoints.method(GenderRequest, PersonMessage, ...)
    def my_method(self, request):
      if request.gender == Gender.MALE:
          return male_response(request)
      elif request.gender == Gender.FEMALE:
          return female_response(request)
      else:
          # This should never occur since gender is required
          raise endpoints.BadRequestException('Gender not set.')

male_response female_response - , PersonMessage, .

+3

All Articles