s4-python: Simplify mechanism for finding included Python modules.
authorJelmer Vernooij <jelmer@samba.org>
Mon, 29 Mar 2010 14:21:26 +0000 (16:21 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Mon, 29 Mar 2010 16:05:29 +0000 (18:05 +0200)
source4/scripting/bin/samba_dnsupdate
source4/scripting/python/samba/__init__.py
source4/scripting/python/samba/external.py [deleted file]

index fab112e2bd9ad3f87a5fd823c66a9808b8c78cc6..8a7b8a4e344e8180032c78dce8a0b39f90bbd37c 100755 (executable)
@@ -37,9 +37,9 @@ from ldb import SCOPE_BASE
 from samba import glue
 from samba.auth import system_session
 from samba.samdb import SamDB
-import samba.external
 
-resolver = samba.external.dns_resolver()
+samba.ensure_external_module("dns.resolver", "dnspython")
+import dns.resolver as resolver
 
 default_ttl = 900
 
index 24bb45a003fe1ff2ea1a9cb36b48fae07d5f81d9..87753b5a1dd9cfa8ba5e87a22985f7dbc6c06afc 100644 (file)
@@ -392,6 +392,21 @@ def valid_netbios_name(name):
     return True
 
 
+def ensure_external_module(modulename, location):
+    """Add a location to sys.path if an external dependency can't be found.
+
+    :param modulename: Module name to import
+    :param location: Location to add to sys.path (can be relative to 
+        ${srcdir}/lib
+    """
+    try:
+        __import__(modulename)
+    except ImportError:
+        sys.path.insert(0, 
+            os.path.join(os.path.dirname(__file__),
+                         "../../../../lib", location))
+        __import__(modulename)
+
 version = glue.version
 
 # "userAccountControl" flags
diff --git a/source4/scripting/python/samba/external.py b/source4/scripting/python/samba/external.py
deleted file mode 100644 (file)
index 40d13fd..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/python
-
-# Unix SMB/CIFS implementation.
-# Copyright (C) Andrew Tridgell 2010
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-
-import os, sys
-
-def dns_resolver():
-    '''try and import the dns.resolver library, and if it fails
-    then use a local copy from the external directory'''
-
-    try:
-        import dns.resolver as dns
-    except ImportError:
-        sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../../../../lib/dnspython"))
-        import dns.resolver as dns
-    return dns