Использование post_import_function в пакетном загрузчике App Engine yaml

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

На данный момент я просто пытаюсь сделать простой тест, чтобы моя функция post_import_function работала.

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

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, потому что я добавил в него несколько операторов печати, которые работали правильно). Все, что касается загрузки, работает, за исключением того, что моя функция постобработки не имеет абсолютно никакого эффекта. Когда я использую средство просмотра данных, в моем хранилище данных нет сообщений «Привет!».

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


person Jen S    schedule 20.02.2011    source источник


Ответы (1)


На случай, если у других возникнут аналогичные проблемы, мой тест, как описано выше, работает. Кажется, что 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

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

person Jen S    schedule 20.02.2011