source: mailjam/src/models.py@ 0:cce367beda90

Last change on this file since 0:cce367beda90 was 0:cce367beda90, checked in by Borja Lopez <borja@…>, 12 years ago

Initial commit for this project

File size: 3.2 KB
Line 
1# -*- coding: utf-8 -*-
2
3import os
4from tools import validate_email_address
5from storage import JsonStorage
6import config
7
8class Member():
9
10 """
11 Class that defines a mailing list member
12 """
13
14 def __init__(self, address):
15 self.address = self._validate_address(address)
16
17 def __repr__(self):
18 return "<Member '%s'>" % self.address
19
20 def __str__(self):
21 return self.address
22
23 def _validate_address(self, address):
24 if not validate_email_address(address):
25 raise ValueError(address, ' is not a valid email address')
26 return address
27
28
29class MailingList():
30
31 """
32 Class that defines a mailing list
33 """
34
35 def __init__(self, name, address, members={}, config={}, storage=None):
36 self.name = name
37 self.address = address
38 self.members = members
39 self.config = config
40 # FIXME: The path to the storage files directory should be defined
41 # in a configuration file
42 self.storage = JsonStorage(os.path.join(config.storage_path,
43 self.address))
44
45 def __repr__(self):
46 return "<MailingList '%s'>" % self.address
47
48 def __str__(self):
49 return self.address
50
51 def _validate_config(self):
52 if not 'storage' in self.config.keys():
53 self.config['storage'] = os.path.join(config.storage_path,
54 self.address)
55 if not 'archive' in self.config.keys():
56 self.config['archive'] = os.path.join(self.config['storage'],
57 'archive')
58 if not 'private' in self.config.keys():
59 self.config['private'] = config.private
60
61 def _validate_member_object(self, member):
62 if not isinstance(member, Member):
63 raise TypeError(member, ' is not a valid Member instance')
64 return member
65
66 def _validate_member(self, member):
67 member = self._validate_member_object(member)
68 return member.address in self.members_addresses()
69
70 def _validate_member_by_address(self, address):
71 if not validate_email_address(address):
72 raise ValueError(address, ' is not a valid email address')
73 return address in self.members_addresses()
74
75 def members_addresses(self):
76 return self.members.keys()
77
78 def add_member(self, member):
79 member = self._validate_member_object(member)
80 if self._validate_member(member):
81 return False
82 self.members[member.address] = member
83 return True
84
85 def add_member_by_address(self, address):
86 if self._validate_member_by_address(address):
87 return False
88 member = Member(address)
89 self.members[address] = member
90
91 def delete_member(self, member):
92 member = self._validate_member_object(member)
93 if not self._validate_member(member):
94 return False
95 del self.members[member.address]
96 return True
97
98 def load(self):
99 if self.storage.exists():
100 data = self.storage.read()
101 self.name = data.name
102 self.address = data.address
103 self.members = data.members
104
105 def save(self):
106 self.storage.write(self)
Note: See TracBrowser for help on using the repository browser.