many pep8 improvements
This commit is contained in:
+30
-23
@@ -10,24 +10,30 @@ import traceback
|
||||
from gluon import current
|
||||
|
||||
NATIVE_IMPORTER = __builtin__.__import__
|
||||
INVALID_MODULES = set(('','gluon','applications','custom_import'))
|
||||
INVALID_MODULES = set(('', 'gluon', 'applications', 'custom_import'))
|
||||
|
||||
# backward compatibility API
|
||||
|
||||
|
||||
def custom_import_install():
|
||||
if __builtin__.__import__ != custom_importer:
|
||||
INVALID_MODULES.update(sys.modules.keys())
|
||||
__builtin__.__import__ = custom_importer
|
||||
|
||||
|
||||
def track_changes(track=True):
|
||||
assert track in (True,False), "must be True or False"
|
||||
assert track in (True, False), "must be True or False"
|
||||
current.request._custom_import_track_changes = track
|
||||
|
||||
|
||||
def is_tracking_changes():
|
||||
return current.request._custom_import_track_changes
|
||||
|
||||
|
||||
class CustomImportException(ImportError):
|
||||
pass
|
||||
|
||||
|
||||
def custom_importer(name, globals=None, locals=None, fromlist=None, level=-1):
|
||||
"""
|
||||
The web2py custom importer. Like the standard Python importer but it
|
||||
@@ -45,25 +51,26 @@ def custom_importer(name, globals=None, locals=None, fromlist=None, level=-1):
|
||||
base_importer = TRACK_IMPORTER
|
||||
else:
|
||||
base_importer = NATIVE_IMPORTER
|
||||
except: # there is no current.request (should never happen)
|
||||
except: # there is no current.request (should never happen)
|
||||
base_importer = NATIVE_IMPORTER
|
||||
|
||||
# if not relative and not from applications:
|
||||
if hasattr(current,'request') \
|
||||
and level<=0 \
|
||||
if hasattr(current, 'request') \
|
||||
and level <= 0 \
|
||||
and not name.split('.')[0] in INVALID_MODULES \
|
||||
and isinstance(globals, dict):
|
||||
import_tb = None
|
||||
try:
|
||||
items = current.request.folder.split(os.path.sep)
|
||||
if not items[-1]: items = items[:-1]
|
||||
modules_prefix = '.'.join(items[-2:])+'.modules'
|
||||
if not items[-1]:
|
||||
items = items[:-1]
|
||||
modules_prefix = '.'.join(items[-2:]) + '.modules'
|
||||
if not fromlist:
|
||||
# import like "import x" or "import x.y"
|
||||
result = None
|
||||
for itemname in name.split("."):
|
||||
new_mod = base_importer(
|
||||
modules_prefix, globals,locals, [itemname], level)
|
||||
modules_prefix, globals, locals, [itemname], level)
|
||||
try:
|
||||
result = result or new_mod.__dict__[itemname]
|
||||
except KeyError, e:
|
||||
@@ -77,16 +84,16 @@ def custom_importer(name, globals=None, locals=None, fromlist=None, level=-1):
|
||||
except ImportError, e1:
|
||||
import_tb = sys.exc_info()[2]
|
||||
try:
|
||||
return NATIVE_IMPORTER(name,globals,locals,fromlist,level)
|
||||
return NATIVE_IMPORTER(name, globals, locals, fromlist, level)
|
||||
except ImportError, e3:
|
||||
raise ImportError, e1, import_tb # there an import error in the module
|
||||
raise ImportError, e1, import_tb # there an import error in the module
|
||||
except Exception, e2:
|
||||
raise e2 # there is an error in the module
|
||||
raise e2 # there is an error in the module
|
||||
finally:
|
||||
if import_tb:
|
||||
import_tb = None
|
||||
|
||||
return NATIVE_IMPORTER(name,globals,locals,fromlist,level)
|
||||
return NATIVE_IMPORTER(name, globals, locals, fromlist, level)
|
||||
|
||||
|
||||
class TrackImporter(object):
|
||||
@@ -96,19 +103,19 @@ class TrackImporter(object):
|
||||
"""
|
||||
|
||||
THREAD_LOCAL = threading.local()
|
||||
PACKAGE_PATH_SUFFIX = os.path.sep+"__init__.py"
|
||||
PACKAGE_PATH_SUFFIX = os.path.sep + "__init__.py"
|
||||
|
||||
def __init__(self):
|
||||
self._import_dates = {} # Import dates of the files of the modules
|
||||
self._import_dates = {} # Import dates of the files of the modules
|
||||
|
||||
def __call__(self,name,globals=None,locals=None,fromlist=None,level=-1):
|
||||
def __call__(self, name, globals=None, locals=None, fromlist=None, level=-1):
|
||||
"""
|
||||
The import method itself.
|
||||
"""
|
||||
globals = globals or {}
|
||||
locals = locals or {}
|
||||
fromlist = fromlist or []
|
||||
if not hasattr(self.THREAD_LOCAL,'_modules_loaded'):
|
||||
if not hasattr(self.THREAD_LOCAL, '_modules_loaded'):
|
||||
self.THREAD_LOCAL._modules_loaded = set()
|
||||
try:
|
||||
# Check the date and reload if needed:
|
||||
@@ -119,7 +126,7 @@ class TrackImporter(object):
|
||||
self._update_dates(name, globals, locals, fromlist, level)
|
||||
return result
|
||||
except Exception, e:
|
||||
raise # Don't hide something that went wrong
|
||||
raise # Don't hide something that went wrong
|
||||
|
||||
def _update_dates(self, name, globals, locals, fromlist, level):
|
||||
"""
|
||||
@@ -143,7 +150,7 @@ class TrackImporter(object):
|
||||
date = self._import_dates.get(file)
|
||||
new_date = None
|
||||
reload_mod = False
|
||||
mod_to_pack = False # Module turning into a package? (special case)
|
||||
mod_to_pack = False # Module turning into a package? (special case)
|
||||
try:
|
||||
new_date = os.path.getmtime(file)
|
||||
except:
|
||||
@@ -154,13 +161,13 @@ class TrackImporter(object):
|
||||
# Get path without file ext:
|
||||
file = os.path.splitext(file)[0]
|
||||
reload_mod = os.path.isdir(file) \
|
||||
and os.path.isfile(file+self.PACKAGE_PATH_SUFFIX)
|
||||
and os.path.isfile(file + self.PACKAGE_PATH_SUFFIX)
|
||||
mod_to_pack = reload_mod
|
||||
else: # Package turning into module?
|
||||
else: # Package turning into module?
|
||||
file += ".py"
|
||||
reload_mod = os.path.isfile(file)
|
||||
if reload_mod:
|
||||
new_date = os.path.getmtime(file) # Refresh file date
|
||||
new_date = os.path.getmtime(file) # Refresh file date
|
||||
if reload_mod or not date or new_date > date:
|
||||
self._import_dates[file] = new_date
|
||||
if reload_mod or (date and new_date > date):
|
||||
@@ -168,7 +175,7 @@ class TrackImporter(object):
|
||||
if mod_to_pack:
|
||||
# Module turning into a package:
|
||||
mod_name = module.__name__
|
||||
del sys.modules[mod_name] # Delete the module
|
||||
del sys.modules[mod_name] # Delete the module
|
||||
# Reload the module:
|
||||
NATIVE_IMPORTER(mod_name, globals, locals, [], level)
|
||||
else:
|
||||
@@ -182,7 +189,7 @@ class TrackImporter(object):
|
||||
file = getattr(module, "__file__", None)
|
||||
if file:
|
||||
# Make path absolute if not:
|
||||
file = os.path.splitext(file)[0]+".py" # Change .pyc for .py
|
||||
file = os.path.splitext(file)[0] + ".py" # Change .pyc for .py
|
||||
if file.endswith(self.PACKAGE_PATH_SUFFIX):
|
||||
file = os.path.dirname(file) # Track dir for packages
|
||||
return file
|
||||
|
||||
Reference in New Issue
Block a user