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

Revision 705, 5.3 kB (checked in by jalet, 21 years ago)

Forgotten import
Bad datetime conversion

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