Przeglądaj źródła

Fixed bug in new version of import_module

master
David Winterbottom 14 lat temu
rodzic
commit
aed0d58f82
1 zmienionych plików z 15 dodań i 4 usunięć
  1. 15
    4
      oscar/core/loading.py

+ 15
- 4
oscar/core/loading.py Wyświetl plik

46
                     try:
46
                     try:
47
                         imported_local_mod = __import__(local_app, fromlist=classes)
47
                         imported_local_mod = __import__(local_app, fromlist=classes)
48
                     except ImportError, e:
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
                     module = new_module(local_app)
57
                     module = new_module(local_app)
53
                     imported_oscar_mod = __import__("oscar.apps.%s" % module_label, fromlist=classes)
58
                     imported_oscar_mod = __import__("oscar.apps.%s" % module_label, fromlist=classes)
54
                     for classname in classes:
59
                     for classname in classes:
55
                         if hasattr(imported_local_mod, classname):
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
                         else:
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
                 return module
70
                 return module
60
         except IndexError:
71
         except IndexError:
61
             pass
72
             pass

Ładowanie…
Anuluj
Zapisz