root / pykota / trunk / pykota / storages / sql.py @ 713

Revision 713, 4.4 kB (checked in by jalet, 21 years ago)

More robust behavior (hopefully) when the user or printer is not managed
correctly by the Quota System : e.g. cupsFilter added in ppd file, but
printer and/or user not 'yet?' in storage.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1# PyKota
2#
3# PyKota : Print Quotas for CUPS
4#
5# (c) 2003 Jerome Alet <alet@librelogiciel.com>
6# You're welcome to redistribute this software under the
7# terms of the GNU General Public Licence version 2.0
8# or, at your option, any higher version.
9#
10# You can read the complete GNU GPL in the file COPYING
11# which should come along with this software, or visit
12# the Free Software Foundation's WEB site http://www.fsf.org
13#
14# $Id$
15#
16# $Log$
17# Revision 1.6  2003/02/06 09:19:02  jalet
18# More robust behavior (hopefully) when the user or printer is not managed
19# correctly by the Quota System : e.g. cupsFilter added in ppd file, but
20# printer and/or user not 'yet?' in storage.
21#
22# Revision 1.5  2003/02/05 23:26:22  jalet
23# Incorrect handling of grace delay
24#
25# Revision 1.4  2003/02/05 23:02:10  jalet
26# Typo
27#
28# Revision 1.3  2003/02/05 23:00:12  jalet
29# Forgotten import
30# Bad datetime conversion
31#
32# Revision 1.2  2003/02/05 22:28:38  jalet
33# More robust storage
34#
35# Revision 1.1  2003/02/05 21:28:17  jalet
36# Initial import into CVS
37#
38#
39#
40
41class SQLStorage :   
42    def getUserId(self, username) :
43        result = self.doQuery("SELECT id FROM users WHERE username=%s;" % self.doQuote(username))
44        try :
45            return self.doParseResult(result)[0]["id"]
46        except TypeError :      # Not found
47            return
48           
49    def getPrinterId(self, printername) :       
50        result = self.doQuery("SELECT id FROM printers WHERE printername=%s;" % self.doQuote(printername))
51        try :
52            return self.doParseResult(result)[0]["id"]
53        except TypeError :      # Not found   
54            return
55           
56    def getPrinterPageCounter(self, printername) :
57        result = self.doQuery("SELECT pagecounter, lastusername FROM printers WHERE printername=%s;" % self.doQuote(printername))
58        try :
59            return self.doParseResult(result)[0]
60        except TypeError :      # Not found
61            return
62       
63    def updatePrinterPageCounter(self, printername, username, pagecount) :
64        return self.doQuery("UPDATE printers SET pagecounter=%s, lastusername=%s WHERE printername=%s;" % (self.doQuote(pagecount), self.doQuote(username), self.doQuote(printername)))
65       
66    def addUserPQuota(self, username, printername) :
67        (userid, printerid) = self.getUPIds(username, printername)
68        if printerid is None :   
69            self.doQuery("INSERT INTO printers (printername) VALUES (%s);" % self.doQuote(printername))
70        if userid is None :   
71            self.doQuery("INSERT INTO users (username) VALUES (%s);" % self.doQuote(username))
72        (userid, printerid) = self.getUPIds(username, printername)
73        if (userid is not None) and (printerid is not None) :
74            return self.doQuery("INSERT INTO userpquota (userid, printerid) VALUES (%s, %s);" % (self.doQuote(userid), self.doQuote(printerid)))
75       
76    def getUPIds(self, username, printername) :   
77        return (self.getUserId(username), self.getPrinterId(printername))
78       
79    def getUserPQuota(self, username, printername) :
80        (userid, printerid) = self.getUPIds(username, printername)
81        if (userid is not None) and (printerid is not None) :
82            result = self.doQuery("SELECT pagecounter, softlimit, hardlimit, datelimit FROM userpquota WHERE userid=%s AND printerid=%s;" % (self.doQuote(userid), self.doQuote(printerid)))
83            try :
84                return self.doParseResult(result)[0]
85            except TypeError :      # Not found   
86                pass
87       
88    def setUserPQuota(self, username, printername, softlimit, hardlimit) :
89        (userid, printerid) = self.getUPIds(username, printername)
90        if (userid is not None) and (printerid is not None) :
91            self.doQuery("UPDATE userpquota SET softlimit=%s, hardlimit=%s, datelimit=NULL WHERE userid=%s AND printerid=%s;" % (self.doQuote(softlimit), self.doQuote(hardlimit), self.doQuote(userid), self.doQuote(printerid)))
92       
93    def updateUserPQuota(self, username, printername, pagecount) :
94        (userid, printerid) = self.getUPIds(username, printername)
95        if (userid is not None) and (printerid is not None) :
96            self.doQuery("UPDATE userpquota SET pagecounter=pagecounter+(%s) WHERE userid=%s AND printerid=%s;" % (self.doQuote(pagecount), self.doQuote(userid), self.doQuote(printerid)))
97       
98    def buyUserPQuota(self, username, printername, pagebought) :
99        self.updateUserPQuota(username, printername, -pagebought)
100       
Note: See TracBrowser for help on using the browser.