From 9b7e944dea7801fa2e8dc259c16c6bd6e85450e6 Mon Sep 17 00:00:00 2001 From: mdipierro Date: Mon, 15 Oct 2012 05:55:45 -0500 Subject: [PATCH] improved custom_inport with app-level track changes --- VERSION | 2 +- gluon/custom_import.py | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/VERSION b/VERSION index cb56b666..9a1203ec 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.1.0 (2012-10-15 05:46:52) dev +Version 2.1.0 (2012-10-15 05:55:41) dev diff --git a/gluon/custom_import.py b/gluon/custom_import.py index af44308b..6db23d2e 100644 --- a/gluon/custom_import.py +++ b/gluon/custom_import.py @@ -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') \