Skip to content

Commit

Permalink
Fix XML pretty print in logs (#280) (#283)
Browse files Browse the repository at this point in the history
* Fix XML pretty print in logs (#280)

Removes whitespace between elements if present and then pretty prints
XML string. Leading or trailing whitespace is preserved in text content.
No spurious new lines are present anymore.

* Fix UTF-8 encoding for logging
  • Loading branch information
111pontes authored and Abhi Keshav committed Oct 27, 2016
1 parent ad0d513 commit 471809f
Showing 1 changed file with 16 additions and 16 deletions.
32 changes: 16 additions & 16 deletions sdk/python/core/ydk/providers/_provider_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,6 @@ def __init__(self, timeout, use_native_client):
else:
self._nc_manager = None
self.netconf_sp_logger = logging.getLogger('ydk.providers.NetconfServiceProvider')
self.separator = '*' * 28
self.timeout = timeout

def encode(self, entity, operation, only_config):
Expand Down Expand Up @@ -214,16 +213,16 @@ def execute_operation(self, payload, operation):

if self.use_native_client:
assert self.ydk_client is not None
reply_str = self.ydk_client.execute_payload(payload)
self.netconf_sp_logger.debug(_get_pretty(reply_str.xml))
return self._handle_rpc_reply(operation, payload, reply_str)
reply = self.ydk_client.execute_payload(payload)
self.netconf_sp_logger.debug('\n%s', _get_pretty(reply.xml))
return self._handle_rpc_reply(operation, payload, reply)
else:
service_provider_rpc = self._create_rpc_instance(self.timeout)
payload = payload.replace("101", service_provider_rpc._id, 1)
self.netconf_sp_logger.debug('\n%s\n%s', self.separator, payload)
reply_str = service_provider_rpc._request(payload)
self.netconf_sp_logger.debug(_get_pretty(reply_str.xml))
return self._handle_rpc_reply(operation, payload, reply_str.xml)
self.netconf_sp_logger.debug('\n%s', payload)
reply = service_provider_rpc._request(payload)
self.netconf_sp_logger.debug('\n%s', _get_pretty(reply.xml))
return self._handle_rpc_reply(operation, payload, reply.xml)

def _create_rpc_instance(self, timeout):
assert self._nc_manager is not None
Expand Down Expand Up @@ -257,25 +256,25 @@ def _handle_rpc_ok(self, optype, payload, reply_str):
self._handle_commit(payload, reply_str)

def _handle_rpc_error(self, payload, reply_str, pathlist):
self.netconf_sp_logger.error('%s\n%s\n%s\n%s' , self.separator, payload, reply_str, self.separator)
self.netconf_sp_logger.error('\n%s\n%s' , payload, reply_str)
raise YPYServiceProviderError(error_code=YPYErrorCode.SERVER_REJ, error_msg=reply_str)

def _handle_commit(self, payload, reply_str):
self.netconf_sp_logger.debug('\n<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">\n <commit/>\n</rpc>')
commit = '<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">\n <commit/>\n</rpc>\n'
self.netconf_sp_logger.debug('\n%s', _get_pretty(commit))
if self.use_native_client:
assert self.ydk_client is not None
rep = self.ydk_client.execute_payload('\n<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">\n <commit/>\n</rpc>')
rep = self.ydk_client.execute_payload(commit)
else:
assert self._nc_manager is not None
rep = self._nc_manager.commit()
rep = rep.xml

if 'ok' not in rep:
self.netconf_sp_logger.error('%s\n%s\n%s\ncommit-reply\n%s\n%s', self.separator,
payload, reply_str, rep, self.separator)
self.netconf_sp_logger.error('\n%s\n%s\ncommit-reply\n%s', payload, reply_str, rep)
raise YPYServiceProviderError(error_code=YPYErrorCode.SERVER_COMMIT_ERR, error_msg=rep)
else:
self.netconf_sp_logger.debug('\n%s' % _get_pretty(reply_str))
self.netconf_sp_logger.debug('\n%s', _get_pretty(reply_str))

def connect(self, session_config):
assert session_config.transportMode == _SessionTransportMode.SSH
Expand Down Expand Up @@ -649,5 +648,6 @@ def check_errors(payload):


def _get_pretty(string):
return minidom.parseString(string).toprettyxml(indent=' ')

parser = etree.XMLParser(remove_blank_text=True)
element = etree.XML(string.encode('UTF-8'), parser)
return etree.tostring(element, encoding='UTF-8', pretty_print=True).decode('UTF-8')

0 comments on commit 471809f

Please sign in to comment.