функция bulkloader post_import_function движка приложений — как вызвать метод для объекта

#python #google-app-engine #bulkloader

#python #google-app-engine #bulkloader

Вопрос:

Пытаюсь использовать класс геомодели python и bulkloader. Я вызываю следующее post_import_function , которое работает нормально, и объект обновляется с правильно установленным полем местоположения.

 def post_process_obj(input_dict, entity_instance, bulkload_state):
    entity_instance['location'] = db.GeoPt(entity_instance['latitude'], entity_instance['longitude'])
    return entity_instance
  

Но что мне нужно сделать, это вызвать entity_instance.update_location() объект перед его сохранением в хранилище данных. entity_instance Though — это объект, а не подкласс GeoModel, поэтому я не понимаю, как это сделать. Некоторое время назад было сообщение, в котором говорилось встроить код или вызвать функцию и передать ему объект, но я не знаю, что это должно было означать.

Спасибо за любую помощь / пример кода.

Ответ №1:

Вы не можете этого сделать — как вы заметили, вы имеете дело с Entity , а не с экземпляром вашей модели. Единственный вариант — взять код, который вы хотите выполнить, скопировать и вставить его, и изменить его для работы с объектом вместо этого.

Комментарии:

1. Спасибо, Ник — я в значительной степени обнаружил, что, хотя я нашел сообщение от Мэтью Блейна, в котором говорится, что вы можете использовать model вместо «kind» в bulkloader. yaml, хотя на самом деле я не нашел никакой документации. В любом случае я исправил свою проблему, отказавшись от использования GeoHash и портирования для использования geobox.py вместо этого, который, кажется, довольно хорошо решает мои требования к geoquery.