Python读取嵌套YAML中roleprivs下的code与access字段的方法
解决方案
核心提取逻辑
你已经获取到了roleprivs节点下的所有权限项键名,直接通过层级访问就能拿到对应code和access字段,遍历逻辑修改如下:
try: with open(yaml_file, 'r') as f: result = yaml.safe_load(f) strRoleID = str(role) url = baseURL+"/api/roles/"+strRoleID+"/update-permission" # 直接遍历roleprivs的键值对更方便,不用单独取keys for priv_name, priv_config in result['roleprivs'].items(): # 提取需要的两个字段 code = priv_config['code'] access = priv_config['access'] # 打印验证可自行删除 print(f"权限名:{priv_name},code:{code},access:{access}") # 调用更新接口 payload = json.dumps({ "permissionCode": code, "access": access }) headers = {'Content-Type': 'application/json','Authorization': 'Bearer ' +bearerToken} response = requests.request("PUT", url, verify=False, headers=headers, data=payload) # 可选增加响应校验,方便排查错误 if response.status_code not in [200,204]: logger.error(f"更新权限{code}失败,状态码:{response.status_code},返回内容:{response.text}") except Exception as e: logger.error(f"处理{yaml_file}的权限更新逻辑失败", exc_info=True)
现有代码优化建议
- 同一个YAML文件不需要重复读取3次,第一次读取后把
result变量存下来,后续创建角色、取角色ID、更新权限都复用这个变量即可,减少IO开销 - 原有代码中
url的赋值被放在了读取YAML失败的except块中,正常读取成功的场景下url不会被赋值,会直接报错,注意调整逻辑块的缩进 - 调用接口后建议增加响应状态码判断,避免静默失败无法排查问题
内容的提问来源于stack exchange,提问作者Jared
相关产品推荐
相关产品推荐

