Make Permissions an iterable class.
This commit is contained in:
		@@ -50,6 +50,11 @@ class Permissions:
 | 
			
		||||
    +-----------+------------------------------------------+
 | 
			
		||||
    | hash(x)   | Return the permission's hash.            |
 | 
			
		||||
    +-----------+------------------------------------------+
 | 
			
		||||
    | iter(x)   | Returns an iterator of (perm, value)     |
 | 
			
		||||
    |           | pairs. This allows this class to be used |
 | 
			
		||||
    |           | as an iterable in e.g. set/list/dict     |
 | 
			
		||||
    |           | constructions.                           |
 | 
			
		||||
    +-----------+------------------------------------------+
 | 
			
		||||
 | 
			
		||||
    The properties provided are two way. You can set and retrieve individual bits using the properties as if they
 | 
			
		||||
    were regular bools. This allows you to edit permissions.
 | 
			
		||||
@@ -75,6 +80,16 @@ class Permissions:
 | 
			
		||||
    def __hash__(self):
 | 
			
		||||
        return hash(self.value)
 | 
			
		||||
 | 
			
		||||
    def _perm_iterator(self):
 | 
			
		||||
        for attr in dir(self):
 | 
			
		||||
            # check if it's a property, because if so it's a permission
 | 
			
		||||
            is_property = isinstance(getattr(self.__class__, attr), property)
 | 
			
		||||
            if is_property:
 | 
			
		||||
                yield (attr, getattr(self, attr))
 | 
			
		||||
 | 
			
		||||
    def __iter__(self):
 | 
			
		||||
        return self._perm_iterator()
 | 
			
		||||
 | 
			
		||||
    def is_subset(self, other):
 | 
			
		||||
        """Returns True if other has the same or fewer permissions as self."""
 | 
			
		||||
        if isinstance(other, Permissions):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user