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

Revision 695, 4.8 kB (checked in by jalet, 21 years ago)

Initial import into CVS

  • 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.1  2003/02/05 21:28:17  jalet
18# Initial import into CVS
19#
20#
21#
22
23from mx import DateTime
24
25class SQLStorage :   
26    def getUserId(self, username) :
27        result = self.doQuery("SELECT id FROM users WHERE username=%s;" % self.doQuote(username))
28        return self.doParseResult(result)["id"]
29           
30    def getPrinterId(self, printername) :       
31        result = self.doQuery("SELECT id FROM printers WHERE printername=%s;" % self.doQuote(printername))
32        return self.doParseResult(result)["id"]
33           
34    def getPrinterPageCounter(self, printername) :
35        result = self.doQuery("SELECT pagecounter, lastusername FROM printers WHERE printername=%s;" % self.doQuote(printername))
36        return self.doParseResult(result)
37       
38    def updatePrinterPageCounter(self, printername, username, pagecount) :
39        return self.doQuery("UPDATE printers SET pagecounter=%s, lastusername=%s WHERE printername=%s;" % (self.doQuote(pagecount), self.doQuote(username), self.doQuote(printername)))
40       
41    def addUserPQuota(self, username, printername) :
42        printerid = self.getPrinterId(printername)
43        if printerid is None :   
44            self.doQuery("INSERT INTO printers (printername) VALUES (%s);" % self.doQuote(printername))
45            printerid = self.getPrinterId(printername)
46        userid = self.getUserId(username)
47        if userid is None :   
48            self.doQuery("INSERT INTO users (username) VALUES (%s);" % self.doQuote(username))
49            userid = self.getUserId(username)
50        if (printerid is not None) and (userid is not None) :   
51            return self.doQuery("INSERT INTO userpquota (userid, printerid) VALUES (%s, %s);" % (self.doQuote(userid), self.doQuote(printerid)))
52       
53    def getUserPQuota(self, username, printername) :
54        result = self.doQuery("SELECT pagecounter, softlimit, hardlimit, datelimit FROM userpquota WHERE userid=%s AND printerid=%s;" % (self.doQuote(self.getUserId(username)), self.doQuote(self.getPrinterId(printername))))
55        return self.doParseResult(result)
56       
57    def setUserPQuota(self, username, printername, softlimit, hardlimit) :
58        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(self.getUserId(username)), self.doQuote(self.getPrinterId(printername))))
59       
60    def updateUserPQuota(self, username, printername, pagecount) :
61        self.doQuery("UPDATE userpquota SET pagecounter=pagecounter+(%s) WHERE userid=%s AND printerid=%s;" % (self.doQuote(pagecount), self.doQuote(self.getUserId(username)), self.doQuote(self.getPrinterId(printername))))
62       
63    def buyUserPQuota(self, username, printername, pagebought) :
64        self.updateUserPQuota(username, printername, -pagebought)
65       
66    def checkUserPQuota(self, username, printername) :
67        # TODO : this doesn't work as expected wrt dates
68        # TODO : GRACEDELAY should come from the configuration file
69        # TODO : move this into the PyKotaTool class
70        now = DateTime.now()
71        quota = self.getUserPQuota(username, printername)
72        pagecounter = quota["pagecounter"]
73        softlimit = quota["softlimit"]
74        hardlimit = quota["hardlimit"]
75        datelimit = quota["datelimit"]
76        if datelimit :
77            datelimit = DateTime.DateTime(datelimit)    # TODO : check this !
78        if softlimit is not None :
79            if pagecounter < softlimit :
80                action = "ALLOW"
81            elif hardlimit is not None :
82                 if softlimit <= pagecounter < hardlimit :   
83                     if datelimit is None :
84                         self.doQuery("UPDATE userpquota SET datelimit=%s WHERE userid=%s AND printerid=%s;" % ('%04i-%02i-%02i' % (now.year, now.month, now.day), self.doQuote(self.getUserId(username)), self.doQuote(self.getPrinterId(printername))))
85                         datelimit = now
86                     if (now - datelimit) <= GRACEDELAY :
87                         action = "WARN"
88                     else :   
89                         action = "DENY"
90                 else :         
91                     action = "DENY"
92            else :       
93                action = "DENY"
94        else :       
95            action = "ALLOW"
96        return (action, (hardlimit - pagecounter), datelimit)
97   
Note: See TracBrowser for help on using the browser.