GAE: невозможно использовать импортированный класс с методом API конечных точек
У меня есть класс, содержащий метод, который пишет в мое хранилище данных. Я могу использовать это для записи в мое хранилище данных из моего Интернета, но я не могу понять, как использовать его и для моего API POST.
DatastoreWrite.py:
from endpoints_proto_datastore.ndb import EndpointsModel
from google.appengine.ext import ndb
def person_timestamp_key(person_timestamp):
return ndb.Key('Person Timestamp', person_timestamp)
class Person(EndpointsModel):
name = ndb.StringProperty(indexed=False)
timestamp = ndb.DateTimeProperty(auto_now_add=True)
def do_insert(self, name):
person_timestamp = 'person_timestamp'
# Sets entity
person = Person(parent=person_timestamp_key(person_timestamp))
person.name = name
person.put()
webapp.py - это успешно добавляет запись в мое хранилище данных при отправке из веб-приложения:
def post(self):
name = self.request.get('name')
person = DatastoreWrite.Person()
if name and not name.isspace():
person.do_insert(name)
self.redirect('/')
api.py - я попробовал сотню разных вещей здесь. Это то, что у меня сейчас. Результаты в "BadValueError: Ожидаемая строка, полученная Person()":
class Api(remote.Service):
@Person.method(path='api', http_method='POST', name='person.insert')
def PersonInsert(self, person):
person = DatastoreWrite.Person()
person.do_insert(person)
return person
ОБНОВЛЕНИЕ: Другая попытка - завершается неудачей с ошибкой "BadValueError: Ожидаемая строка, полученная Person(name=u'Atlas')":
@DatastoreWrite.Person.method(path='healthsecure', http_method='POST', name='person.insert')
def PersonInsert(self, name):
person = DatastoreWrite.Person()
person.do_insert(name)
return person
1 ответ
Функция do_insert имеет подпись def do_insert(self, name)
который требует имени в качестве параметра, который является строкой, и вы отправляете человека в качестве параметра person.do_insert(person)
,
Решение:
@DatastoreWrite.Person.method(path='healthsecure', http_method='POST', name='person.insert')
def PersonInsert(self, person):
person.do_insert(person.name)
return person