Created
January 6, 2016 13:21
-
-
Save amiraliakbari/213b84abe00297fce59b to your computer and use it in GitHub Desktop.
ensure_elementtree_imported
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ET = None | |
ET_has_iterparse = False | |
def ensure_elementtree_imported(verbosity, logfile): | |
global ET, ET_has_iterparse | |
if ET is not None: | |
return | |
if "IronPython" in sys.version: | |
import xml.etree.ElementTree as ET | |
#### 2.7.2.1: fails later with | |
#### NotImplementedError: iterparse is not supported on IronPython. (CP #31923) | |
else: | |
try: import xml.etree.cElementTree as ET | |
except ImportError: | |
try: import cElementTree as ET | |
except ImportError: | |
try: import lxml.etree as ET | |
except ImportError: | |
try: import xml.etree.ElementTree as ET | |
except ImportError: | |
try: import elementtree.ElementTree as ET | |
except ImportError: | |
raise Exception("Failed to import an ElementTree implementation") | |
if hasattr(ET, 'iterparse'): | |
_dummy_stream = BYTES_IO(b'') | |
try: | |
ET.iterparse(_dummy_stream) | |
ET_has_iterparse = True | |
except NotImplementedError: | |
pass | |
if verbosity: | |
etree_version = repr([ | |
(item, getattr(ET, item)) | |
for item in ET.__dict__.keys() | |
if item.lower().replace('_', '') == 'version' | |
]) | |
print(ET.__file__, ET.__name__, etree_version, ET_has_iterparse, file=logfile) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment