使用Python,我得到了一个从API端点检索操作列表的函数,该函数接受一个filter参数作为变量,以便过滤给定 predicate 上的结果。
函数如下所示:
def list_operations(filter=None):
# make a curl call to the product recognizer
headers = {
'Authorization': 'Bearer {}'.format(creds.token),
'Content-Type': 'application/json',
}
response = requests.get(
'https://{}/v1alpha1/projects/{}/locations/us-central1/operations'.format(API_ENDPOINT, project),
headers=headers
)
# dump the json response and display their names
data = json.loads(response.text)
#add a Metadata element to the operations if it does not exist
for item in data['operations']:
if not item.get('metadata'):
item['metadata'] = {}
item['metadata']['createTime'] = ''
else:
if not item['metadata'].get('createTime'):
item['metadata']['createTime'] = ''
# Order operations by create time if the metadata exists and the createTime exists
data['operations'] = sorted(data['operations'], key=lambda k: k['done'], reverse=True)
if filter:
# filter the operations by the filter value
# Parse the filter value to get the operation name
filter_path = filter.split('=')[0].split('.')
filter_value = filter.split('=')[1]
#check if the filter_value could be a Boolean
if filter_value == 'True':
filter_value = True
elif filter_value == 'False':
filter_value = False
# iterate backwards to avoid index out of range error using reversed
for item in reversed(data['operations']):
# for every element in filter_path, check if it exists
item_value = item
for filter_el in filter_path:
if item_value.get(filter_el):
item_value = item_value.get(filter_el)
# if the item value is not equal to the filter value, remove it from the list
if item_value != filter_value:
data['operations'].remove(item)
我的问题是当我用/调用函数时
list_operations(filter='done=False')
即使响应消息中的done键为False,对item_value的赋值也不起作用:
item_value = item_value.get(filter_el)
使用调试器时,item_value为{'name':“API程序接口路径/操作-1676883175156- 5 f51 dc 9 fc2 ad 1-b4 c56 f97-edd 1 e5 be”,“完成”:错误,“元数据”:{“创建时间”:“”}}而不是False
打电话时工作正常
list_operations(filter='done=True')
我看不出这里少了什么...
[编辑]问题是
if item_value.get(filter_el):
要测试密钥是否存在,应执行以下操作:
if filter_el in item_value:
愚蠢的错误...
1条答案
按热度按时间tzdcorbm1#
json.loads()
将JSON加载到Python字典中,因此"done": false
已经在Python中转换为{"done": False}
:我没有你的全部答复,所以我不能帮助超过这一点。