23

У меня возникают некоторые странные ошибки от protorpc, когда я использую конечные точки. В этом коде:Endpoints API - ошибка проверки 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 

, когда я звоню application.get() ошибка выглядит следующим образом: (full trace here):

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

и для вызова application.list() ошибки следующим образом: (full trace here):

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

Что может быть причиной этого? Мои другие модели с почти одинаковым кодом (только разные свойства) работают нормально.

+0

Эти следы выглядят так, как будто вы используете экземпляр 'Application' вместо объекта класса (типа)' Application'. Вы уверены, что не используете 'Application()' где-то в своем коде? –

+0

Просто проверено дважды, я не использую его нигде - в этом вопросе присутствует весь соответствующий код. Я расширяю класс 'ApplicationApi (BaseRemoteService)', но не упоминаю о приложении там, и есть метод POST api (который работает ...), но даже если я удалю все, что я все еще получаю те же ошибки с помощью только код из OP. – Sasxa

+1

Это выстрел в темноте, но до подкласса «EndpointsModel», подкласса 'Application'' ndb.Model'? Попробуйте выполнить цикл через все сущности 'Application' и снова« положить »на них. Я думаю, что ключ, который вы передаете, извлекает объект, но что-то о цепочке наследования делает поля '__class__' не совпадают. –

ответ

0

Подкласс class JsonModel(EndpointsModel), чтобы он снова начал работать.