improved custom_inport with app-level track changes

This commit is contained in:
mdipierro
2012-10-15 05:55:45 -05:00
parent b6429ca5fd
commit 9b7e944dea
2 changed files with 11 additions and 7 deletions
+1 -1
View File
@@ -1 +1 @@
Version 2.1.0 (2012-10-15 05:46:52) dev
Version 2.1.0 (2012-10-15 05:55:41) dev
+10 -6
View File
@@ -10,22 +10,20 @@ import traceback
from gluon import current
NATIVE_IMPORTER = __builtin__.__import__
TRACK_CHANGES = False
INVALID_MODULES = set(('','gluon','applications','custom_import'))
# backward compatibility API
def custom_import_install():
if __builtin__.__import__ != custom_importer:
INVALID_MODULES = INVALID_MODULES.union(sys.modules.keys())
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"
global TRACK_CHANGES
TRACK_CHANGES = track
current.request._custom_import_track_changes = track
def is_tracking_changes():
return TRACK_CHANGES
return current.request._custom_import_track_changes
class CustomImportException(ImportError):
pass
@@ -42,7 +40,13 @@ def custom_importer(name, globals=None, locals=None, fromlist=None, level=-1):
locals = locals or {}
fromlist = fromlist or []
base_importer = TRACK_IMPORTER if TRACK_CHANGES else NATIVE_IMPORTER
try:
if current.request._custom_import_track_changes:
base_importer = TRACK_IMPORTER
else:
base_importer = NATIVE_IMPORTER
except: # there is no current.request (should never happen)
base_importer = NATIVE_IMPORTER
# if not relative and not from applications:
if hasattr(current,'request') \