Skip to content

Commit

Permalink
Merge pull request #354 from Juniper/junos-sax-parser
Browse files Browse the repository at this point in the history
Junos sax parser
  • Loading branch information
vnitinv committed Nov 13, 2019
2 parents 60c3d36 + 8b7a114 commit b59b5ab
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 10 deletions.
2 changes: 1 addition & 1 deletion ncclient/transport/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ def _parse10(self):
# buffer, so we should try to parse again.
if type(self._session.parser) != DefaultXMLParser:
self.logger.debug('send remaining data to SAX parser')
self._session.parser.parse(remaining)
self._session.parser.parse(remaining.encode())
else:
self.logger.debug('Trying another round of parsing since there is still data')
self._session._buffer.write(remaining.encode())
Expand Down
13 changes: 4 additions & 9 deletions ncclient/transport/third_party/junos/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,24 +74,18 @@ def _delimiter_check(self, data):
msg, delim, remaining = data.partition(MSG_DELIM)
self._session._buffer.seek(0, os.SEEK_END)
self._session._buffer.write(delim.encode())
if remaining.strip() != '':
self._session._buffer.write(remaining.encode())
# we need to renew parser, as old parser is gone.
self.sax_parser = make_parser()
self.sax_parser.setContentHandler(SAXParser(self._session))
if remaining.strip() != '':
try:
self.sax_parser.feed(remaining)
except SAXFilterXMLNotFoundError:
self._parse10()
self.logger.debug('switching from sax to dom parsing')
self._session.parser = DefaultXMLParser(self._session)
self._session.parser.parse(remaining.encode())
elif RPC_REPLY_END_TAG in data:
logger.warning("Check for rpc reply end tag within data received: %s" % data)
msg, delim, remaining = data.partition(RPC_REPLY_END_TAG)
self._session._buffer.seek(0, os.SEEK_END)
self._session._buffer.write(remaining.encode())
else:
logger.warning("Check if end delimiter is splitted within data received: %s" % data)
logger.warning("Check if end delimiter is split within data received: %s" % data)
# When data is "-reply/>]]>" or "]]>"
# Data is not full MSG_DELIM, So check if last rpc reply is complete.
# if then, wait for next iteration of data and do a recursive call to
Expand Down Expand Up @@ -124,6 +118,7 @@ def _delimiter_check(self, data):
else:
self._delimiter_check((rpc_response_last_msg + data).encode())


def __dict_replace(s, d):
"""Replace substrings of a string using a dictionary."""
for key, value in d.items():
Expand Down

0 comments on commit b59b5ab

Please sign in to comment.