Add showPermissions functionality.
authorEdward Z. Yang <edwardzyang@thewritingpot.com>
Tue, 12 May 2009 02:31:27 +0000 (22:31 -0400)
committerEdward Z. Yang <edwardzyang@thewritingpot.com>
Tue, 12 May 2009 02:31:27 +0000 (22:31 -0400)
Signed-off-by: Edward Z. Yang <edwardzyang@thewritingpot.com>

afs/acl.py
afs/tests/test_acl.py

index b5da255..d9a6df4 100644 (file)
@@ -10,25 +10,27 @@ _canonical = {
     "mail":     "lik",
     "none":     "",
 }
-_char2bit = {
-    'r': READ,
-    'w': WRITE,
-    'i': INSERT,
-    'l': LOOKUP,
-    'd': DELETE,
-    'k': LOCK,
-    'a': ADMINISTER,
-    'A': USR0,
-    'B': USR1,
-    'C': USR2,
-    'D': USR3,
-    'E': USR4,
-    'F': USR5,
-    'G': USR6,
-    'H': USR7,
-}
 
-_bit2char = dict([(v,k) for k,v in _char2bit.items()])
+_charBitAssoc = [
+    ('r', READ),
+    ('w', WRITE),
+    ('i', INSERT),
+    ('l', LOOKUP),
+    ('d', DELETE),
+    ('k', LOCK),
+    ('a', ADMINISTER),
+    ('A', USR0),
+    ('B', USR1),
+    ('C', USR2),
+    ('D', USR3),
+    ('E', USR4),
+    ('F', USR5),
+    ('G', USR6),
+    ('H', USR7),
+]
+
+_char2bit = dict(_charBitAssoc)
+
 
 def crights(s):
     """Canonicalizes string rights to bitmask"""
@@ -51,6 +53,13 @@ class ACL(object):
         pos, neg = _parseAcl(_acl.getAcl(dir))
         return ACL(pos, neg)
 
+def showRights(r):
+    """Takes a bitmask and returns a rwlidka string"""
+    s = ""
+    for char,mask in _charBitAssoc:
+        if r & mask == mask: s += char
+    return s
+
 def _parseRights(s):
     """Parses a rwlid... rights tring to bitmask"""
     r = 0
index 385e2ad..c6a7338 100644 (file)
@@ -1,6 +1,9 @@
 import nose
 import afs.acl as acl
 
+def test_showRights():
+    assert acl.showRights(acl.READ | acl.WRITE) == "rw"
+
 def test_crights():
     assert acl.crights('read') & acl.READ
     assert acl.crights('read') & acl.LOOKUP