X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=UDLdap.py;h=f19703fd94a14cecbd3191e9507c9050421583a7;hb=de6be72a0f8c50acaf83a9111f0bd3901e5eac1c;hp=b546112af6a3abb636e5f0a4b0f62a6fd00cb4c4;hpb=6da780be4bcbe8e5667d22d24431440e1c55221b;p=mirror%2Fuserdir-ldap.git diff --git a/UDLdap.py b/UDLdap.py index b546112..f19703f 100644 --- a/UDLdap.py +++ b/UDLdap.py @@ -27,24 +27,28 @@ class Account: def __init__(self, dn, attributes): self.dn = dn self.attributes = attributes + self.cache = {} def __getitem__(self, key): + if key in self.cache: + return self.cache[key] + if key in self.attributes: if key in self.array_values: - return self.attributes[key] - - if not len(self.attributes[key]) == 1: + self.cache[key] = self.attributes[key] + elif not len(self.attributes[key]) == 1: raise ValueError, 'non-array value has not exactly one value' - - if key in self.int_values: - return int(self.attributes[key][0]) + elif key in self.int_values: + self.cache[key] = int(self.attributes[key][0]) else: - return self.attributes[key][0] + self.cache[key] = self.attributes[key][0] elif key in self.defaults: - return self.defaults[key] + self.cache[key] = self.defaults[key] else: raise IndexError, "No such key: %s (dn: %s)"%(key, self.dn) + return self.cache[key] + def __contains__(self, key): return key in self.attributes @@ -83,6 +87,9 @@ class Account: def is_active_user(self): return self['accountStatus'] == 'active' and self.numkeys() != 0 + def is_guest_account(self): + return self['gidNumber'] == 60000 + def latitude_dec(self, anonymized=False): return userdir_ldap.DecDegree(self['latitude'], anonymized) def longitude_dec(self, anonymized=False):