--- /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 <bruceg@em.ca>
+#
+# 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 ("<select name='%s'>"
+ "<option value=1%s>True"
+ "<option value=0%s>False"
+ "</select>" % ( 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