Blob Blame History Raw
# 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:
        mod_info = _find_module(mod_name)
        #mod_lex_info = _find_module(mod_name + '.lex')
    except ImportError:

    mod = imp.load_module(__name__, *mod_info)
    #mod_lex = imp.load_module(__name__ + '.lex', *mod_lex_info)

    #    if StrictVersion(mod_lex.__version__) >= _PLY_MIN_VERSION:
    #        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
    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 "