summaryrefslogtreecommitdiff
path: root/dev-python/astropy/files/astropy-ply.py
diff options
context:
space:
mode:
Diffstat (limited to 'dev-python/astropy/files/astropy-ply.py')
-rw-r--r--dev-python/astropy/files/astropy-ply.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/dev-python/astropy/files/astropy-ply.py b/dev-python/astropy/files/astropy-ply.py
new file mode 100644
index 000000000000..19eb104c4ca0
--- /dev/null
+++ b/dev-python/astropy/files/astropy-ply.py
@@ -0,0 +1,58 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+"""
+Handle loading ply package from system or from the bundled copy
+"""
+
+import imp
+from distutils.version import StrictVersion
+
+
+def _find_module(name, path=None):
+ """
+ Alternative to `imp.find_module` that can also search in subpackages.
+ """
+
+ parts = name.split('.')
+
+ for part in parts:
+ if path is not None:
+ path = [path]
+
+ fh, path, descr = imp.find_module(part, path)
+
+ return fh, path, descr
+
+_PLY_MIN_VERSION = StrictVersion('3.4')
+
+# Update this to prevent Astropy from using its bundled copy of ply
+# (but only if some other version of at least _PLY_MIN_VERSION can
+# be provided)
+_PLY_SEARCH_PATH = ['ply']
+
+
+for mod_name in _PLY_SEARCH_PATH:
+ try:
+ mod_info = _find_module(mod_name)
+ #mod_lex_info = _find_module(mod_name + '.lex')
+ except ImportError:
+ continue
+
+ mod = imp.load_module(__name__, *mod_info)
+ #mod_lex = imp.load_module(__name__ + '.lex', *mod_lex_info)
+
+ try:
+ # if StrictVersion(mod_lex.__version__) >= _PLY_MIN_VERSION:
+ # break
+ break
+ except (AttributeError, ValueError):
+ # Attribute error if the ply module isn't what it should be and doesn't
+ # have a .__version__; ValueError if the version string exists but is
+ # somehow bogus/unparseable
+ continue
+else:
+ raise ImportError(
+ "Astropy requires the 'ply' module of minimum version {0}; "
+ "normally this is bundled with the astropy package so if you get "
+ "this warning consult the packager of your Astropy "
+ "distribution.".format(_PLY_MIN_VERSION))