Show
Ignore:
Timestamp:
10/02/03 22:23:18 (21 years ago)
Author:
jalet
Message:

Storage caching mechanism added.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/pykota/storages/ldapstorage.py

    r1119 r1130  
    2121# 
    2222# $Log$ 
     23# Revision 1.26  2003/10/02 20:23:18  jalet 
     24# Storage caching mechanism added. 
     25# 
    2326# Revision 1.25  2003/08/20 15:56:24  jalet 
    2427# Better user and group deletion 
     
    116119import md5 
    117120 
    118 from pykota.storage import PyKotaStorageError 
    119 from pykota.storage import StorageObject,StorageUser,StorageGroup,StoragePrinter,StorageLastJob,StorageUserPQuota,StorageGroupPQuota 
     121from pykota.storage import PyKotaStorageError,BaseStorage,StorageObject,StorageUser,StorageGroup,StoragePrinter,StorageLastJob,StorageUserPQuota,StorageGroupPQuota 
    120122 
    121123try : 
     
    127129    raise PyKotaStorageError, "This python version (%s) doesn't seem to have the python-ldap module installed correctly." % sys.version.split()[0] 
    128130     
    129 class Storage : 
     131class Storage(BaseStorage) : 
    130132    def __init__(self, pykotatool, host, dbname, user, passwd) : 
    131133        """Opens the LDAP connection.""" 
    132134        # raise PyKotaStorageError, "Sorry, the LDAP backend for PyKota is not yet implemented !" 
    133         self.closed = 1 
    134         self.tool = pykotatool 
    135         self.debug = pykotatool.config.getDebug() 
     135        BaseStorage.__init__(self, pykotatool) 
    136136        self.info = pykotatool.config.getLDAPInfo() 
    137137        try : 
     
    145145        else :     
    146146            self.closed = 0 
    147             if self.debug : 
    148                 self.tool.logger.log_message("Database opened (host=%s, dbname=%s, user=%s)" % (host, dbname, user), "debug") 
    149              
    150     def __del__(self) :         
    151         """Ensures that the database connection is closed.""" 
    152         self.close() 
    153          
     147            self.tool.logdebug("Database opened (host=%s, dbname=%s, user=%s)" % (host, dbname, user)) 
     148             
    154149    def close(self) :     
    155150        """Closes the database connection.""" 
     
    157152            del self.database 
    158153            self.closed = 1 
    159             if self.debug : 
    160                 self.tool.logger.log_message("Database closed.", "debug") 
     154            self.tool.logdebug("Database closed.") 
    161155         
    162156    def genUUID(self) :     
     
    169163    def beginTransaction(self) :     
    170164        """Starts a transaction.""" 
    171         if self.debug : 
    172             self.tool.logger.log_message("Transaction begins... WARNING : No transactions in LDAP !", "debug") 
     165        self.tool.logdebug("Transaction begins... WARNING : No transactions in LDAP !") 
    173166         
    174167    def commitTransaction(self) :     
    175168        """Commits a transaction.""" 
    176         if self.debug : 
    177             self.tool.logger.log_message("Transaction committed. WARNING : No transactions in LDAP !", "debug") 
     169        self.tool.logdebug("Transaction committed. WARNING : No transactions in LDAP !") 
    178170         
    179171    def rollbackTransaction(self) :      
    180172        """Rollbacks a transaction.""" 
    181         if self.debug : 
    182             self.tool.logger.log_message("Transaction aborted. WARNING : No transaction in LDAP !", "debug") 
     173        self.tool.logdebug("Transaction aborted. WARNING : No transaction in LDAP !") 
    183174         
    184175    def doSearch(self, key, fields=None, base="", scope=ldap.SCOPE_SUBTREE) : 
     
    186177        try : 
    187178            base = base or self.basedn 
    188             if self.debug : 
    189                 self.tool.logger.log_message("QUERY : Filter : %s, BaseDN : %s, Scope : %s, Attributes : %s" % (key, base, scope, fields), "debug") 
     179            self.tool.logdebug("QUERY : Filter : %s, BaseDN : %s, Scope : %s, Attributes : %s" % (key, base, scope, fields)) 
    190180            result = self.database.search_s(base or self.basedn, scope, key, fields) 
    191181        except ldap.LDAPError :     
    192182            raise PyKotaStorageError, _("Search for %s(%s) from %s(scope=%s) returned no answer.") % (key, fields, base, scope) 
    193183        else :      
    194             if self.debug : 
    195                 self.tool.logger.log_message("QUERY : Result : %s" % result, "debug") 
     184            self.tool.logdebug("QUERY : Result : %s" % result) 
    196185            return result 
    197186             
     
    199188        """Adds an entry in the LDAP directory.""" 
    200189        try : 
    201             if self.debug : 
    202                 self.tool.logger.log_message("QUERY : ADD(%s, %s)" % (dn, str(fields)), "debug") 
     190            self.tool.logdebug("QUERY : ADD(%s, %s)" % (dn, str(fields))) 
    203191            self.database.add_s(dn, modlist.addModlist(fields)) 
    204192        except ldap.LDAPError : 
     
    210198        """Deletes an entry from the LDAP directory.""" 
    211199        try : 
    212             if self.debug : 
    213                 self.tool.logger.log_message("QUERY : Delete(%s)" % dn, "debug") 
     200            self.tool.logdebug("QUERY : Delete(%s)" % dn) 
    214201            self.database.delete_s(dn) 
    215202        except ldap.LDAPError : 
     
    220207        try : 
    221208            oldentry = self.doSearch("objectClass=*", base=dn, scope=ldap.SCOPE_BASE) 
    222             if self.debug : 
    223                 self.tool.logger.log_message("QUERY : Modify(%s, %s ==> %s)" % (dn, oldentry[0][1], fields), "debug") 
     209            self.tool.logdebug("QUERY : Modify(%s, %s ==> %s)" % (dn, oldentry[0][1], fields)) 
    224210            self.database.modify_s(dn, modlist.modifyModlist(oldentry[0][1], fields, ignore_oldexistent=ignoreold)) 
    225211        except ldap.LDAPError : 
     
    228214            return dn 
    229215             
    230     def getUser(self, username) :     
     216    def getUserFromBackend(self, username) :     
    231217        """Extracts user information given its name.""" 
    232218        user = StorageUser(self, username) 
     
    262248        return user 
    263249        
    264     def getGroup(self, groupname) :     
     250    def getGroupFromBackend(self, groupname) :     
    265251        """Extracts group information given its name.""" 
    266252        group = StorageGroup(self, groupname) 
     
    282268        return group 
    283269        
    284     def getPrinter(self, printername) :         
     270    def getPrinterFromBackend(self, printername) :         
    285271        """Extracts printer information given its name.""" 
    286272        printer = StoragePrinter(self, printername) 
     
    294280            printer.Exists = 1 
    295281        return printer     
    296              
    297     def getUserGroups(self, user) :         
    298         """Returns the user's groups list.""" 
    299         groups = [] 
    300         result = self.doSearch("(&(objectClass=pykotaGroup)(%s=%s))" % (self.info["groupmembers"], user.Name), [self.info["grouprdn"]], base=self.info["groupbase"]) 
    301         if result : 
    302             for (groupid, fields) in result : 
    303                 groups.append(self.getGroup(fields.get(self.info["grouprdn"])[0])) 
    304         return groups         
    305          
    306     def getGroupMembers(self, group) :         
    307         """Returns the group's members list.""" 
    308         groupmembers = [] 
    309         result = self.doSearch("(&(objectClass=pykotaGroup)(|(pykotaGroupName=%s)(%s=%s)))" % (group.Name, self.info["grouprdn"], group.Name), [self.info["groupmembers"]], base=self.info["groupbase"]) 
    310         if result : 
    311             for username in result[0][1].get(self.info["groupmembers"], []) : 
    312                 groupmembers.append(self.getUser(username)) 
    313         return groupmembers         
    314          
    315     def getUserPQuota(self, user, printer) :         
     282         
     283    def getUserPQuotaFromBackend(self, user, printer) :         
    316284        """Extracts a user print quota.""" 
    317285        userpquota = StorageUserPQuota(self, user, printer) 
     
    344312        return userpquota 
    345313         
    346     def getGroupPQuota(self, group, printer) :         
     314    def getGroupPQuotaFromBackend(self, group, printer) :         
    347315        """Extracts a group print quota.""" 
    348316        grouppquota = StorageGroupPQuota(self, group, printer) 
     
    383351        return grouppquota 
    384352         
    385     def getPrinterLastJob(self, printer) :         
     353    def getPrinterLastJobFromBackend(self, printer) :         
    386354        """Extracts a printer's last job information.""" 
    387355        lastjob = StorageLastJob(self, printer) 
     
    409377                lastjob.Exists = 1 
    410378        return lastjob 
     379         
     380    def getUserGroups(self, user) :         
     381        """Returns the user's groups list.""" 
     382        groups = [] 
     383        result = self.doSearch("(&(objectClass=pykotaGroup)(%s=%s))" % (self.info["groupmembers"], user.Name), [self.info["grouprdn"]], base=self.info["groupbase"]) 
     384        if result : 
     385            for (groupid, fields) in result : 
     386                groups.append(self.getGroup(fields.get(self.info["grouprdn"])[0])) 
     387        return groups         
     388         
     389    def getGroupMembers(self, group) :         
     390        """Returns the group's members list.""" 
     391        groupmembers = [] 
     392        result = self.doSearch("(&(objectClass=pykotaGroup)(|(pykotaGroupName=%s)(%s=%s)))" % (group.Name, self.info["grouprdn"], group.Name), [self.info["groupmembers"]], base=self.info["groupbase"]) 
     393        if result : 
     394            for username in result[0][1].get(self.info["groupmembers"], []) : 
     395                groupmembers.append(self.getUser(username)) 
     396        return groupmembers         
    411397         
    412398    def getMatchingPrinters(self, printerpattern) :