On Sat, Jun 27, 2015 at 8:18 AM, Joe Schafer <joesmo...@gmail.com> wrote: > Hi all, > > I'm trying to extend pylint to recognize Werkzeug's import trickery. > > Werkzeug uses a variable called `all_by_module` in > https://github.com/mitsuhiko/werkzeug/blob/master/werkzeug/__init__.py to > lazily load modules. Pylint doesn't recognize this scheme and flags > statements like: > > from werkzeug import secure_filename > > My attempt to fix the problem is at > https://github.com/jschaf/pylint-werkzeug/blob/master/pylint_werkzeug/__init__.py > > I don't think I'm following an optimal path to success. Basically, I'm > trying to recreate Python's import logic and then generate an AST with > astroid. It's not going well. The current solution recurses endlessly, > since creating the AST seems to trigger the pylint transform plugin. I'm > looking for simpler or more robust alternatives to my current approach with > imports. > > My problem seems somewhat related to the issue about changing flask.ext > imports at https://bitbucket.org/logilab/astroid/issue/10/ > > Do you have any suggestions? > > Thanks, > Joe Schafer >
Hi Joe, You could try something similar to the six.moves transform: https://bitbucket.org/logilab/astroid/src/0fa5de5411866d2d17ef0c6f43665f6463e83fa5/astroid/brain/pysix_moves.py?at=default#cl-239 Basically something along these lines: def werkzeug_transform(): code = textwrap.dedent(''' from werkzeug.useragents import UserAgent from werkzeug.http import parse_etags .... ''') return AstroidBuilder().string_build(code) astroid.register_module_extender(MANAGER, 'werkzeug', werkzeug_transform) _______________________________________________ code-quality mailing list code-quality@python.org https://mail.python.org/mailman/listinfo/code-quality