Changeset 2054 for pykota/trunk/pykota/storages/ldapstorage.py
- Timestamp:
- 02/13/05 23:02:29 (19 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
pykota/trunk/pykota/storages/ldapstorage.py
r2042 r2054 22 22 # 23 23 # $Log$ 24 # Revision 1.100 2005/02/13 22:02:29 jalet 25 # Big database structure changes. Upgrade script is now included as well as 26 # the new LDAP schema. 27 # Introduction of the -o | --overcharge command line option to edpykota. 28 # The output of repykota is more complete, but doesn't fit in 80 columns anymore. 29 # Introduction of the new 'maxdenybanners' directive. 30 # 24 31 # Revision 1.99 2005/01/24 17:44:17 jalet 25 32 # Same fix for group print quota entries wrt LDAP performance … … 647 654 """Extracts user information given its name.""" 648 655 user = StorageUser(self, username) 649 result = self.doSearch("(&(objectClass=pykotaAccount)(|(pykotaUserName=%s)(%s=%s)))" % (username, self.info["userrdn"], username), ["pykotaUserName", "pykotaLimitBy", self.info["usermail"] ], base=self.info["userbase"])656 result = self.doSearch("(&(objectClass=pykotaAccount)(|(pykotaUserName=%s)(%s=%s)))" % (username, self.info["userrdn"], username), ["pykotaUserName", "pykotaLimitBy", self.info["usermail"], "pykotaOverCharge"], base=self.info["userbase"]) 650 657 if result : 651 658 fields = result[0][1] 652 659 user.ident = result[0][0] 653 660 user.Name = fields.get("pykotaUserName", [username])[0] 654 user.Email = fields.get(self.info["usermail"]) 655 if user.Email is not None : 656 user.Email = user.Email[0] 657 user.LimitBy = fields.get("pykotaLimitBy") 658 if user.LimitBy is not None : 659 user.LimitBy = user.LimitBy[0] 660 else : 661 user.LimitBy = "quota" 661 user.Email = fields.get(self.info["usermail"], [None])[0] 662 user.LimitBy = fields.get("pykotaLimitBy", ["quota"])[0] 663 user.OverCharge = float(fields.get("pykotaOverCharge", [1.0])[0]) 662 664 result = self.doSearch("(&(objectClass=pykotaAccountBalance)(|(pykotaUserName=%s)(%s=%s)))" % (username, self.info["balancerdn"], username), ["pykotaBalance", "pykotaLifeTimePaid", "pykotaPayments"], base=self.info["balancebase"]) 663 665 if not result : … … 695 697 group.ident = result[0][0] 696 698 group.Name = fields.get("pykotaGroupName", [groupname])[0] 697 group.LimitBy = fields.get("pykotaLimitBy") 698 if group.LimitBy is not None : 699 group.LimitBy = group.LimitBy[0] 700 else : 701 group.LimitBy = "quota" 699 group.LimitBy = fields.get("pykotaLimitBy", ["quota"])[0] 702 700 group.AccountBalance = 0.0 703 701 group.LifeTimePaid = 0.0 … … 717 715 printer.ident = result[0][0] 718 716 printer.Name = fields.get("pykotaPrinterName", [printername])[0] 719 printer.PricePerJob = float(fields.get("pykotaPricePerJob", [0.0])[0] or 0.0)720 printer.PricePerPage = float(fields.get("pykotaPricePerPage", [0.0])[0] or 0.0)717 printer.PricePerJob = float(fields.get("pykotaPricePerJob", [0.0])[0]) 718 printer.PricePerPage = float(fields.get("pykotaPricePerPage", [0.0])[0]) 721 719 printer.uniqueMember = fields.get("uniqueMember", []) 722 720 printer.Description = self.databaseToUserCharset(fields.get("description", [""])[0]) … … 732 730 else : 733 731 base = self.info["userquotabase"] 734 result = self.doSearch("(&(objectClass=pykotaUserPQuota)(pykotaUserName=%s)(pykotaPrinterName=%s))" % (user.Name, printer.Name), ["pykotaPageCounter", "pykotaLifePageCounter", "pykotaSoftLimit", "pykotaHardLimit", "pykotaDateLimit" ], base=base)732 result = self.doSearch("(&(objectClass=pykotaUserPQuota)(pykotaUserName=%s)(pykotaPrinterName=%s))" % (user.Name, printer.Name), ["pykotaPageCounter", "pykotaLifePageCounter", "pykotaSoftLimit", "pykotaHardLimit", "pykotaDateLimit", "pykotaWarnCount"], base=base) 735 733 if result : 736 734 fields = result[0][1] 737 735 userpquota.ident = result[0][0] 738 userpquota.PageCounter = int(fields.get("pykotaPageCounter", [0])[0] or 0) 739 userpquota.LifePageCounter = int(fields.get("pykotaLifePageCounter", [0])[0] or 0) 736 userpquota.PageCounter = int(fields.get("pykotaPageCounter", [0])[0]) 737 userpquota.LifePageCounter = int(fields.get("pykotaLifePageCounter", [0])[0]) 738 userpquota.WarnCount = int(fields.get("pykotaWarnCount", [0])[0]) 740 739 userpquota.SoftLimit = fields.get("pykotaSoftLimit") 741 740 if userpquota.SoftLimit is not None : … … 815 814 result = None 816 815 try : 817 result = self.doSearch("objectClass=pykotaJob", ["pykotaJobSizeBytes", "pykotaHostName", "pykotaUserName", "pykotaJobId", "pykotaPrinterPageCounter", "pykotaJobSize", "pykotaAction", "pykotaJobPrice", "pykotaFileName", "pykotaTitle", "pykotaCopies", "pykotaOptions", " createTimestamp"], base="cn=%s,%s" % (lastjobident, self.info["jobbase"]), scope=ldap.SCOPE_BASE)816 result = self.doSearch("objectClass=pykotaJob", ["pykotaJobSizeBytes", "pykotaHostName", "pykotaUserName", "pykotaJobId", "pykotaPrinterPageCounter", "pykotaJobSize", "pykotaAction", "pykotaJobPrice", "pykotaFileName", "pykotaTitle", "pykotaCopies", "pykotaOptions", "pykotaBillingCode", "pykotaPages", "pykotaMD5Sum", "createTimestamp"], base="cn=%s,%s" % (lastjobident, self.info["jobbase"]), scope=ldap.SCOPE_BASE) 818 817 except PyKotaStorageError : 819 818 pass # Last job entry exists, but job probably doesn't exist anymore. … … 823 822 lastjob.JobId = fields.get("pykotaJobId")[0] 824 823 lastjob.UserName = fields.get("pykotaUserName")[0] 825 lastjob.PrinterPageCounter = int(fields.get("pykotaPrinterPageCounter", [0])[0] or 0)824 lastjob.PrinterPageCounter = int(fields.get("pykotaPrinterPageCounter", [0])[0]) 826 825 try : 827 826 lastjob.JobSize = int(fields.get("pykotaJobSize", [0])[0]) … … 839 838 lastjob.JobHostName = fields.get("pykotaHostName", [""])[0] 840 839 lastjob.JobSizeBytes = fields.get("pykotaJobSizeBytes", [0L])[0] 840 lastjob.JobBillingCode = fields.get("pykotaMD5Sum", [None])[0] 841 lastjob.JobMD5Sum = fields.get("pykotaMD5Sum", [None])[0] 842 lastjob.JobPages = fields.get("pykotaPages", [""])[0] 841 843 date = fields.get("createTimestamp", ["19700101000000"])[0] 842 844 year = int(date[:4]) … … 924 926 else : 925 927 base = self.info["userquotabase"] 926 result = self.doSearch("(&(objectClass=pykotaUserPQuota)(pykotaPrinterName=%s)(|%s))" % (printer.Name, "".join(["(pykotaUserName=%s)" % uname for uname in names])), ["pykotaUserName", "pykotaPageCounter", "pykotaLifePageCounter", "pykotaSoftLimit", "pykotaHardLimit", "pykotaDateLimit" ], base=base)928 result = self.doSearch("(&(objectClass=pykotaUserPQuota)(pykotaPrinterName=%s)(|%s))" % (printer.Name, "".join(["(pykotaUserName=%s)" % uname for uname in names])), ["pykotaUserName", "pykotaPageCounter", "pykotaLifePageCounter", "pykotaSoftLimit", "pykotaHardLimit", "pykotaDateLimit", "pykotaWarnCount"], base=base) 927 929 if result : 928 930 for (userquotaid, fields) in result : … … 930 932 userpquota = StorageUserPQuota(self, user, printer) 931 933 userpquota.ident = userquotaid 932 userpquota.PageCounter = int(fields.get("pykotaPageCounter", [0])[0] or 0) 933 userpquota.LifePageCounter = int(fields.get("pykotaLifePageCounter", [0])[0] or 0) 934 userpquota.PageCounter = int(fields.get("pykotaPageCounter", [0])[0]) 935 userpquota.LifePageCounter = int(fields.get("pykotaLifePageCounter", [0])[0]) 936 userpquota.WarnCount = int(fields.get("pykotaWarnCount", [0])[0]) 934 937 userpquota.SoftLimit = fields.get("pykotaSoftLimit") 935 938 if userpquota.SoftLimit is not None : … … 990 993 "pykotaUserName" : user.Name, 991 994 "pykotaLimitBy" : (user.LimitBy or "quota"), 995 "pykotaOverCharge" : str(user.OverCharge), 992 996 } 993 997 … … 1048 1052 newfields = { 1049 1053 "pykotaGroupName" : group.Name, 1050 "pykotaLimitB Y" : (group.LimitBy or "quota"),1054 "pykotaLimitBy" : (group.LimitBy or "quota"), 1051 1055 } 1052 1056 mustadd = 1 … … 1102 1106 "pykotaPageCounter" : "0", 1103 1107 "pykotaLifePageCounter" : "0", 1108 "pykotaWarnCount" : "0", 1104 1109 } 1105 1110 if self.info["userquotabase"].lower() == "user" : … … 1141 1146 self.doModify(printer.ident, fields) 1142 1147 1148 def writeUserOverCharge(self, user, factor) : 1149 """Sets the user's overcharging coefficient.""" 1150 fields = { 1151 "pykotaOverCharge" : str(factor), 1152 } 1153 self.doModify(user.ident, fields) 1154 1143 1155 def writeUserLimitBy(self, user, limitby) : 1144 1156 """Sets the user's limiting factor.""" … … 1183 1195 "pykotaLifePageCounter" : str(newlifepagecounter), 1184 1196 "pykotaDateLimit" : None, 1197 "pykotaWarnCount" : "0", 1185 1198 } 1186 1199 return self.doModify(userpquota.ident, fields) … … 1246 1259 "pykotaHostName" : str(clienthost), 1247 1260 "pykotaJobSizeBytes" : str(jobsizebytes), 1261 # TODO : add the 3 missing fields 1248 1262 } 1249 1263 if (not self.disablehistory) or (not printer.LastJob.Exists) : … … 1278 1292 "pykotaHardLimit" : str(hardlimit), 1279 1293 "pykotaDateLimit" : "None", 1294 "pykotaWarnCount" : "0", 1280 1295 } 1281 1296 self.doModify(userpquota.ident, fields) 1297 1298 def writeUserPQuotaWarnCount(self, userpquota, warncount) : 1299 """Sets the warn counter value for a user quota.""" 1300 fields = { 1301 "pykotaWarnCount" : str(warncount or 0), 1302 } 1303 self.doModify(userpquota.ident, fields) 1304 1305 def increaseUserPQuotaWarnCount(self, userpquota) : 1306 """Increases the warn counter value for a user quota.""" 1307 fields = { 1308 "pykotaWarnCount" : { "operator" : "+", "value" : 1, "convert" : int }, 1309 } 1310 return self.doModify(userpquota.ident, fields) 1282 1311 1283 1312 def writeGroupPQuotaLimits(self, grouppquota, softlimit, hardlimit) :