有没有办法为 Gramex 中的所有 KPI 编写单个准备函数
Is there a way to write single prepare function for all the KPIs in Gramex
我有一个通用函数需要在执行所有 KPI 之前对其进行评估。所以我写了一个 prepare 函数,但 prepare 函数分别调用所有 KPI。相反,我希望为每个端点执行一次准备函数。我的终点是这样的
project-test:
pattern: /$YAMLURL/test
handler: FormHandler
kwargs:
auth: &AUTH
login_url: /$YAMLURL/login
kpi1:
prepare: validations.validate_request(args, handler)
url: $CONNECTION_STRING
queryfunction: queries.query1(args)
kpi2:
prepare: validations.validate_request(args, handler)
url: $CONNECTION_STRING
queryfunction: queries.query2(args)
modify: project.refactor(data, handler)
我试图在 kwargs 中提供 prepare 功能,但得到
AttributeError: 'str' object has no attribute 'get'
您分享的方法是正确的。错误可能出在自定义函数之一中,例如validations.validate_request
、queries.query*
或 project.refactor
为了对此进行测试,我创建了以下 data1.csv
a,b
1,2
3,4
... 和 data2.csv
a,b
4,5
6,7
这是我的gramex.yaml
url:
project-test:
pattern: /$YAMLURL/test
handler: FormHandler
kwargs:
kpi1:
prepare: validations.validate_request(args, handler)
url: data1.csv
kpi2:
prepare: validations.validate_request(args, handler)
url: data2.csv
...这是我的 validations.py
:
def validate_request(args, handler):
print(args, handler)
args['_c'] = ['a'] # Filter column 'a' alone
当我访问 /test
时,输出仅显示列 'a':
{"kpi1":[{"a":1},{"a":3}],"kpi2":[{"a":4},{"a":6}]}
... 并且命令提示符显示为每个数据集调用一次准备函数:
{'_limit': [10000]} <gramex.services.FormHandler object at 0x000001B1C14A43C8>
{'_limit': [10000]} <gramex.services.FormHandler object at 0x000001B1C14A43C8>
也许您可以分享有关 AttributeError 出现位置的完整错误消息?这可能会有所帮助。
我想这更像是一个准备功能问题。您能否检查一下您是否正在尝试使用其密钥访问字符串。只是一个快速的假设——检查你的字典是否是 json/ 字符串格式。
我有一个通用函数需要在执行所有 KPI 之前对其进行评估。所以我写了一个 prepare 函数,但 prepare 函数分别调用所有 KPI。相反,我希望为每个端点执行一次准备函数。我的终点是这样的
project-test:
pattern: /$YAMLURL/test
handler: FormHandler
kwargs:
auth: &AUTH
login_url: /$YAMLURL/login
kpi1:
prepare: validations.validate_request(args, handler)
url: $CONNECTION_STRING
queryfunction: queries.query1(args)
kpi2:
prepare: validations.validate_request(args, handler)
url: $CONNECTION_STRING
queryfunction: queries.query2(args)
modify: project.refactor(data, handler)
我试图在 kwargs 中提供 prepare 功能,但得到
AttributeError: 'str' object has no attribute 'get'
您分享的方法是正确的。错误可能出在自定义函数之一中,例如validations.validate_request
、queries.query*
或 project.refactor
为了对此进行测试,我创建了以下 data1.csv
a,b
1,2
3,4
... 和 data2.csv
a,b
4,5
6,7
这是我的gramex.yaml
url:
project-test:
pattern: /$YAMLURL/test
handler: FormHandler
kwargs:
kpi1:
prepare: validations.validate_request(args, handler)
url: data1.csv
kpi2:
prepare: validations.validate_request(args, handler)
url: data2.csv
...这是我的 validations.py
:
def validate_request(args, handler):
print(args, handler)
args['_c'] = ['a'] # Filter column 'a' alone
当我访问 /test
时,输出仅显示列 'a':
{"kpi1":[{"a":1},{"a":3}],"kpi2":[{"a":4},{"a":6}]}
... 并且命令提示符显示为每个数据集调用一次准备函数:
{'_limit': [10000]} <gramex.services.FormHandler object at 0x000001B1C14A43C8>
{'_limit': [10000]} <gramex.services.FormHandler object at 0x000001B1C14A43C8>
也许您可以分享有关 AttributeError 出现位置的完整错误消息?这可能会有所帮助。
我想这更像是一个准备功能问题。您能否检查一下您是否正在尝试使用其密钥访问字符串。只是一个快速的假设——检查你的字典是否是 json/ 字符串格式。