Skip to content

Commit 2d8a21c

Browse files
committed
Merge branch '0.10-maintenance'
2 parents f3c5bff + 94f4360 commit 2d8a21c

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

CHANGES

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ Version 0.10.2
2121
(bugfix release, release date to be announced)
2222

2323
- Fixed broken `test_appcontext_signals()` test case.
24+
- Raise an :exc:`AttributeError` in :func:`flask.helpers.find_package` with a
25+
useful message explaining why it is raised when a PEP 302 import hook is used
26+
without an `is_package()` method.
2427

2528
Version 0.10.1
2629
--------------

flask/helpers.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -679,8 +679,13 @@ def find_package(import_name):
679679
filename = sys.modules[import_name].__file__
680680
package_path = os.path.abspath(os.path.dirname(filename))
681681
# package_path ends with __init__.py for a package
682-
if loader.is_package(root_mod_name):
683-
package_path = os.path.dirname(package_path)
682+
if hasattr(loader, 'is_package'):
683+
if loader.is_package(root_mod_name):
684+
package_path = os.path.dirname(package_path)
685+
else:
686+
raise AttributeError(
687+
('%s.is_package() method is missing but is '
688+
'required by Flask of PEP 302 import hooks') % loader.__class__.__name__)
684689

685690
site_parent, site_folder = os.path.split(package_path)
686691
py_prefix = os.path.abspath(sys.prefix)

flask/testsuite/config.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import unittest
1717
from contextlib import contextmanager
1818
from flask.testsuite import FlaskTestCase
19+
from flask._compat import PY2
1920

2021

2122
# config keys used for the ConfigTestCase
@@ -291,6 +292,18 @@ def test_egg_installed_paths(self):
291292
if 'site_egg' in sys.modules:
292293
del sys.modules['site_egg']
293294

295+
if PY2:
296+
def test_meta_path_loader_without_is_package(self):
297+
class Loader(object):
298+
def find_module(self, name):
299+
return self
300+
sys.meta_path.append(Loader())
301+
try:
302+
with self.assert_raises(AttributeError):
303+
flask.Flask(__name__)
304+
finally:
305+
sys.meta_path.pop()
306+
294307

295308
def suite():
296309
suite = unittest.TestSuite()

0 commit comments

Comments
 (0)