在App Engine bulkuploader yaml中使用post_import_function

时间:2011-02-20 01:25:01

标签: google-app-engine google-cloud-datastore bulkloader

我正在尝试使用bulkuploader将一些数据上传到我的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,因为我在其中添加了一些正确运行的打印语句)。关于上传的一切都有效,除了我的后期处理功能完全没有效果。当我使用数据查看器时,我的数据存储区中没有“Hello there!”。

有人可以帮我一点吗?谢谢!

1 个答案:

答案 0 :(得分: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

但是,我只是通过打印各种调试信息来解决这个问题。如果在某处记录这些东西会很棒。有谁知道我在哪里可以找到这样的文件?