Просмотр исходного кода

Fixed bug in new version of import_module

master
David Winterbottom 14 лет назад
Родитель
Сommit
aed0d58f82
1 измененных файлов: 15 добавлений и 4 удалений
  1. 15
    4
      oscar/core/loading.py

+ 15
- 4
oscar/core/loading.py Просмотреть файл

@@ -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

Загрузка…
Отмена
Сохранить