Commits

Corey Oordt committed ac67cb9

Fix for Django 1.1.1 compatibility.

Comments (0)

Files changed (4)

selectable/__init__.py

     'major': 0,
     'minor': 4,
     'micro': 0,
-    'releaselevel': 'final',
+    'releaselevel': 'a1',
 }
 
 def get_version():

selectable/forms/fields.py

 from django import forms
 from django.core.exceptions import ValidationError
-from django.core.validators import EMPTY_VALUES
+try:
+    from django.core.validators import EMPTY_VALUES
+except ImportError:
+    EMPTY_VALUES = (None, '', [], (), {})
 from django.utils.translation import ugettext as _
 
 from selectable.forms.widgets import AutoCompleteSelectWidget, AutoComboboxSelectWidget

selectable/module_loading.py

+import imp
+import os
+import sys
+
+
+def module_has_submodule(package, module_name):
+    """See if 'module' is in 'package'."""
+    name = ".".join([package.__name__, module_name])
+    try:
+        # None indicates a cached miss; see mark_miss() in Python/import.c.
+        return sys.modules[name] is not None
+    except KeyError:
+        pass
+    try:
+        package_path = package.__path__   # No __path__, then not a package.
+    except AttributeError:
+        # Since the remainder of this function assumes that we're dealing with
+        # a package (module with a __path__), so if it's not, then bail here.
+        return False
+    for finder in sys.meta_path:
+        if finder.find_module(name, package_path):
+            return True
+    for entry in package_path:
+        try:
+            # Try the cached finder.
+            finder = sys.path_importer_cache[entry]
+            if finder is None:
+                # Implicit import machinery should be used.
+                try:
+                    file_, _, _ = imp.find_module(module_name, [entry])
+                    if file_:
+                        file_.close()
+                    return True
+                except ImportError:
+                    continue
+            # Else see if the finder knows of a loader.
+            elif finder.find_module(name):
+                return True
+            else:
+                continue
+        except KeyError:
+            # No cached finder, so try and make one.
+            for hook in sys.path_hooks:
+                try:
+                    finder = hook(entry)
+                    # XXX Could cache in sys.path_importer_cache
+                    if finder.find_module(name):
+                        return True
+                    else:
+                        # Once a finder is found, stop the search.
+                        break
+                except ImportError:
+                    # Continue the search for a finder.
+                    continue
+            else:
+                # No finder found.
+                # Try the implicit import machinery if searching a directory.
+                if os.path.isdir(entry):
+                    try:
+                        file_, _, _ = imp.find_module(module_name, [entry])
+                        if file_:
+                            file_.close()
+                        return True
+                    except ImportError:
+                        pass
+                # XXX Could insert None or NullImporter
+    else:
+        # Exhausted the search, so the module cannot be found.
+        return False

selectable/registry.py

     import copy
     from django.conf import settings
     from django.utils.importlib import import_module
-    from django.utils.module_loading import module_has_submodule
+    from module_loading import module_has_submodule
 
     for app in settings.INSTALLED_APPS:
         mod = import_module(app)