import collections
-import _pts
+from afs import _pts
-class PTRelationSet(collections.MutableSet):
+try:
+ SetMixin = collections.MutableSet
+except AttributeError:
+ SetMixin = object
+
+class PTRelationSet(SetMixin):
"""Collection class for the groups/members of a PTEntry.
This class, which acts like a set, is actually a view of the
Args:
elt: The element to add.
"""
- self._set.add(self._ent._pts.getEntry(elt))
+ if hasattr(self, '_set'):
+ self._set.add(self._ent._pts.getEntry(elt))
def _discard(self, elt):
"""Remove a PTEntry to this instance's internal representation.
Args:
elt: The element to discard.
"""
- self._set.discard(self._ent._pts.getEntry(elt))
+ if hasattr(self, '_set'):
+ self._set.discard(self._ent._pts.getEntry(elt))
def __len__(self):
"""Count the members/groups in this set.
self._discard(elt)
+ def remove(self, elt):
+ """Remove an entity from a group; it must already be a member.
+
+ If the entity is not a member, raise a KeyError.
+ """
+ if elt not in self:
+ raise KeyError(elt)
+
+ self.discard(elt)
+
class PTEntry(object):
"""An entry in the AFS protection database.
self._name = val
name = property(_get_name, _set_name)
+ def _get_krbname(self):
+ return self._pts._AfsToKrb5(self.name)
+ def _set_krbname(self, val):
+ self.name = self._pts._Krb5ToAfs(val)
+ krbname = property(_get_krbname, _set_krbname)
+
def _get_count(self):
self._loadEntry()
return self._count
else:
return PTEntry(self, id=ident)
+ def getEntryFromKrbname(self, ident):
+ """Retrieve a PTEntry matching a given Kerberos v5 principal.
+
+ getEntryFromKrb accepts a krb5 principal, converts it to the
+ equivalent AFS principal, and returns a PTEntry for that
+ principal."""
+ return self.getEntry(self._Krb5ToAfs(ident))
+
def expire(self):
"""Flush the cache of PTEntry objects.