Ldap.py

A very simple solution is shown below:

 1  
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from abc import ABC, abstractmethod     # import Abstract Base Classes (ABCs)

class AbstractLDAP(ABC):                # abstract class 
 
    def __init__(self, dnStudents):
        self._dnStudents = dnStudents
        super().__init__()
    
    @abstractmethod                     # every abstract method has to be defined in subclass
    def createStudent(self, username, nameSchoolClass):
        pass
    @abstractmethod
    def deleteStudent(self, username, nameSchoolClass):
        pass
    @abstractmethod
    def createSchoolClass(self, nameSchoolClass):
        pass
    @abstractmethod
    def deleteSchoolClass(self, nmaeSchoolClass):
        pass


from pyad import *                      # import installed pyad module 

class PyAD(AbstractLDAP):
    def createStudent(self, username, nameSchoolClass):
        ouSchoolClass = pyad.adcontainer.ADContainer("ou="+nameSchoolClass+", "+self._dnStudents, adsi_ldap_com_object=None, options={})
        aduser.ADUser.create(username, ouSchoolClass, password=None, upn_suffix=None, enable=True, optional_attributes={})
   
    def deleteStudent(self, username, nameSchoolClass):
        ouSchoolClass = pyad.adcontainer.ADContainer("ou="+nameSchoolClass+", "+self._dnStudents, adsi_ldap_com_object=None, options={})
        ouSchoolClass.from_cn(username).delete()
   
    def createSchoolClass(self, nameSchoolClass):
        ouStudents = pyad.adcontainer.ADContainer(self._dnStudents, adsi_ldap_com_object=None, options={})
        ouStudents.create_container(nameSchoolClass)
   
    def deleteSchoolClass(self, nameSchoolClass):
        ouSchoolClass = pyad.adcontainer.ADContainer("ou="+nameSchoolClass+", "+self._dnStudents, adsi_ldap_com_object=None, options={})
        ouSchoolClass.delete()


Be aware that until now

  • only empty OUs can be deleted and
  • creation of students with the same username is not possible.


testLdap.py

The above class PyAD is tested with:

 1  
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from Ldap import PyAD                      # import class PyAD      
        
ldap = PyAD("ou=Students, ou=SchoolUsers, dc=trainingX, dc=net")

ldap.createSchoolClass("school_class1")
ldap.createStudent("student1", "school_class1")
ldap.createStudent("student2", "school_class1")

ldap.deleteStudent("student1", "school_class1")
ldap.deleteStudent("student2", "school_class1")
# ldap.deleteSchoolClass("school_class1")





Last modified: Sunday, 16 April 2023, 11:48 AM