Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

flask requires `is_package` from import loaders, however this api is optional since PEP 451 #3275

Closed
asottile opened this issue Jul 1, 2019 · 0 comments

Comments

@asottile
Copy link
Contributor

commented Jul 1, 2019

For more information: pytest-dev/pytest#5532

https://www.python.org/dev/peps/pep-0451/#api-changes

A compliant PEP 451 loader can avoid a lot of the tricky APIs just through implementing find_spect -- in this case is_package is replaced by submodule_search_locations being truthy

I'll see if I can't take a stab at this, it looks like this is a reopen of #487

Here's a minimal example:

import flask

app = flask.Flask(__name__)

def test():
    pass
$ pytest t.py
============================= test session starts ==============================
platform linux -- Python 3.6.7, pytest-5.0.0, py-1.8.0, pluggy-0.12.0
rootdir: /tmp/x
collected 0 items / 1 errors                                                   

==================================== ERRORS ====================================
____________________________ ERROR collecting t.py _____________________________
t.py:3: in <module>
    app = flask.Flask(__name__)
venv/lib/python3.6/site-packages/flask/app.py:381: in __init__
    instance_path = self.auto_find_instance_path()
venv/lib/python3.6/site-packages/flask/app.py:678: in auto_find_instance_path
    prefix, package_path = find_package(self.import_name)
venv/lib/python3.6/site-packages/flask/helpers.py:826: in find_package
    loader, root_mod_name):
venv/lib/python3.6/site-packages/flask/helpers.py:789: in _matching_loader_thinks_module_is_package
    loader.__class__.__name__)
E   AttributeError: AssertionRewritingHook.is_package() method is missing but is required by Flask of PEP 302 import hooks.  If you do not use import hooks and you encounter this error please file a bug against Flask.
!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!
=========================== 1 error in 0.31 seconds ============================
$ pip freeze --all
atomicwrites==1.3.0
attrs==19.1.0
Click==7.0
Flask==1.0.3
importlib-metadata==0.18
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
more-itertools==7.1.0
packaging==19.0
pip==19.1.1
pluggy==0.12.0
py==1.8.0
pyparsing==2.4.0
pytest==5.0.0
setuptools==41.0.1
six==1.12.0
wcwidth==0.1.7
Werkzeug==0.15.4
wheel==0.33.4
zipp==0.5.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants
You can’t perform that action at this time.