s4:netcmd/gpo.py: we don't need to set autogenerated attributes
[metze/samba/wip.git] / source4 / scripting / python / samba / __init__.py
index 6fcac16691ee85af90722701faa0c31abd14ee22..76eb44ce928650cbb39b8e1062d107b845b5d356 100644 (file)
@@ -26,19 +26,25 @@ __docformat__ = "restructuredText"
 
 import os
 import sys
+import samba.param
 
-def in_source_tree():
-    """Check whether the script is being run from the source dir. """
-    return os.path.exists("%s/../../../selftest/skip" % os.path.dirname(__file__))
+def source_tree_topdir():
+    '''return the top level directory (the one containing the source4 directory)'''
+    paths = [ "../../..", "../../../.." ]
+    for p in paths:
+        topdir = os.path.normpath(os.path.join(os.path.dirname(__file__), p))
+        if os.path.exists(os.path.join(topdir, 'source4')):
+            return topdir
+    raise RuntimeError("unable to find top level source directory")
 
+def in_source_tree():
+    '''return True if we are running from within the samba source tree'''
+    try:
+        topdir = source_tree_topdir()
+    except RuntimeError:
+        return False
+    return True
 
-# When running, in-tree, make sure bin/python is in the PYTHONPATH
-if in_source_tree():
-    srcdir = "%s/../../.." % os.path.dirname(__file__)
-    sys.path.append("%s/bin/python" % srcdir)
-    default_ldb_modules_dir = "%s/bin/modules/ldb" % srcdir
-else:
-    default_ldb_modules_dir = None
 
 
 import ldb
@@ -72,10 +78,8 @@ class Ldb(_Ldb):
 
         if modules_dir is not None:
             self.set_modules_dir(modules_dir)
-        elif default_ldb_modules_dir is not None:
-            self.set_modules_dir(default_ldb_modules_dir)
-        elif lp is not None:
-            self.set_modules_dir(os.path.join(lp.get("modules dir"), "ldb"))
+        else:
+            self.set_modules_dir(os.path.join(samba.param.modules_dir(), "ldb"))
 
         if session_info is not None:
             self.set_session_info(session_info)
@@ -315,30 +319,13 @@ def import_bundled_package(modulename, location):
         ${srcdir}/lib)
     """
     if in_source_tree():
-        sys.path.insert(0,
-            os.path.join(os.path.dirname(__file__),
-                         "../../../../lib", location))
-        __import__(modulename)
+        sys.path.insert(0, os.path.join(source_tree_topdir(), "lib", location))
+        sys.modules[modulename] = __import__(modulename)
     else:
         sys.modules[modulename] = __import__(
             "samba.external.%s" % modulename, fromlist=["samba.external"])
 
 
-def force_bundled_package(packagename, location):
-    """Forcibly use the bundled package.
-
-    This will first unload the system module and then load the bundled one.
-
-    :param packagename: The package name
-    :param location: Location to add to sys.path (can be relative to
-        ${srcdir}/lib)
-    """
-    for m in sys.modules.keys():
-        if m.startswith("%s." % packagename):
-            del sys.modules[m]
-    import_bundled_package(packagename, location)
-
-
 def ensure_external_module(modulename, location):
     """Add a location to sys.path if an external dependency can't be found.
 
@@ -362,3 +349,5 @@ nttime2string = _glue.nttime2string
 nttime2unix = _glue.nttime2unix
 unix2nttime = _glue.unix2nttime
 generate_random_password = _glue.generate_random_password
+strcasecmp_m = _glue.strcasecmp_m
+strstr_m = _glue.strstr_m