python - 如何使用以下列表条目创建 REST API 请求详细信息 - 在 Python 中
问题描述
以下是我从源代码中获得的列表。
[("!!cm.mymodel.ucm.model.uCConf.UCConf\nrequests:\n- &id001\n dMD:\n cA: {}\n descMap: {en: R Des}\n dispNm: {en: Rq Nm}\n sysAt: {}\n id: R_I_001\n para:\n mt: gSoCamgSoCam\n cT: 1\n cttSceId: ['2']\n aMarB: fl\n maxR: 2\n pR: null\n reqCon: {reqTy: GET}\nuCs:\n- dMD:\n cA: {}\n descMap: {}\n dispNm: {en: gm_tt_SedCa}\n sysAt:\n undefined: {enabled: fl}\n reqCktl:\n - dMD:\n cA: {}\n descMap: {}\n dispNm: {en: Default}\n sysAt: {}\n id: gm_tt_SedCa_0\n reqL:\n - *id001\n slpara: {spPeMin: 1, spPerMx: 100}\n stUCad: GM_19_02-01-2019_236166987\n uCaId: gm_tt_SedCa\nversion: '1.0'\n",), ("!!cm.mymodel.ucm.model.uCConf.UCConf\nrequests:\n- &id001\n dMD:\n cA: {}\n descMap: {en: R Des}\n dispNm: {en: Rq Nm}\n sysAt: {}\n id: R_I_001\n para:\n mt: GTEdRec\n cT: 1\n cttSceId: ['2']\n aMarB: fl\n pR: null\n reqCon: {reqTy: GET}\nuCs:\n- dMD:\n cA: {}\n descMap: {}\n dispNm: {en: ult Picks}\n sysAt: {}\n reqCktl:\n - dMD:\n cA: {}\n descMap: {}\n dispNm: {en: Default}\n sysAt: {}\n id: ult/ult_pi_var_0\n reqL:\n - *id001\n slpara: {spPeMin: 1, spPerMx: 100}\n stUCad: ult/ult_Picks_11-01-2019_1003834703\n uCaId: ult/gm_tt_SedCa\nversion: '1.0'\n",), ("!!cm.mymodel.ucm.model.uCConf.UCConf\nrequests:\n- &id001\n dMD:\n cA: {}\n descMap: {en: R Des}\n dispNm: {en: Rq Nm}\n sysAt: {}\n id: R_I_001\n para:\n mt: GTEdRec\n cT: 1\n cttSceId: ['2']\n aMarB: fl\n campaignIds: gm_tt_SedCa_2018\n maxR: 3\n pR: null\n reqCon: {reqTy: GET}\nuCs:\n- dMD:\n cA: {}\n descMap: {}\n dispNm: {en: Vik Sea 2017}\n sysAt:\n taUsecaseDateRange: {enabled: fl}\n reqCktl:\n - dMD:\n cA: {Cat: Ed}\n descMap: {}\n dispNm: {en: Default}\n sysAt: {}\n id: ult/gm_tt_SedCa8-copy_variant_0\n reqL:\n - *id001\n slpara: {spPeMin: 1, spPerMx: 100}\n stUCad: ult/gm_tt_SedCa_2018-Copy_11-01-2017_1003834668\n uCaId: ult/gm_tt_SedCa-Copy\nversion: '1.0'\n",)]
我需要使用该列表来创建 REST URL,例如
URL: http://<url>/<use value in-front of uCaId>
Method:<use value available for reqTy>
Req Body: {
"rParam": {
"cItId":["[<use cttSceId>]<random id>"]
"aMarB":<use value for aMarB>
}
}
所以它应该遍历并在这种情况下给我 3 个 URL。(稍后我计划将其传递给 PyTest 断言)
不确定如何使用 Python 实现这一点。谁能帮忙?
PS:从我尝试过的评论建议
import yaml
descriptors1 = [
[(
"!!cm.mymodel.ucm.model.uCConf.UCConf\nrequests:\n- &id001\n dMD:\n cA: {}\n descMap: {en: R Des}\n dispNm: {en: Rq Nm}\n sysAt: {}\n id: R_I_001\n para:\n mt: gSoCamgSoCam\n cT: 1\n cttSceId: ['2']\n aMarB: fl\n maxR: 2\n pR: null\n reqCon: {reqTy: GET}\nuCs:\n- dMD:\n cA: {}\n descMap: {}\n dispNm: {en: gm_tt_SedCa}\n sysAt:\n undefined: {enabled: fl}\n reqCktl:\n - dMD:\n cA: {}\n descMap: {}\n dispNm: {en: Default}\n sysAt: {}\n id: gm_tt_SedCa_0\n reqL:\n - *id001\n slpara: {spPeMin: 1, spPerMx: 100}\n stUCad: GM_19_02-01-2019_236166987\n uCaId: gm_tt_SedCa\nversion: '1.0'\n",),
(
"!!cm.mymodel.ucm.model.uCConf.UCConf\nrequests:\n- &id001\n dMD:\n cA: {}\n descMap: {en: R Des}\n dispNm: {en: Rq Nm}\n sysAt: {}\n id: R_I_001\n para:\n mt: GTEdRec\n cT: 1\n cttSceId: ['2']\n aMarB: fl\n pR: null\n reqCon: {reqTy: GET}\nuCs:\n- dMD:\n cA: {}\n descMap: {}\n dispNm: {en: ult Picks}\n sysAt: {}\n reqCktl:\n - dMD:\n cA: {}\n descMap: {}\n dispNm: {en: Default}\n sysAt: {}\n id: ult/ult_pi_var_0\n reqL:\n - *id001\n slpara: {spPeMin: 1, spPerMx: 100}\n stUCad: ult/ult_Picks_11-01-2019_1003834703\n uCaId: ult/gm_tt_SedCa\nversion: '1.0'\n",),
(
"!!cm.mymodel.ucm.model.uCConf.UCConf\nrequests:\n- &id001\n dMD:\n cA: {}\n descMap: {en: R Des}\n dispNm: {en: Rq Nm}\n sysAt: {}\n id: R_I_001\n para:\n mt: GTEdRec\n cT: 1\n cttSceId: ['2']\n aMarB: fl\n campaignIds: gm_tt_SedCa_2018\n maxR: 3\n pR: null\n reqCon: {reqTy: GET}\nuCs:\n- dMD:\n cA: {}\n descMap: {}\n dispNm: {en: Vik Sea 2017}\n sysAt:\n taUsecaseDateRange: {enabled: fl}\n reqCktl:\n - dMD:\n cA: {Cat: Ed}\n descMap: {}\n dispNm: {en: Default}\n sysAt: {}\n id: ult/gm_tt_SedCa8-copy_variant_0\n reqL:\n - *id001\n slpara: {spPeMin: 1, spPerMx: 100}\n stUCad: ult/gm_tt_SedCa_2018-Copy_11-01-2017_1003834668\n uCaId: ult/gm_tt_SedCa-Copy\nversion: '1.0'\n",)]
]
a = yaml.dump(descriptors1,explicit_start=True, default_flow_style=False) ## a is type 'str' and giving o
#a = yaml.safe_dump(descriptors1,explicit_start=True, default_flow_style=False)
class PSLoader(yaml.SafeLoader):
def construct_python_tuple(self, node):
return tuple(self.construct_sequence(node))
PSLoader.add_constructor(
u'tag:yaml.org,2002:python/tuple',
PSLoader.construct_python_tuple)
yamlholder = yaml.load(a, Loader=PSLoader)
print(yamlholder)
现在 yamlholderis 类型为“列表”
和op是这样的
op is
[("!!cm.mymodel.ucm.model.uCConf.UCConf\nrequests:\n- &id001\n dMD:\n cA: {}\n descMap: {en: Rq Nm}\n dispNm: {en: Rq Nm}\n sysAt: {}\n id: REQ_ID_001\n para:\n mT: getSortedCampaigns\n cT: 1\n cttSceId: ['2']\n aMarB: false\n maxR: 2\n pR: null\n reqCon: {reqTy: GET}\nuCs:\n- dMD:\n cA: {}\n descMap: {}\n dispNm: {en: gm_tt_SedCa}\n sysAt:\n undefined: {enabled: fl}\n reqCktl:\n - dMD:\n cA: {}\n descMap: {}\n dispNm: {en: Default}\n sysAt: {}\n id: gm_tt_SedCa_0\n reqL:\n - *id001\n slpara: {spPeMin: 1, spPerMx: 100}\n stUCad: GM_19_02-01-2019_236166987\n uCaId: m_tt_SedCa\nversion: '1.0'\n",), ...........)]
解决方案
在您的代码中,您首先将数据(这是一个列表)转储到 yaml,然后将其解析回来。难怪你又得到了一份清单。相反,您需要先从列表中提取 yaml,然后对其进行解析:
class PSLoader(yaml.SafeLoader):
pass
def constructor(loader, node):
return loader.construct_mapping(node)
# to handle the custom tag
PSLoader.add_constructor(
'tag:yaml.org,2002:cm.mymodel.ucm.model.uCConf.UCConf',
constructor
)
for entry, in descriptors1[0]:
parsed = yaml.load(entry, Loader=PSLoader)
print(parsed)
然后你会看到解析后的条目是字典,你可以用它来发送请求。
推荐阅读
- node.js - 如何将 64 位 BigInt 写入缓冲区?
- java - 循环 JsonArray 成功,但没有显示任何内容
- dll - Windows 开发环境是否可以访问使用 Windows 10 中的 Linux 子系统构建的库?
- intellij-idea - IntelliJ 无法使用 Subversion 命令行客户端:svn
- javascript - JavaScript:打破我的模态的一段代码
- javascript - 如何为用户端预先填充 Django 中 FilteredSelectMultiple 的选定框?
- css - 由于 MIME,样式表未加载
- python - 如何根据元素的字段过滤numpy数组
- mongodb - 复杂对象中的最佳匹配 Mongodb
- bash - sed 从具有模式的范围中删除行,如果该范围包含另一个模式