【发布时间】:2021-12-22 11:47:25
【问题描述】:
我正在努力创建一种递归方法来自动在 Odoo 中创建记录。 我请求 SOAP 服务的 WSDL 并对其进行处理,直到收到以下字符串:
{'notificaCertificadoRevocado':{
'input': {
'SolicitudNotificaRevocado':{
'optional': False,
'type': {
'certificado': {
'optional': False,
'type': 'String(value)'
},
'codigoAmbiente': {
'optional': False,
'type': 'Int(value)'
}
}
}
}
}
}
这本词典有 1 个父参数“SolicitudNotificaRevocado”和 2 个子参数“certificado”和“codigoAmbiente”。
目前我的 python 方法如下所示:
def _prepare_parameter_list(self, parameter_dict, recursive_data=False):
building_data = recursive_data if recursive_data else {}
parameter_list = []
for key, value in parameter_dict.items():
if key != 'optional' and key != 'type':
# Create parameters
parameter_name_dict = {
'name': key,
'description': ' '.join(word.capitalize() for word in camel_case_split(key)),
}
characterization_dict = self._prepare_parameter_list(value)
built_parameter_dict = {**parameter_name_dict, **characterization_dict}
parameter_list.append((0, 0, built_parameter_dict))
# TODO: Here the code stops
return parameter_list
else:
if key == 'optional':
building_data = {**building_data, **{'optional': value}}
if key == 'type':
if isinstance(value, dict):
building_data = {**building_data, **{'parameter_ids': self._prepare_parameter_list(value)}}
else:
building_data = {**building_data, **{'type': value.split('(')[0]}}
return building_data
这很好用,只有一个问题,返回的数据具有以下形式:
[(0, 0, {
'name': 'SolicitudOperacionesCuis',
'description': 'Solicitud Operaciones Cuis',
'optional': False,
'parameter_ids': [
(0, 0, {
'name': 'codigoAmbiente',
'description': 'Codigo Ambiente',
'optional': False,
'type': 'Int'})]
})
]
问题是处理其中一个子参数后的方法由于“返回参数列表”部分而停止。 (我什至在问题部分添加了 TODO 注释) 我想检索以下数据:
[(0, 0, {
'name': 'SolicitudOperacionesCuis',
'description': 'Solicitud Operaciones Cuis',
'optional': False,
'parameter_ids': [
(0, 0, {
'name': 'certificado',
'description': 'Certificado',
'optional': False,
'type': 'String'})]
}),
(0, 0, {
'name': 'codigoAmbiente',
'description': 'Codigo Ambiente',
'optional': False,
'type': 'Int'})]
})
]
我应该如何调整我的方法来实现这一点? 使用递归方法很难!
【问题讨论】:
-
在您的预期输出中,parameter_ids 是否应该是两次相同数据的列表。还是输入数据有更多选项可供选择?
-
对不起,我犯了一个错误,我用预期的输出纠正了
-
从您在递归调用发生的
characterization_dict = self._prepare_parameter_list(value)中的命名来看,您似乎在期待一本字典,但在 TODO 之后您的return正在返回一个列表。应该这样吗? -
我知道,这篇文章是关于调整我方法的那一部分。不让这个工作的部分。
标签: python-3.x recursion odoo