如何在create_deep_key中使用none_if_empty?

时间:2012-08-08 22:06:21

标签: google-app-engine bulkloader

我正在查看Where are the reference pages of the Google App Engine bulkloader transform?并找出我的bulkloader.yaml大部分配置,但一个案例除外。

我的一个'种类'产品'有一个名为site的属性。如果存在,这是客户类型和站点类型的深层密钥。现在我遇到的问题是使用non_if_empty。在下面的例子中,它不会创建深层密钥。它总是没有回来。如果我删除transform.none_if_empty,它将失败,因为我的输入文件的某些值为空。我怎样才能做到这一点?如何在create_deep_key

中使用none_if_empty
- property: site
  external_name: site
  export_transform: transform.key_id_or_name_as_string
  import_transform: transform.none_if_empty(transform.create_deep_key(('Customer', 'siteCustomer', True),
                                                ('Site', 'siteId', True)))

  export: 
   - external_name: siteCustomer
     export_transform: transform.key_id_or_name_as_string_n(0)
   - external_name: siteId
     export_transform: transform.key_id_or_name_as_string_n(1)

Product Bulkloader File Example
name,siteCustomer,siteId
first,,
second,1,1

2 个答案:

答案 0 :(得分:1)

那应该是

import_transform: transform.none_if_empty(transform.create_deep_key(
    ('Customer','siteCustomer', True),
    ('Site', transform.CURRENT_PROPERTY, True)))

基本上,将当前属性的导入值称为transform.CURRENT_PROPERTY。

答案 1 :(得分:0)

所以我仍然不知道我在这里缺少什么,但我的工作是:

来自google.appengine.ext.bulkload导入转换

def create_deep_key(* path_info):     f = transform.create_deep_key(* path_info)

def create_deep_key_lambda(value, bulkload_state):

    try:
        return f(value, bulkload_state)
    except:
        return None

return create_deep_key_lambda