algebra.py 833 B

12345678910111213141516171819202122232425262728293031323334353637
  1. def sum_acls(defaults, acls, **permissions):
  2. result_acl = {}
  3. for permission, compare in permissions.items():
  4. try:
  5. permission_value = defaults[permission]
  6. except KeyError:
  7. message = 'Default value for permission "%s" is not provided.'
  8. raise ValueError(message % permission)
  9. for acl in acls:
  10. try:
  11. permission_value = compare(permission_value, acl[permission])
  12. except KeyError:
  13. pass
  14. result_acl[permission] = permission_value
  15. return result_acl
  16. # Common comparisions
  17. def greater(a, b):
  18. return a if a > b else b
  19. def greater_or_zero(a, b):
  20. if a == 0:
  21. return a
  22. elif b == 0:
  23. return b
  24. else:
  25. return greater(a, b)
  26. def lower(a, b):
  27. return a if a < b else b