diff -r 000000000000 -r 6f7a81934006 python/types.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python/types.py Wed Jan 16 22:39:43 2008 +0100 @@ -0,0 +1,141 @@ +# Copyright (C) 1999,2000 Bruce Guenter +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import string +import time + +class Limit: + unlimited = -1 + def __init__(self, str): + if str[0] == '-' or string.lower(str) == 'unlimited': + str = self.unlimited + self.value = int(str) + def __str__(self): + if self.value == self.unlimited: + return 'unlimited' + return str(self.value) + def __repr__(self): + if self.value == self.unlimited: + val = '-' + else: + val = str(self.value) + return "Limit('%s')" % val + +class Flag: + def __init__(self, value): + self.value = value + def __str__(self): + if self.value: + return 'true' + return 'false' + def __repr__(self): + return "Flag(%s)" % repr(self.value) + def html(self, fieldname): + if self.value: + strue = ' selected' + sfalse = '' + else: + strue = '' + sfalse = ' selected' + return ("" % ( fieldname, strue, sfalse ) ) + +class Time: + def __init__(self, value): + self.time = int(value) + def __str__(self): + return time.asctime(time.localtime(self.time)) + def __repr__(self): + return 'Time(%d)' % self.time + +ATTR_MAILBOX_ENABLED = 8 + +class VUser: + # Default values + mailbox_enabled = 1 + password = '' + mailbox = '' + forwards = [] + personal = '' + hard_quota = -1 + soft_quota = -1 + message_size_limit = -1 + message_count_limit = -1 + creation_time = 0 + expiry_time = -1 + + def __init__(self, bin=None): + if bin: + self.from_binary(bin) + + def from_binary(self, bin): + if bin[0] <> chr(2): + raise ValueError, "Virtual user data has invalid format number" + i = 1 + while bin[i] <> chr(0): + flag = ord(bin[i]) + val = ord(bin[i+1]) + i = i + 2 + if flag == ATTR_MAILBOX_ENABLED: + self.mailbox_enabled = Flag(val) + else: + raise ValueError, "Invalid flag number %d in vuser data" % flag + bin = string.split(bin[i+1:], '\0') + self.password = bin[0] + self.mailbox = bin[1] + self.forwards = [] + i = 2 + while bin[i]: + self.forwards.append(bin[i]) + i = i + 1 + self.personal = bin[i+1] + self.hard_quota = Limit(bin[i+2]) + self.soft_quota = Limit(bin[i+3]) + self.message_size_limit = Limit(bin[i+4]) + self.message_count_limit = Limit(bin[i+5]) + self.creation_time = Time(bin[i+6]) + self.expiry_time = Limit(bin[i+7]) + + def __getitem__(self, key): + """Allow subscript access to the attributes of this object. + + This method allows the data in the virtual user to be + accessed as though it were a dictionary. This allows the use of + such expressions as '%(mailbox)s'%user.""" + return getattr(self, key) + + def keys(self): return self.__dict__.keys() + def values(self): return self.__dict__.values() + def items(self): return self.__dict__.items() + def dict(self): return self.__dict__ + +class NamedVUser: + def __init__(self, username, vuser): + self.username = username + self.vuser = vuser + def __cmp__(self, other): + return cmp(self.username, other.username) + def __getitem__(self, key): + if key == 'username': + return self.username + else: + return self.vuser[key] + def dict(self): + d = self.vuser.dict() + d['username'] = self.username + return d