[SCM] Samba Shared Repository - branch master updated

Jelmer Vernooij jelmer at samba.org
Thu Dec 8 14:09:02 MST 2011


The branch, master has been updated
       via  03e5f58 pyldb: Add more docstrings.
       via  e76c981 samba.drs_utils: Use new style classes and exceptions, fix formatting of docstrings to make pydoctor happy.
       via  452d1ef samba.kcc_utils: Fix formatting to match PEP8, make pydoctor happy.
      from  664eb70 s3-dbwrap: & is not required when taking a function pointer

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 03e5f581aed89b3eea5769a244864a0f9938ac59
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Dec 8 20:28:18 2011 +0100

    pyldb: Add more docstrings.
    
    Autobuild-User: Jelmer Vernooij <jelmer at samba.org>
    Autobuild-Date: Thu Dec  8 22:08:49 CET 2011 on sn-devel-104

commit e76c981c8008668609061755528f59c7ffc483a6
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Dec 8 20:23:57 2011 +0100

    samba.drs_utils: Use new style classes and exceptions, fix formatting of docstrings to make pydoctor happy.

commit 452d1ef8ef9e5eeaec02dfa464ce2f1998761892
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Dec 8 20:20:03 2011 +0100

    samba.kcc_utils: Fix formatting to match PEP8, make pydoctor happy.

-----------------------------------------------------------------------

Summary of changes:
 lib/ldb/pyldb.c                             |   19 +-
 source4/scripting/python/samba/drs_utils.py |   32 ++-
 source4/scripting/python/samba/kcc_utils.py |  460 +++++++++++++--------------
 3 files changed, 245 insertions(+), 266 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/ldb/pyldb.c b/lib/ldb/pyldb.c
index 2f1a6a3..b2315e6 100644
--- a/lib/ldb/pyldb.c
+++ b/lib/ldb/pyldb.c
@@ -2117,6 +2117,7 @@ static PyTypeObject PyLdbModule = {
 	.tp_basicsize = sizeof(PyLdbModuleObject),
 	.tp_dealloc = (destructor)py_ldb_module_dealloc,
 	.tp_flags = Py_TPFLAGS_DEFAULT,
+	.tp_doc = "LDB module (extension)",
 };
 
 
@@ -2436,6 +2437,7 @@ static PyTypeObject PyLdbMessageElement = {
 	.tp_as_sequence = &py_ldb_msg_element_seq,
 	.tp_new = py_ldb_msg_element_new,
 	.tp_flags = Py_TPFLAGS_DEFAULT,
+	.tp_doc = "An element of a Message",
 };
 
 
@@ -2836,6 +2838,7 @@ static PyTypeObject PyLdbMessage = {
 	.tp_flags = Py_TPFLAGS_DEFAULT,
 	.tp_iter = (getiterfunc)py_ldb_msg_iter,
 	.tp_compare = (cmpfunc)py_ldb_msg_compare,
+	.tp_doc = "A LDB Message",
 };
 
 static PyObject *PyLdbTree_FromTree(struct ldb_parse_tree *tree)
@@ -2864,6 +2867,7 @@ static PyTypeObject PyLdbTree = {
 	.tp_basicsize = sizeof(PyLdbTreeObject),
 	.tp_dealloc = (destructor)py_ldb_tree_dealloc,
 	.tp_flags = Py_TPFLAGS_DEFAULT,
+	.tp_doc = "A search tree",
 };
 
 /* Ldb_module */
@@ -3247,24 +3251,25 @@ static PyObject *py_binary_decode(PyObject *self, PyObject *args)
 
 static PyMethodDef py_ldb_global_methods[] = {
 	{ "register_module", py_register_module, METH_VARARGS, 
-		"S.register_module(module) -> None\n"
+		"S.register_module(module) -> None\n\n"
 		"Register a LDB module."},
 	{ "timestring", py_timestring, METH_VARARGS, 
-		"S.timestring(int) -> string\n"
+		"S.timestring(int) -> string\n\n"
 		"Generate a LDAP time string from a UNIX timestamp" },
 	{ "string_to_time", py_string_to_time, METH_VARARGS,
-		"S.string_to_time(string) -> int\n"
+		"S.string_to_time(string) -> int\n\n"
 		"Parse a LDAP time string into a UNIX timestamp." },
 	{ "valid_attr_name", py_valid_attr_name, METH_VARARGS,
-		"S.valid_attr_name(name) -> bool\n"
+		"S.valid_attr_name(name) -> bool\n\nn"
 		"Check whether the supplied name is a valid attribute name." },
 	{ "open", (PyCFunction)py_ldb_new, METH_VARARGS|METH_KEYWORDS,
-		NULL },
+		"S.open() -> Ldb\n\n"
+		"Open a new LDB context." },
 	{ "binary_encode", py_binary_encode, METH_VARARGS,
-		"S.binary_encode(string) -> string\n"
+		"S.binary_encode(string) -> string\n\n"
 		"Perform a RFC2254 binary encoding on a string" },
 	{ "binary_decode", py_binary_decode, METH_VARARGS,
-		"S.binary_decode(string) -> string\n"
+		"S.binary_decode(string) -> string\n\n"
 		"Perform a RFC2254 binary decode on a string" },
 	{ NULL }
 };
diff --git a/source4/scripting/python/samba/drs_utils.py b/source4/scripting/python/samba/drs_utils.py
index 9aacfbc..fe14a8f 100644
--- a/source4/scripting/python/samba/drs_utils.py
+++ b/source4/scripting/python/samba/drs_utils.py
@@ -24,7 +24,7 @@ from samba.net import Net
 import samba, ldb
 
 
-class drsException:
+class drsException(Exception):
     """Base element for drs errors"""
 
     def __init__(self, value):
@@ -35,8 +35,8 @@ class drsException:
 
 
 def drsuapi_connect(server, lp, creds):
-    """
-    make a DRSUAPI connection to the server
+    """Make a DRSUAPI connection to the server.
+
     :param server: the name of the server to connect to
     :param lp: a samba line parameter object
     :param creds: credential used for the connection
@@ -57,15 +57,18 @@ def drsuapi_connect(server, lp, creds):
 
     return (drsuapiBind, drsuapiHandle, bindSupportedExtensions)
 
-def sendDsReplicaSync(drsuapiBind, drsuapi_handle, source_dsa_guid, naming_context, req_option):
-    """
+
+def sendDsReplicaSync(drsuapiBind, drsuapi_handle, source_dsa_guid,
+        naming_context, req_option):
+    """Send DS replica sync request.
+
     :param drsuapiBind: a drsuapi Bind object
     :param drsuapi_handle: a drsuapi hanle on the drsuapi connection
     :param source_dsa_guid: the guid of the source dsa for the replication
     :param naming_context: the DN of the naming context to replicate
     :param req_options: replication options for the DsReplicaSync call
-    :raise drsException: if any error occur while sending and receiving the reply
-                         for the dsReplicaSync
+    :raise drsException: if any error occur while sending and receiving the
+        reply for the dsReplicaSync
     """
 
     nc = drsuapi.DsReplicaObjectIdentifier()
@@ -81,14 +84,17 @@ def sendDsReplicaSync(drsuapiBind, drsuapi_handle, source_dsa_guid, naming_conte
     except Exception, estr:
         raise drsException("DsReplicaSync failed %s" % estr)
 
+
 def sendRemoveDsServer(drsuapiBind, drsuapi_handle, server_dsa_dn, domain):
-    """
+    """Send RemoveDSServer request.
+
     :param drsuapiBind: a drsuapi Bind object
     :param drsuapi_handle: a drsuapi hanle on the drsuapi connection
-    :param server_dsa_dn: a DN object of the server's dsa that we want to demote
+    :param server_dsa_dn: a DN object of the server's dsa that we want to
+        demote
     :param domain: a DN object of the server's domain
-    :raise drsException: if any error occur while sending and receiving the reply
-                         for the DsRemoveDSServer
+    :raise drsException: if any error occur while sending and receiving the
+        reply for the DsRemoveDSServer
     """
 
     try:
@@ -101,6 +107,7 @@ def sendRemoveDsServer(drsuapiBind, drsuapi_handle, server_dsa_dn, domain):
     except Exception, estr:
         raise drsException("DsRemoveDSServer failed %s" % estr)
 
+
 def drs_DsBind(drs):
     '''make a DsBind call, returning the binding handle'''
     bind_info = drsuapi.DsBindInfoCtr()
@@ -139,7 +146,7 @@ def drs_DsBind(drs):
     return (handle, info.info.supported_extensions)
 
 
-class drs_Replicate:
+class drs_Replicate(object):
     '''DRS replication calls'''
 
     def __init__(self, binding_string, lp, creds, samdb):
@@ -239,7 +246,6 @@ class drs_Replicate:
                     setattr(req5, a, getattr(req8, a))
             req = req5
 
-
         while True:
             (level, ctr) = self.drs.DsGetNCChanges(self.drs_handle, req_level, req)
             if ctr.first_object == None and ctr.object_count != 0:
diff --git a/source4/scripting/python/samba/kcc_utils.py b/source4/scripting/python/samba/kcc_utils.py
index 13bc241..f762f4a 100644
--- a/source4/scripting/python/samba/kcc_utils.py
+++ b/source4/scripting/python/samba/kcc_utils.py
@@ -3,6 +3,7 @@
 # KCC topology utilities
 #
 # Copyright (C) Dave Craft 2011
+# Copyright (C) Jelmer Vernooij 2011
 #
 # 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
@@ -17,37 +18,41 @@
 # 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 samba, ldb
+import ldb
 import uuid
 
-from samba              import dsdb
-from samba.dcerpc       import misc
-from samba.dcerpc       import drsblobs
-from samba.dcerpc       import drsuapi
-from samba.common       import dsdb_Dn
-from samba.ndr          import ndr_unpack
-from samba.ndr          import ndr_pack
+from samba import dsdb
+from samba.dcerpc import (
+    drsblobs,
+    drsuapi,
+    misc,
+    )
+from samba.common import dsdb_Dn
+from samba.ndr import (ndr_unpack, ndr_pack)
 
-class NCType:
+
+class NCType(object):
     (unknown, schema, domain, config, application) = range(0, 5)
 
-class NamingContext:
-    """Base class for a naming context.  Holds the DN,
-       GUID, SID (if available) and type of the DN.
-       Subclasses may inherit from this and specialize
+
+class NamingContext(object):
+    """Base class for a naming context.
+
+    Holds the DN, GUID, SID (if available) and type of the DN.
+    Subclasses may inherit from this and specialize
     """
 
     def __init__(self, nc_dnstr, nc_guid=None, nc_sid=None):
         """Instantiate a NamingContext
-            :param nc_dnstr: NC dn string
-            :param nc_guid: NC guid
-            :param nc_sid: NC sid
+
+        :param nc_dnstr: NC dn string
+        :param nc_guid: NC guid
+        :param nc_sid: NC sid
         """
-        self.nc_dnstr    = nc_dnstr
-        self.nc_guid     = nc_guid
-        self.nc_sid      = nc_sid
-        self.nc_type     = NCType.unknown
-        return
+        self.nc_dnstr = nc_dnstr
+        self.nc_guid = nc_guid
+        self.nc_sid = nc_sid
+        self.nc_type = NCType.unknown
 
     def __str__(self):
         '''Debug dump string output of class'''
@@ -56,7 +61,6 @@ class NamingContext:
         text = text + "\n\tnc_guid=%s"  % str(self.nc_guid)
         text = text + "\n\tnc_sid=%s"   % self.nc_sid
         text = text + "\n\tnc_type=%s"  % self.nc_type
-
         return text
 
     def is_schema(self):
@@ -91,15 +95,15 @@ class NamingContext:
             self.nc_type = NCType.domain
         else:
             self.nc_type = NCType.application
-        return
 
     def identify_by_dsa_attr(self, samdb, attr):
         """Given an NC which has been discovered thru the
-           nTDSDSA database object, determine what type of NC
-           it is (i.e. schema, config, domain, application) via
-           the use of the schema attribute under which the NC
-           was found.
-            :param attr: attr of nTDSDSA object where NC DN appears
+        nTDSDSA database object, determine what type of NC
+        it is (i.e. schema, config, domain, application) via
+        the use of the schema attribute under which the NC
+        was found.
+
+        :param attr: attr of nTDSDSA object where NC DN appears
         """
         # If the NC is listed under msDS-HasDomainNCs then
         # this can only be a domain NC and it is our default
@@ -124,29 +128,29 @@ class NamingContext:
         if self.nc_type == NCType.unknown:
             self.identify_by_basedn(samdb)
 
-        return
 
 class NCReplica(NamingContext):
-    """Class defines a naming context replica that is relative
-       to a specific DSA.  This is a more specific form of
-       NamingContext class (inheriting from that class) and it
-       identifies unique attributes of the DSA's replica for a NC.
+    """Naming context replica that is relative to a specific DSA.
+
+    This is a more specific form of NamingContext class (inheriting from that
+    class) and it identifies unique attributes of the DSA's replica for a NC.
     """
 
-    def __init__(self, dsa_dnstr, dsa_guid, nc_dnstr, \
+    def __init__(self, dsa_dnstr, dsa_guid, nc_dnstr,
                  nc_guid=None, nc_sid=None):
         """Instantiate a Naming Context Replica
-            :param dsa_guid: GUID of DSA where replica appears
-            :param nc_dnstr: NC dn string
-            :param nc_guid: NC guid
-            :param nc_sid: NC sid
+
+        :param dsa_guid: GUID of DSA where replica appears
+        :param nc_dnstr: NC dn string
+        :param nc_guid: NC guid
+        :param nc_sid: NC sid
         """
-        self.rep_dsa_dnstr              = dsa_dnstr
-        self.rep_dsa_guid               = dsa_guid
-        self.rep_default                = False # replica for DSA's default domain
-        self.rep_partial                = False
-        self.rep_ro                     = False
-        self.rep_instantiated_flags     = 0
+        self.rep_dsa_dnstr = dsa_dnstr
+        self.rep_dsa_guid = dsa_guid
+        self.rep_default = False # replica for DSA's default domain
+        self.rep_partial = False
+        self.rep_ro = False
+        self.rep_instantiated_flags = 0
 
         # RepsFromTo tuples
         self.rep_repsFrom = []
@@ -160,7 +164,6 @@ class NCReplica(NamingContext):
 
         # Call my super class we inherited from
         NamingContext.__init__(self, nc_dnstr, nc_guid, nc_sid)
-        return
 
     def __str__(self):
         '''Debug dump string output of class'''
@@ -183,13 +186,13 @@ class NCReplica(NamingContext):
             self.rep_instantiated_flags = 0
         else:
             self.rep_instantiated_flags = flags
-        return
 
     def identify_by_dsa_attr(self, samdb, attr):
         """Given an NC which has been discovered thru the
-           nTDSDSA database object, determine what type of NC
-           replica it is (i.e. partial, read only, default)
-            :param attr: attr of nTDSDSA object where NC DN appears
+        nTDSDSA database object, determine what type of NC
+        replica it is (i.e. partial, read only, default)
+
+        :param attr: attr of nTDSDSA object where NC DN appears
         """
         # If the NC was found under hasPartialReplicaNCs
         # then a partial replica at this dsa
@@ -231,11 +234,9 @@ class NCReplica(NamingContext):
         # context type by calling the super class method
         # of the same name
         NamingContext.identify_by_dsa_attr(self, samdb, attr)
-        return
 
     def is_default(self):
-        """Returns True if this is a default domain NC for the dsa
-           that this NC appears on
+        """Whether this is a default domain for the dsa that this NC appears on
         """
         return self.rep_default
 
@@ -249,10 +250,10 @@ class NCReplica(NamingContext):
 
     def is_present(self):
         """Given an NC replica which has been discovered thru the
-           nTDSDSA database object and populated with replica flags
-           from the msDS-HasInstantiatedNCs; return whether the NC
-           replica is present (true) or if the IT_NC_GOING flag is
-           set then the NC replica is not present (false)
+        nTDSDSA database object and populated with replica flags
+        from the msDS-HasInstantiatedNCs; return whether the NC
+        replica is present (true) or if the IT_NC_GOING flag is
+        set then the NC replica is not present (false)
         """
         if self.rep_present_criteria_one and \
            self.rep_instantiated_flags & dsdb.INSTANCE_TYPE_NC_GOING == 0:
@@ -261,28 +262,26 @@ class NCReplica(NamingContext):
 
     def load_repsFrom(self, samdb):
         """Given an NC replica which has been discovered thru the nTDSDSA
-           database object, load the repsFrom attribute for the local replica.
-           held by my dsa.  The repsFrom attribute is not replicated so this
-           attribute is relative only to the local DSA that the samdb exists on
+        database object, load the repsFrom attribute for the local replica.
+        held by my dsa.  The repsFrom attribute is not replicated so this
+        attribute is relative only to the local DSA that the samdb exists on
         """
         try:
             res = samdb.search(base=self.nc_dnstr, scope=ldb.SCOPE_BASE,
                                attrs=[ "repsFrom" ])
 
         except ldb.LdbError, (enum, estr):
-            raise Exception("Unable to find NC for (%s) - (%s)" % \
+            raise Exception("Unable to find NC for (%s) - (%s)" %
                             (self.nc_dnstr, estr))
-            return
 
         msg = res[0]
 
         # Possibly no repsFrom if this is a singleton DC
         if "repsFrom" in msg:
             for value in msg["repsFrom"]:
-                rep = RepsFromTo(self.nc_dnstr, \
+                rep = RepsFromTo(self.nc_dnstr,
                                  ndr_unpack(drsblobs.repsFromToBlob, value))
                 self.rep_repsFrom.append(rep)
-        return
 
     def commit_repsFrom(self, samdb):
         """Commit repsFrom to the database"""
@@ -297,7 +296,7 @@ class NCReplica(NamingContext):
         #       reflect the reference docs.  As of right now this
         #       commit to the database will work as its what the
         #       older KCC also did
-        modify  = False
+        modify = False
         newreps = []
 
         for repsFrom in self.rep_repsFrom:
@@ -318,7 +317,7 @@ class NCReplica(NamingContext):
         if modify == False:
             return
 
-        m    = ldb.Message()
+        m = ldb.Message()
         m.dn = ldb.Dn(samdb, self.nc_dnstr)
 
         m["repsFrom"] = \
@@ -328,9 +327,8 @@ class NCReplica(NamingContext):
             samdb.modify(m)
 
         except ldb.LdbError, estr:
-            raise Exception("Could not set repsFrom for (%s) - (%s)" % \
+            raise Exception("Could not set repsFrom for (%s) - (%s)" %
                             (self.dsa_dnstr, estr))
-        return
 
     def load_fsmo_roles(self, samdb):
         #  XXX - to be implemented
@@ -340,19 +338,22 @@ class NCReplica(NamingContext):
         #  XXX - to be implemented
         return False
 
-class DirectoryServiceAgent:
+
+class DirectoryServiceAgent(object):
 
     def __init__(self, dsa_dnstr):
-        """Initialize DSA class.  Class is subsequently
-           fully populated by calling the load_dsa() method
-           :param dsa_dnstr:  DN of the nTDSDSA
+        """Initialize DSA class.
+
+        Class is subsequently fully populated by calling the load_dsa() method
+
+        :param dsa_dnstr:  DN of the nTDSDSA
         """
-        self.dsa_dnstr     = dsa_dnstr
-        self.dsa_guid      = None
-        self.dsa_ivid      = None
-        self.dsa_is_ro     = False
-        self.dsa_options   = 0
-        self.dsa_behavior  = 0
+        self.dsa_dnstr = dsa_dnstr
+        self.dsa_guid = None
+        self.dsa_ivid = None
+        self.dsa_is_ro = False
+        self.dsa_options = 0
+        self.dsa_behavior = 0
         self.default_dnstr = None  # default domain dn string for dsa
 
         # NCReplicas for this dsa that are "present"
@@ -368,8 +369,6 @@ class DirectoryServiceAgent:
         # in the database.  Indexed by DN string of connection
         self.connect_table = {}
 
-        return
-
     def __str__(self):
         '''Debug dump string output of class'''
 
@@ -407,19 +406,17 @@ class DirectoryServiceAgent:
         return False
 
     def is_minimum_behavior(self, version):
-        """Is dsa at minimum windows level greater than or
-           equal to (version)
-           :param version: Windows version to test against
-                          (e.g. DS_BEHAVIOR_WIN2008)
+        """Is dsa at minimum windows level greater than or equal to (version)
+
+        :param version: Windows version to test against
+            (e.g. DS_BEHAVIOR_WIN2008)
         """
         if self.dsa_behavior >= version:
             return True
         return False
 
     def should_translate_ntdsconn(self):
-        """Returns True if DSA object allows NTDSConnection
-           translation in its options.  False otherwise.
-       """
+        """Whether this allows NTDSConnection translation in its options."""
         if (self.options & dsdb.DS_NTDSDSA_OPT_DISABLE_NTDSCONN_XLATE) != 0:
             return False
         return True
@@ -430,37 +427,33 @@ class DirectoryServiceAgent:
         return self.current_rep_table, self.needed_rep_table


-- 
Samba Shared Repository


More information about the samba-cvs mailing list