mirror of https://github.com/mitsuhiko/flask.git
Armin Ronacher
13 years ago
1 changed files with 54 additions and 0 deletions
@ -0,0 +1,54 @@
|
||||
# -*- coding: utf-8 -*- |
||||
""" |
||||
flask.ext |
||||
~~~~~~~~~ |
||||
|
||||
Redirect imports for extensions. This module basically makes it possible |
||||
for us to transition from flaskext.foo to flask_foo without having to |
||||
force all extensions to upgrade at the same time. |
||||
|
||||
When a user does ``from flask.ext.foo import bar`` it will attempt to |
||||
imprt ``from flask_foo import bar`` first and when that fails it will |
||||
try to import ``from flaskext.foo import bar``. |
||||
|
||||
We're switching from namespace packages because it was just too painful for |
||||
everybody involved. |
||||
|
||||
:copyright: (c) 2011 by Armin Ronacher. |
||||
:license: BSD, see LICENSE for more details. |
||||
""" |
||||
import sys |
||||
|
||||
|
||||
class _ExtensionImporter(object): |
||||
"""This importer redirects imports from this submodule to other |
||||
locations. This makes it possible to transition from the old |
||||
flaskext.name to the newer flask_name without people having a |
||||
hard time. |
||||
""" |
||||
_module_choices = ['flask_%s', 'flaskext.%s'] |
||||
_modules = sys.modules |
||||
|
||||
def find_module(self, fullname, path=None): |
||||
if fullname.rsplit('.', 1)[0] == __name__: |
||||
return self |
||||
|
||||
def load_module(self, fullname): |
||||
if fullname in self._modules: |
||||
return self._modules[fullname] |
||||
packname, modname = fullname.rsplit('.', 1) |
||||
for path in self._module_choices: |
||||
realname = path % modname |
||||
try: |
||||
__import__(realname) |
||||
except ImportError: |
||||
continue |
||||
module = self._modules[fullname] = self._modules[realname] |
||||
setattr(self._modules[__name__], modname, module) |
||||
module.__loader__ = self |
||||
return module |
||||
raise ImportError(fullname) |
||||
|
||||
|
||||
sys.meta_path.append(_ExtensionImporter()) |
||||
del sys, _ExtensionImporter |
Loading…
Reference in new issue