|
|
@@ -46,16 +46,27 @@ def import_module(module_label, classes=[], namespace=None):
|
|
46
|
46
|
try:
|
|
47
|
47
|
imported_local_mod = __import__(local_app, fromlist=classes)
|
|
48
|
48
|
except ImportError, e:
|
|
49
|
|
- # Module doesn't exist, fall back to oscar core
|
|
50
|
|
- return _import_classes_from_module("oscar.apps.%s" % module_label, classes, namespace)
|
|
|
49
|
+ # Module doesn't exist, fall back to oscar core. This can be tricky
|
|
|
50
|
+ # as if the overriding module has an import error, it will get picked up
|
|
|
51
|
+ # here.
|
|
|
52
|
+ if str(e).startswith("No module named"):
|
|
|
53
|
+ return _import_classes_from_module("oscar.apps.%s" % module_label, classes, namespace)
|
|
|
54
|
+ raise e
|
|
51
|
55
|
|
|
|
56
|
+ # Found overriding module, merging custom classes with core
|
|
52
|
57
|
module = new_module(local_app)
|
|
53
|
58
|
imported_oscar_mod = __import__("oscar.apps.%s" % module_label, fromlist=classes)
|
|
54
|
59
|
for classname in classes:
|
|
55
|
60
|
if hasattr(imported_local_mod, classname):
|
|
56
|
|
- module.__setattr__(classname, getattr(imported_local_mod, classname))
|
|
|
61
|
+ if namespace:
|
|
|
62
|
+ namespace[classname] = getattr(imported_local_mod, classname)
|
|
|
63
|
+ else:
|
|
|
64
|
+ module.__setattr__(classname, getattr(imported_local_mod, classname))
|
|
57
|
65
|
else:
|
|
58
|
|
- module.__setattr__(classname, getattr(imported_oscar_mod, classname))
|
|
|
66
|
+ if namespace:
|
|
|
67
|
+ namespace[classname] = getattr(imported_oscar_mod, classname)
|
|
|
68
|
+ else:
|
|
|
69
|
+ module.__setattr__(classname, getattr(imported_oscar_mod, classname))
|
|
59
|
70
|
return module
|
|
60
|
71
|
except IndexError:
|
|
61
|
72
|
pass
|