+def post_portmapping(payload: str):
+ url = {'rfc8040': '{}/data/transportpce-portmapping:network',
+ 'draft-bierman02': '{}/config/transportpce-portmapping:network'}
+ json_payload = json.loads(payload)
+ response = post_request(url[RESTCONF_VERSION].format('{}'), json_payload)
+ return {'status_code': response.status_code}
+
+
+def del_portmapping():
+ url = {'rfc8040': '{}/data/transportpce-portmapping:network',
+ 'draft-bierman02': '{}/config/transportpce-portmapping:network'}
+ response = delete_request(url[RESTCONF_VERSION].format('{}'))
+ return {'status_code': response.status_code}
+
+
+def get_portmapping_node_attr(node: str, attr: str, value: str):
+ # pylint: disable=consider-using-f-string
+ url = {'rfc8040': '{}/data/transportpce-portmapping:network/nodes={}',
+ 'draft-bierman02': '{}/config/transportpce-portmapping:network/nodes/{}'}
+ target_url = url[RESTCONF_VERSION].format('{}', node)
+ if attr is not None:
+ target_url = (target_url + '/{}').format('{}', attr)
+ if value is not None:
+ suffix = {'rfc8040': '={}', 'draft-bierman02': '/{}'}
+ target_url = (target_url + suffix[RESTCONF_VERSION]).format('{}', value)
+ else:
+ attr = 'nodes'
+ response = get_request(target_url)
+ res = response.json()
+ return_key = {'rfc8040': 'transportpce-portmapping:' + attr,
+ 'draft-bierman02': attr}
+ if return_key[RESTCONF_VERSION] in res.keys():
+ return_output = res[return_key[RESTCONF_VERSION]]
+ else:
+ return_output = res['errors']['error'][0]
+ return {'status_code': response.status_code,
+ attr: return_output}
+
+#
+# Topology operations
+#
+
+
+def get_ietf_network_request(network: str, content: str):
+ url = {'rfc8040': '{}/data/ietf-network:networks/network={}?content={}',
+ 'draft-bierman02': '{}/{}/ietf-network:networks/network/{}'}
+ if RESTCONF_VERSION == 'rfc8040':
+ format_args = ('{}', network, content)
+ elif content == 'config':
+ format_args = ('{}', content, network)
+ else:
+ format_args = ('{}', 'operational', network)
+ response = get_request(url[RESTCONF_VERSION].format(*format_args))
+ if bool(response):
+ res = response.json()
+ return_key = {'rfc8040': 'ietf-network:network',
+ 'draft-bierman02': 'network'}
+ networks = res[return_key[RESTCONF_VERSION]]
+ else:
+ networks = None
+ return {'status_code': response.status_code,
+ 'network': networks}
+
+
+def put_ietf_network(network: str, payload: str):
+ url = {'rfc8040': '{}/data/ietf-network:networks/network={}',
+ 'draft-bierman02': '{}/config/ietf-network:networks/network/{}'}
+ json_payload = json.loads(payload)
+ response = put_request(url[RESTCONF_VERSION].format('{}', network), json_payload)
+ return {'status_code': response.status_code}
+
+
+def del_ietf_network(network: str):
+ url = {'rfc8040': '{}/data/ietf-network:networks/network={}',
+ 'draft-bierman02': '{}/config/ietf-network:networks/network/{}'}
+ response = delete_request(url[RESTCONF_VERSION].format('{}', network))
+ return {'status_code': response.status_code}
+
+
+def get_ietf_network_link_request(network: str, link: str, content: str):
+ url = {'rfc8040': '{}/data/ietf-network:networks/network={}/ietf-network-topology:link={}?content={}',
+ 'draft-bierman02': '{}/{}/ietf-network:networks/network/{}/ietf-network-topology:link/{}'}
+ if RESTCONF_VERSION == 'rfc8040':
+ format_args = ('{}', network, link, content)
+ elif content == 'config':
+ format_args = ('{}', content, network, link)
+ else:
+ format_args = ('{}', 'operational', network, link)
+ response = get_request(url[RESTCONF_VERSION].format(*format_args))