improved custom_inport with app-level track changes
This commit is contained in:
@@ -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
@@ -10,22 +10,20 @@ import traceback
|
|||||||
from gluon import current
|
from gluon import current
|
||||||
|
|
||||||
NATIVE_IMPORTER = __builtin__.__import__
|
NATIVE_IMPORTER = __builtin__.__import__
|
||||||
TRACK_CHANGES = False
|
|
||||||
INVALID_MODULES = set(('','gluon','applications','custom_import'))
|
INVALID_MODULES = set(('','gluon','applications','custom_import'))
|
||||||
|
|
||||||
# backward compatibility API
|
# backward compatibility API
|
||||||
def custom_import_install():
|
def custom_import_install():
|
||||||
if __builtin__.__import__ != custom_importer:
|
if __builtin__.__import__ != custom_importer:
|
||||||
INVALID_MODULES = INVALID_MODULES.union(sys.modules.keys())
|
INVALID_MODULES.update(sys.modules.keys())
|
||||||
__builtin__.__import__ = custom_importer
|
__builtin__.__import__ = custom_importer
|
||||||
|
|
||||||
def track_changes(track=True):
|
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"
|
||||||
global TRACK_CHANGES
|
current.request._custom_import_track_changes = track
|
||||||
TRACK_CHANGES = track
|
|
||||||
|
|
||||||
def is_tracking_changes():
|
def is_tracking_changes():
|
||||||
return TRACK_CHANGES
|
return current.request._custom_import_track_changes
|
||||||
|
|
||||||
class CustomImportException(ImportError):
|
class CustomImportException(ImportError):
|
||||||
pass
|
pass
|
||||||
@@ -42,7 +40,13 @@ def custom_importer(name, globals=None, locals=None, fromlist=None, level=-1):
|
|||||||
locals = locals or {}
|
locals = locals or {}
|
||||||
fromlist = fromlist 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 not relative and not from applications:
|
||||||
if hasattr(current,'request') \
|
if hasattr(current,'request') \
|
||||||
|
|||||||
Reference in New Issue
Block a user