python: Added a simple function for doing directory-local "imports".
authorFredrik Tolf <fredrik@dolda2000.com>
Sat, 1 Sep 2012 04:36:20 +0000 (06:36 +0200)
committerFredrik Tolf <fredrik@dolda2000.com>
Sat, 1 Sep 2012 04:36:20 +0000 (06:36 +0200)
python/ashd/wsgidir.py
python3/ashd/wsgidir.py

index d406c35..1fc66f9 100644 (file)
@@ -110,6 +110,27 @@ def getmod(path):
     finally:
         entry[0].release()
 
+def importlocal(filename):
+    import inspect
+    cf = inspect.currentframe()
+    if cf is None: raise ImportError("could not get current frame")
+    if cf.f_back is None: raise ImportError("could not get caller frame")
+    cfile = cf.f_back.f_code.co_filename
+    if not os.path.exists(cfile):
+        raise ImportError("caller is not in a proper file")
+    path = os.path.realpath(os.path.join(os.path.dirname(cfile), filename))
+    if '.' not in os.path.basename(path):
+        for ext in [".pyl", ".py"]:
+            if os.path.exists(path + ext):
+                path += ext
+                break
+        else:
+            raise ImportError("could not resolve file: " + filename)
+    else:
+        if not os.path.exists(cfile):
+            raise ImportError("no such file: " + filename)
+    return getmod(path).mod
+
 class handler(object):
     def __init__(self):
         self.lock = threading.Lock()
index fc7e9ab..c6fa1ad 100644 (file)
@@ -101,6 +101,27 @@ def getmod(path):
             entry[1] = cachedmod(mod, sb.st_mtime)
         return entry[1]
 
+def importlocal(filename):
+    import inspect
+    cf = inspect.currentframe()
+    if cf is None: raise ImportError("could not get current frame")
+    if cf.f_back is None: raise ImportError("could not get caller frame")
+    cfile = cf.f_back.f_code.co_filename
+    if not os.path.exists(cfile):
+        raise ImportError("caller is not in a proper file")
+    path = os.path.realpath(os.path.join(os.path.dirname(cfile), filename))
+    if '.' not in os.path.basename(path):
+        for ext in [".pyl", ".py"]:
+            if os.path.exists(path + ext):
+                path += ext
+                break
+        else:
+            raise ImportError("could not resolve file: " + filename)
+    else:
+        if not os.path.exists(cfile):
+            raise ImportError("no such file: " + filename)
+    return getmod(path).mod
+
 class handler(object):
     def __init__(self):
         self.lock = threading.Lock()