23

Otrzymuję pewne dziwne błędy od protorpc, gdy używam punktów końcowych. W tym kodzie:Interfejs API punktów końcowych - błąd sprawdzania poprawności protorpc

class Application(EndpointsModel): 

    _message_fields_schema = ('id', 'name') 

    created = ndb.DateTimeProperty(auto_now_add=True) 
    name = ndb.StringProperty() 
    roles = ndb.IntegerProperty(repeated=True) 
    updated = ndb.DateTimeProperty(auto_now=True) 
    owner = ndb.KeyProperty(kind='User') 

@API.api_class(resource_name="application") 
class ApplicationApi(protorpc.remote.Service): 

    @Application.method(http_method="GET", 
         request_fields=('id',), 
         name="get", 
         path="applications/{id}") 
    def ApplicationGet(self, instance): 
     if not instance.from_datastore: 
      raise endpoints.NotFoundException("Application not found.") 
     return instance 

    @Application.query_method(http_method="GET", 
           query_fields=('limit', 'order', 'pageToken'), 
           name="list", 
           path="applications") 
    def ApplicationList(self, query): 
     return query 

gdy zgłoszę application.get() błędu jest następujący: (full trace here):

TypeError: Can only copy from entities of the exact type Application. Received an instance of Application.

i za nazwanie application.list() błędu jest następujący: (full trace here):

ValidationError: Expected type <class '.Application'> for field items, found <Application name: u'test'> (type <class '.Application'>)

Co może być przyczyną tego? Moje inne modele z prawie takim samym kodem (tylko inne właściwości) działają dobrze.

+0

Te ślady wyglądają tak, jakbyś używał instancji 'Application' zamiast obiektu klasy (typu)' Application'. Czy na pewno nie używasz 'Application()' gdzieś w swoim kodzie? –

+0

Po prostu dwukrotnie sprawdziłem, nie używam go nigdzie - cały odpowiedni kod jest w pytaniu. Rozszerzam klasy 'ApplicationApi (BaseRemoteService)', ale nie wspomnę o aplikacji tam, i istnieje metoda POST api (która działa ...), ale nawet jeśli usunę wszystko, nadal mam te same błędy, tylko kod z OP. – Sasxa

+1

To strzał w ciemno, ale przed podklasowaniem 'EndpointsModel', czy podklasa' Application' 'ndb.Model'? Spróbuj zapętlić wszystkie encje 'Application' i ponownie wykonaj' put'. Myślę, że klucz, który przekazujesz, pobiera obiekt, ale coś w łańcuchu dziedziczenia powoduje, że pola '__class__' nie pasują do siebie. –

Odpowiedz

0

Podklasa class JsonModel(EndpointsModel), aby ponownie zadziałała.