Я получаю странные ошибки от 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()
ошибка выглядит следующим образом: (полная трассировка здесь):
TypeError: можно копировать только из сущностей точного типа Application. Получен экземпляр Application.
а для вызова application.list()
ошибка выглядит следующим образом: (полная трассировка здесь):
ValidationError: ожидаемый тип
<class '.Application'>
для элементов поля, найдено<Application name: u'test'>
(тип<class '.Application'>
)
Что может быть причиной этого? Мои другие модели с почти таким же кодом (только с другими свойствами) работают нормально.
Application
вместо объекта класса (типа)Application
. Вы уверены, что не используетеApplication()
где-то в своем коде? - person Josh J   schedule 24.02.2016ApplicationApi(BaseRemoteService)
, но там нет упоминания о приложении, и есть метод API POST (который работает...), но даже если я удалю все это, я все равно получаю те же ошибки только с кодом из OP. - person Sasxa   schedule 24.02.2016EndpointsModel
был лиApplication
подклассndb.Model
? Попробуйте перебрать все объектыApplication
и снова выполнитьput
для них. Я думаю, что ключ, который вы передаете, извлекает сущность, но что-то в цепочке наследования делает поля__class__
несоответствующими. - person Josh J   schedule 24.02.2016Application
не был подклассом ничего, кромеEndpointsModel
, но когда я создал подклассclass JsonModel(EndpointsModel)
(также сделал некоторые другие вещи в коде, поэтому не могу быть уверен, что именно происходит), он начал работать. Я вернулся кEndpointsModel
, и он все еще работает (; Думаю, единственный способ справиться с такими проблемами - отключить все остальное и изолировать модули с проблемами... - person Sasxa   schedule 24.02.2016