sax.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. # defusedxml
  2. #
  3. # Copyright (c) 2013 by Christian Heimes <christian@python.org>
  4. # Licensed to PSF under a Contributor Agreement.
  5. # See https://www.python.org/psf/license for licensing details.
  6. """Defused xml.sax
  7. """
  8. from __future__ import print_function, absolute_import
  9. from xml.sax import InputSource as _InputSource
  10. from xml.sax import ErrorHandler as _ErrorHandler
  11. from . import expatreader
  12. __origin__ = "xml.sax"
  13. def parse(
  14. source,
  15. handler,
  16. errorHandler=_ErrorHandler(),
  17. forbid_dtd=False,
  18. forbid_entities=True,
  19. forbid_external=True,
  20. ):
  21. parser = make_parser()
  22. parser.setContentHandler(handler)
  23. parser.setErrorHandler(errorHandler)
  24. parser.forbid_dtd = forbid_dtd
  25. parser.forbid_entities = forbid_entities
  26. parser.forbid_external = forbid_external
  27. parser.parse(source)
  28. def parseString(
  29. string,
  30. handler,
  31. errorHandler=_ErrorHandler(),
  32. forbid_dtd=False,
  33. forbid_entities=True,
  34. forbid_external=True,
  35. ):
  36. from io import BytesIO
  37. if errorHandler is None:
  38. errorHandler = _ErrorHandler()
  39. parser = make_parser()
  40. parser.setContentHandler(handler)
  41. parser.setErrorHandler(errorHandler)
  42. parser.forbid_dtd = forbid_dtd
  43. parser.forbid_entities = forbid_entities
  44. parser.forbid_external = forbid_external
  45. inpsrc = _InputSource()
  46. inpsrc.setByteStream(BytesIO(string))
  47. parser.parse(inpsrc)
  48. def make_parser(parser_list=[]):
  49. return expatreader.create_parser()