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.
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? –
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
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. –