Changeset 1991 for pykota/trunk/pykota

Show
Ignore:
Timestamp:
12/21/04 16:50:00 (19 years ago)
Author:
jalet
Message:

The dumpykota command now supports extended filtering capabilities with
the PostgreSQL backend. LDAP doesn't yet support such possibilities.

Location:
pykota/trunk/pykota
Files:
2 modified

Legend:

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

    r1990 r1991  
    2222# 
    2323# $Log$ 
     24# Revision 1.61  2004/12/21 15:49:59  jalet 
     25# The dumpykota command now supports extended filtering capabilities with 
     26# the PostgreSQL backend. LDAP doesn't yet support such possibilities. 
     27# 
    2428# Revision 1.60  2004/12/21 14:45:31  jalet 
    2529# Prepared dumpykota to accept the new --filter command line option. Some 
     
    136140            return entries 
    137141         
     142    def createFilter(self, only) :     
     143        """Returns the appropriate SQL filter.""" 
     144        if only : 
     145            expressions = [] 
     146            for (k, v) in only.items() : 
     147                expressions.append("%s=%s" % (k, self.doQuote(v))) 
     148            return " AND ".join(expressions)      
     149        return ""         
     150         
    138151    def extractPrinters(self, extractonly={}) : 
    139152        """Extracts all printer records.""" 
    140         result = self.doRawSearch("SELECT * FROM printers ORDER BY id ASC") 
     153        thefilter = self.createFilter(extractonly) 
     154        if thefilter : 
     155            thefilter = "WHERE %s" % thefilter 
     156        result = self.doRawSearch("SELECT * FROM printers %s ORDER BY id ASC" % thefilter) 
    141157        return self.prepareRawResult(result) 
    142158         
    143159    def extractUsers(self, extractonly={}) : 
    144160        """Extracts all user records.""" 
    145         result = self.doRawSearch("SELECT * FROM users ORDER BY id ASC") 
     161        thefilter = self.createFilter(extractonly) 
     162        if thefilter : 
     163            thefilter = "WHERE %s" % thefilter 
     164        result = self.doRawSearch("SELECT * FROM users %s ORDER BY id ASC" % thefilter) 
    146165        return self.prepareRawResult(result) 
    147166         
    148167    def extractGroups(self, extractonly={}) : 
    149168        """Extracts all group records.""" 
    150         result = self.doRawSearch("SELECT groups.*,COALESCE(SUM(balance), 0) AS balance, COALESCE(SUM(lifetimepaid), 0) as lifetimepaid FROM groups LEFT OUTER JOIN users ON users.id IN (SELECT userid FROM groupsmembers WHERE groupid=groups.id) GROUP BY groups.id,groups.groupname,groups.limitby ORDER BY groups.id ASC") 
     169        thefilter = self.createFilter(extractonly) 
     170        if thefilter : 
     171            thefilter = "WHERE %s" % thefilter 
     172        result = self.doRawSearch("SELECT groups.*,COALESCE(SUM(balance), 0) AS balance, COALESCE(SUM(lifetimepaid), 0) as lifetimepaid FROM groups LEFT OUTER JOIN users ON users.id IN (SELECT userid FROM groupsmembers WHERE groupid=groups.id) %s GROUP BY groups.id,groups.groupname,groups.limitby ORDER BY groups.id ASC" % thefilter) 
    151173        return self.prepareRawResult(result) 
    152174         
    153175    def extractPayments(self, extractonly={}) : 
    154176        """Extracts all payment records.""" 
    155         result = self.doRawSearch("SELECT username,payments.* FROM users,payments WHERE users.id=payments.userid ORDER BY payments.id ASC") 
     177        thefilter = self.createFilter(extractonly) 
     178        if thefilter : 
     179            thefilter = "AND %s" % thefilter 
     180        result = self.doRawSearch("SELECT username,payments.* FROM users,payments WHERE users.id=payments.userid %s ORDER BY payments.id ASC" % thefilter) 
    156181        return self.prepareRawResult(result) 
    157182         
    158183    def extractUpquotas(self, extractonly={}) : 
    159184        """Extracts all userpquota records.""" 
    160         result = self.doRawSearch("SELECT users.username,printers.printername,userpquota.* FROM users,printers,userpquota WHERE users.id=userpquota.userid AND printers.id=userpquota.printerid ORDER BY userpquota.id ASC") 
     185        thefilter = self.createFilter(extractonly) 
     186        if thefilter : 
     187            thefilter = "AND %s" % thefilter 
     188        result = self.doRawSearch("SELECT users.username,printers.printername,userpquota.* FROM users,printers,userpquota WHERE users.id=userpquota.userid AND printers.id=userpquota.printerid %s ORDER BY userpquota.id ASC" % thefilter) 
    161189        return self.prepareRawResult(result) 
    162190         
    163191    def extractGpquotas(self, extractonly={}) : 
    164192        """Extracts all grouppquota records.""" 
    165         result = self.doRawSearch("SELECT groups.groupname,printers.printername,grouppquota.*,coalesce(sum(pagecounter), 0) AS pagecounter,coalesce(sum(lifepagecounter), 0) AS lifepagecounter FROM groups,printers,grouppquota,userpquota WHERE groups.id=grouppquota.groupid AND printers.id=grouppquota.printerid AND userpquota.printerid=grouppquota.printerid AND userpquota.userid IN (SELECT userid FROM groupsmembers WHERE groupsmembers.groupid=grouppquota.groupid) GROUP BY grouppquota.id,grouppquota.groupid,grouppquota.printerid,grouppquota.softlimit,grouppquota.hardlimit,grouppquota.datelimit,groups.groupname,printers.printername ORDER BY grouppquota.id") 
     193        thefilter = self.createFilter(extractonly) 
     194        if thefilter : 
     195            thefilter = "AND %s" % thefilter 
     196        result = self.doRawSearch("SELECT groups.groupname,printers.printername,grouppquota.*,coalesce(sum(pagecounter), 0) AS pagecounter,coalesce(sum(lifepagecounter), 0) AS lifepagecounter FROM groups,printers,grouppquota,userpquota WHERE groups.id=grouppquota.groupid AND printers.id=grouppquota.printerid AND userpquota.printerid=grouppquota.printerid AND userpquota.userid IN (SELECT userid FROM groupsmembers WHERE groupsmembers.groupid=grouppquota.groupid) %s GROUP BY grouppquota.id,grouppquota.groupid,grouppquota.printerid,grouppquota.softlimit,grouppquota.hardlimit,grouppquota.datelimit,groups.groupname,printers.printername ORDER BY grouppquota.id" % thefilter) 
    166197        return self.prepareRawResult(result) 
    167198         
    168199    def extractUmembers(self, extractonly={}) : 
    169200        """Extracts all user groups members.""" 
    170         result = self.doRawSearch("SELECT groups.groupname, users.username, groupsmembers.* FROM groups,users,groupsmembers WHERE users.id=groupsmembers.userid AND groups.id=groupsmembers.groupid ORDER BY groupsmembers.groupid, groupsmembers.userid ASC") 
     201        thefilter = self.createFilter(extractonly) 
     202        if thefilter : 
     203            thefilter = "AND %s" % thefilter 
     204        result = self.doRawSearch("SELECT groups.groupname, users.username, groupsmembers.* FROM groups,users,groupsmembers WHERE users.id=groupsmembers.userid AND groups.id=groupsmembers.groupid %s ORDER BY groupsmembers.groupid, groupsmembers.userid ASC" % thefilter) 
    171205        return self.prepareRawResult(result) 
    172206         
    173207    def extractPmembers(self, extractonly={}) : 
    174208        """Extracts all printer groups members.""" 
    175         result = self.doRawSearch("SELECT p1.printername as pgroupname, p2.printername as printername, printergroupsmembers.* FROM printers p1, printers p2, printergroupsmembers WHERE p1.id=printergroupsmembers.groupid AND p2.id=printergroupsmembers.printerid ORDER BY printergroupsmembers.groupid, printergroupsmembers.printerid ASC") 
     209        thefilter = self.createFilter(extractonly) 
     210        if thefilter : 
     211            thefilter = "AND %s" % thefilter 
     212        result = self.doRawSearch("SELECT p1.printername as pgroupname, p2.printername as printername, printergroupsmembers.* FROM printers p1, printers p2, printergroupsmembers WHERE p1.id=printergroupsmembers.groupid AND p2.id=printergroupsmembers.printerid %s ORDER BY printergroupsmembers.groupid, printergroupsmembers.printerid ASC" % thefilter) 
    176213        return self.prepareRawResult(result) 
    177214         
    178215    def extractHistory(self, extractonly={}) : 
    179216        """Extracts all jobhistory records.""" 
    180         result = self.doRawSearch("SELECT users.username,printers.printername,jobhistory.* FROM users,printers,jobhistory WHERE users.id=jobhistory.userid AND printers.id=jobhistory.printerid ORDER BY jobhistory.id ASC") 
     217        thefilter = self.createFilter(extractonly) 
     218        if thefilter : 
     219            thefilter = "AND %s" % thefilter 
     220        result = self.doRawSearch("SELECT users.username,printers.printername,jobhistory.* FROM users,printers,jobhistory WHERE users.id=jobhistory.userid AND printers.id=jobhistory.printerid %s ORDER BY jobhistory.id ASC" % thefilter) 
    181221        return self.prepareRawResult(result) 
    182222         
  • pykota/trunk/pykota/version.py

    r1980 r1991  
    2222# 
    2323 
    24 __version__ = "1.21alpha13_unofficial" 
     24__version__ = "1.21alpha14_unofficial" 
    2525 
    2626__doc__ = """PyKota : a complete Printing Quota Solution for CUPS and LPRng."""