Changeset 2657 for pykota/trunk/pykota/storages
- Timestamp:
- 02/09/06 00:15:46 (18 years ago)
- Location:
- pykota/trunk/pykota/storages
- Files:
-
- 2 modified
Legend:
- Unmodified
- Added
- Removed
-
pykota/trunk/pykota/storages/ldapstorage.py
r2653 r2657 357 357 fields = result[0][1] 358 358 user.ident = result[0][0] 359 user.Name = fields.get("pykotaUserName", [self.databaseToUserCharset(username)])[0]360 359 user.Email = fields.get(self.info["usermail"], [None])[0] 361 360 user.LimitBy = fields.get("pykotaLimitBy", ["quota"])[0] … … 670 669 printers = [] 671 670 # see comment at the same place in pgstorage.py 672 printerpattern = [self.userCharsetToDatabase(p) for p in printerpattern.split(",")] 673 result = self.doSearch("(&(objectClass=pykotaPrinter)(|%s))" % \ 674 "".join(["(pykotaPrinterName=%s)(%s=%s)" % (pname, self.info["printerrdn"], pname) for pname in printerpattern]), \ 671 result = self.doSearch("objectClass=pykotaPrinter", \ 675 672 ["pykotaPrinterName", "pykotaPricePerPage", "pykotaPricePerJob", "pykotaMaxJobSize", "pykotaPassThrough", "uniqueMember", "description"], \ 676 673 base=self.info["printerbase"]) 677 674 if result : 675 patterns = printerpattern.split(",") 678 676 for (printerid, fields) in result : 679 677 printername = self.databaseToUserCharset(fields.get("pykotaPrinterName", [""])[0] or fields.get(self.info["printerrdn"], [""])[0]) 680 printer = StoragePrinter(self, printername) 681 printer.ident = printerid 682 printer.PricePerJob = float(fields.get("pykotaPricePerJob", [0.0])[0] or 0.0) 683 printer.PricePerPage = float(fields.get("pykotaPricePerPage", [0.0])[0] or 0.0) 684 printer.MaxJobSize = int(fields.get("pykotaMaxJobSize", [0])[0]) 685 printer.PassThrough = fields.get("pykotaPassThrough", [None])[0] 686 if printer.PassThrough in (1, "1", "t", "true", "TRUE", "True") : 687 printer.PassThrough = 1 688 else : 689 printer.PassThrough = 0 690 printer.uniqueMember = fields.get("uniqueMember", []) 691 printer.Description = self.databaseToUserCharset(fields.get("description", [""])[0]) 692 printer.Exists = 1 693 printers.append(printer) 694 self.cacheEntry("PRINTERS", printer.Name, printer) 678 if self.tool.matchString(printername, patterns) : 679 printer = StoragePrinter(self, printername) 680 printer.ident = printerid 681 printer.PricePerJob = float(fields.get("pykotaPricePerJob", [0.0])[0] or 0.0) 682 printer.PricePerPage = float(fields.get("pykotaPricePerPage", [0.0])[0] or 0.0) 683 printer.MaxJobSize = int(fields.get("pykotaMaxJobSize", [0])[0]) 684 printer.PassThrough = fields.get("pykotaPassThrough", [None])[0] 685 if printer.PassThrough in (1, "1", "t", "true", "TRUE", "True") : 686 printer.PassThrough = 1 687 else : 688 printer.PassThrough = 0 689 printer.uniqueMember = fields.get("uniqueMember", []) 690 printer.Description = self.databaseToUserCharset(fields.get("description", [""])[0]) 691 printer.Exists = 1 692 printers.append(printer) 693 self.cacheEntry("PRINTERS", printer.Name, printer) 695 694 return printers 695 696 def getMatchingUsers(self, userpattern) : 697 """Returns the list of all users for which name matches a certain pattern.""" 698 users = [] 699 # see comment at the same place in pgstorage.py 700 result = self.doSearch("objectClass=pykotaAccount", \ 701 ["pykotaUserName", "pykotaLimitBy", self.info["usermail"], "pykotaOverCharge"], \ 702 base=self.info["userbase"]) 703 if result : 704 patterns = userpattern.split(",") 705 for (userid, fields) in result : 706 username = self.databaseToUserCharset(fields.get("pykotaUserName", [""])[0] or fields.get(self.info["userrdn"], [""])[0]) 707 if self.tool.matchString(username, patterns) : 708 user = StorageUser(self, username) 709 user.ident = userid 710 user.Email = fields.get(self.info["usermail"], [None])[0] 711 user.LimitBy = fields.get("pykotaLimitBy", ["quota"])[0] 712 user.OverCharge = float(fields.get("pykotaOverCharge", [1.0])[0]) 713 uname = self.userCharsetToDatabase(username) 714 result = self.doSearch("(&(objectClass=pykotaAccountBalance)(|(pykotaUserName=%s)(%s=%s)))" % \ 715 (uname, self.info["balancerdn"], uname), \ 716 ["pykotaBalance", "pykotaLifeTimePaid", "pykotaPayments"], \ 717 base=self.info["balancebase"]) 718 if not result : 719 raise PyKotaStorageError, _("No pykotaAccountBalance object found for user %s. Did you create LDAP entries manually ?") % username 720 else : 721 fields = result[0][1] 722 user.idbalance = result[0][0] 723 user.AccountBalance = fields.get("pykotaBalance") 724 if user.AccountBalance is not None : 725 if user.AccountBalance[0].upper() == "NONE" : 726 user.AccountBalance = None 727 else : 728 user.AccountBalance = float(user.AccountBalance[0]) 729 user.AccountBalance = user.AccountBalance or 0.0 730 user.LifeTimePaid = fields.get("pykotaLifeTimePaid") 731 if user.LifeTimePaid is not None : 732 if user.LifeTimePaid[0].upper() == "NONE" : 733 user.LifeTimePaid = None 734 else : 735 user.LifeTimePaid = float(user.LifeTimePaid[0]) 736 user.LifeTimePaid = user.LifeTimePaid or 0.0 737 user.Payments = [] 738 for payment in fields.get("pykotaPayments", []) : 739 try : 740 (date, amount, description) = payment.split(" # ") 741 except ValueError : 742 # Payment with no description (old Payment) 743 (date, amount) = payment.split(" # ") 744 description = "" 745 else : 746 description = self.databaseToUserCharset(base64.decodestring(description)) 747 user.Payments.append((date, float(amount), description)) 748 user.Exists = 1 749 users.append(user) 750 self.cacheEntry("USERS", user.Name, user) 751 return users 752 753 def getMatchingGroups(self, grouppattern) : 754 """Returns the list of all groups for which name matches a certain pattern.""" 755 groups = [] 756 # see comment at the same place in pgstorage.py 757 result = self.doSearch("objectClass=pykotaGroup", \ 758 ["pykotaGroupName", "pykotaLimitBy"], \ 759 base=self.info["groupbase"]) 760 if result : 761 patterns = grouppattern.split(",") 762 for (groupid, fields) in result : 763 groupname = self.databaseToUserCharset(fields.get("pykotaGroupName", [""])[0] or fields.get(self.info["grouprdn"], [""])[0]) 764 if self.tool.matchString(groupname, patterns) : 765 group = StorageGroup(self, groupname) 766 group.ident = groupid 767 group.Name = fields.get("pykotaGroupName", [self.databaseToUserCharset(groupname)])[0] 768 group.LimitBy = fields.get("pykotaLimitBy", ["quota"])[0] 769 group.AccountBalance = 0.0 770 group.LifeTimePaid = 0.0 771 for member in self.getGroupMembers(group) : 772 if member.Exists : 773 group.AccountBalance += member.AccountBalance 774 group.LifeTimePaid += member.LifeTimePaid 775 group.Exists = 1 776 return groups 696 777 697 778 def getPrinterUsersAndQuotas(self, printer, names=["*"]) : … … 1545 1626 """Returns the list of all billing codes which match a certain pattern.""" 1546 1627 codes = [] 1547 billingcodepattern = [self.userCharsetToDatabase(b) for b in billingcodepattern.split(",")] 1548 result = self.doSearch("(&(objectClass=pykotaBilling)(|%s))" % \ 1549 "".join(["(pykotaBillingCode=%s)" % bcode for bcode in billingcodepattern]), \ 1628 result = self.doSearch("objectClass=pykotaBilling", \ 1550 1629 ["pykotaBillingCode", "description", "pykotaPageCounter", "pykotaBalance"], \ 1551 1630 base=self.info["billingcodebase"]) 1552 1631 if result : 1632 patterns = billingcodepattern.split(",") 1553 1633 for (codeid, fields) in result : 1554 codename = self.databaseToUserCharset(fields.get("pykotaBillingCode", [""])[0]) 1555 code = StorageBillingCode(self, codename) 1556 code.ident = codeid 1557 code.BillingCode = codename 1558 code.PageCounter = int(fields.get("pykotaPageCounter", [0])[0]) 1559 code.Balance = float(fields.get("pykotaBalance", [0.0])[0]) 1560 code.Description = self.databaseToUserCharset(fields.get("description", [""])[0]) 1561 code.Exists = 1 1562 codes.append(code) 1563 self.cacheEntry("BILLINGCODES", code.BillingCode, code) 1634 bcode = self.databaseToUserCharset(fields.get("pykotaBillingCode", [""])[0]) 1635 if self.tool.matchString(bcode, patterns) : 1636 code = StorageBillingCode(self, codename) 1637 code.ident = codeid 1638 code.BillingCode = codename 1639 code.PageCounter = int(fields.get("pykotaPageCounter", [0])[0]) 1640 code.Balance = float(fields.get("pykotaBalance", [0.0])[0]) 1641 code.Description = self.databaseToUserCharset(fields.get("description", [""])[0]) 1642 code.Exists = 1 1643 codes.append(code) 1644 self.cacheEntry("BILLINGCODES", code.BillingCode, code) 1564 1645 return codes 1565 1646 -
pykota/trunk/pykota/storages/sql.py
r2654 r2657 203 203 fields = result[0] 204 204 user.ident = fields.get("id") 205 user.Name = self.databaseToUserCharset(fields.get("username", username))206 205 user.LimitBy = fields.get("limitby") or "quota" 207 206 user.AccountBalance = fields.get("balance") 208 207 user.LifeTimePaid = fields.get("lifetimepaid") 209 208 user.Email = fields.get("email") 209 user.Description = self.databaseToUserCharset(fields.get("description")) 210 210 user.OverCharge = fields.get("overcharge", 1.0) 211 211 user.Exists = 1 … … 220 220 fields = result[0] 221 221 group.ident = fields.get("id") 222 group.Name = self.databaseToUserCharset(fields.get("groupname", groupname))223 222 group.LimitBy = fields.get("limitby") or "quota" 224 223 group.AccountBalance = fields.get("balance") 225 224 group.LifeTimePaid = fields.get("lifetimepaid") 225 group.Description = self.databaseToUserCharset(fields.get("description")) 226 226 group.Exists = 1 227 227 return group … … 235 235 fields = result[0] 236 236 printer.ident = fields.get("id") 237 printer.Name = self.databaseToUserCharset(fields.get("printername", printername))238 237 printer.PricePerJob = fields.get("priceperjob") or 0.0 239 238 printer.PricePerPage = fields.get("priceperpage") or 0.0 … … 255 254 fields = result[0] 256 255 code.ident = fields.get("id") 257 code.BillingCode = self.databaseToUserCharset(fields.get("billingcode"))258 256 code.Description = self.databaseToUserCharset(fields.get("description") or "") 259 257 code.Balance = fields.get("balance") or 0.0 … … 375 373 result = self.doSearch("SELECT * FROM printers") 376 374 if result : 375 patterns = printerpattern.split(",") 377 376 for record in result : 378 377 pname = self.databaseToUserCharset(record["printername"]) 379 if self.tool.matchString(pname, p rinterpattern.split(",")) :378 if self.tool.matchString(pname, patterns) : 380 379 printer = StoragePrinter(self, pname) 381 380 printer.ident = record.get("id") … … 394 393 return printers 395 394 395 def getMatchingUsers(self, userpattern) : 396 """Returns the list of all users for which name matches a certain pattern.""" 397 users = [] 398 # We 'could' do a SELECT username FROM users WHERE username LIKE ... 399 # but we don't because other storages semantics may be different, so every 400 # storage should use fnmatch to match patterns and be storage agnostic 401 result = self.doSearch("SELECT * FROM users") 402 if result : 403 patterns = userpattern.split(",") 404 for record in result : 405 uname = self.databaseToUserCharset(record["username"]) 406 if self.tool.matchString(uname, patterns) : 407 user = StorageUser(self, uname) 408 user.ident = record.get("id") 409 user.LimitBy = record.get("limitby") or "quota" 410 user.AccountBalance = record.get("balance") 411 user.LifeTimePaid = record.get("lifetimepaid") 412 user.Email = record.get("email") 413 user.Description = self.databaseToUserCharset(record.get("description")) 414 user.OverCharge = record.get("overcharge", 1.0) 415 user.Exists = 1 416 users.append(user) 417 self.cacheEntry("USERS", user.Name, user) 418 return users 419 420 def getMatchingGroups(self, grouppattern) : 421 """Returns the list of all groups for which name matches a certain pattern.""" 422 groups = [] 423 # We 'could' do a SELECT groupname FROM groups WHERE groupname LIKE ... 424 # but we don't because other storages semantics may be different, so every 425 # storage should use fnmatch to match patterns and be storage agnostic 426 result = self.doSearch("SELECT groups.*,COALESCE(SUM(balance), 0.0) AS balance, COALESCE(SUM(lifetimepaid), 0.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,groups.description") 427 if result : 428 patterns = grouppattern.split(",") 429 for record in result : 430 gname = self.databaseToUserCharset(record["groupname"]) 431 if self.tool.matchString(gname, patterns) : 432 group = StorageGroup(self, gname) 433 group.ident = record.get("id") 434 group.LimitBy = record.get("limitby") or "quota" 435 group.AccountBalance = record.get("balance") 436 group.LifeTimePaid = record.get("lifetimepaid") 437 group.Description = self.databaseToUserCharset(record.get("description")) 438 group.Exists = 1 439 groups.append(group) 440 self.cacheEntry("GROUPS", group.Name, group) 441 return groups 442 396 443 def getMatchingBillingCodes(self, billingcodepattern) : 397 444 """Returns the list of all billing codes for which the label matches a certain pattern.""" … … 399 446 result = self.doSearch("SELECT * FROM billingcodes") 400 447 if result : 448 patterns = billingcodepattern.split(",") 401 449 for record in result : 402 450 bcode = self.databaseToUserCharset(record["billingcode"]) 403 if self.tool.matchString(bcode, billingcodepattern.split(",")) :451 if self.tool.matchString(bcode, patterns) : 404 452 code = StorageBillingCode(self, bcode) 405 453 code.ident = record.get("id")