Использование функции post_import_fam в App Engine. - PullRequest
1 голос
/ 20 февраля 2011

Я пытаюсь загрузить некоторые данные в свое хранилище данных App Engine с помощью функции массового загрузчика. Для одного из моих типов сущностей у меня есть одно свойство, которое вычисляется из другого, поэтому я действительно хотел бы выполнить некоторую постобработку для каждой сущности, поскольку она импортируется для выполнения этого вычисления. Я продолжаю видеть краткие упоминания о теге преобразования post_import_function, но никакой реальной исчерпывающей документации или примеров.

Сейчас я просто пытаюсь провести простой тест, чтобы заставить работать мою функцию post_import_.

Моя модель сущности:

class TestEntity(db.Model):
    location = db.GeoPtProperty()
    cells = db.StringListProperty() # Computed from location

Соответствующая часть моего файла bulkloader.yaml выглядит следующим образом:

- kind: TestEntity
  [... connector info ...]
  property_map:
    [... transform info for __key__ and location here ...]
  post_import_function: post_transform.post_process_testentity

И моя функция post_process_testentity:

def post_process_testentity(input_dict, entity_instance, bulkload_state):
    entity_instance.cells = [u'Hello there!']
    return entity_instance

Когда я делаю загрузку данных со всем этим, я не получаю ошибок (и я знаю, что вводится post_process_testentity, потому что я добавил несколько операторов print внутри него, которые работали правильно). Все о загрузке работает, кроме моей функции пост-обработки, абсолютно не влияет. Когда я пользуюсь средством просмотра данных, в моем хранилище данных нет "Hello there!".

Может ли кто-нибудь мне немного помочь? Спасибо!

1 Ответ

1 голос
/ 20 февраля 2011

В случае, если у других возникают похожие проблемы, я получил тест, как описано выше, для работы.Кажется, что entity_instance в функции постобработки на самом деле имеет тип google.appengine.api.datastore.Entity, который является подклассом dict.Итак, эта модификация функции post_process_testentity сработала:

def post_process_testentity(input_dict, entity_instance, bulkload_state):
    entity_instance['cells'] = [u'Hello there!']
    return entity_instance

Однако я понял это только путем игры с печатью различных сообщений отладки.Было бы здорово, если бы этот материал был где-то задокументирован.Кто-нибудь знает, где я могу найти такую ​​документацию?

...