source: mailjam/postman/models.py@ 10:d5329a2a05b7

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

Fully added support for the configuration file. Now all the code uses
postman.conf to read the configuration parameters from it

Added a tests/postman.conf configuration file with specific configurtion
to use while testing (mostly tmp paths)

Updated the run_tests script to delete the temporary directory where
data is saved while running tests

Updated the tests modules/files so they use the tests config file

File size: 3.7 KB
Line 
1# -*- coding: utf-8 -*-
2
3import os
4from tools import validate_email_address
5from storage import JsonStorage as Storage
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={}, configfile=None):
36 self.configfile = configfile
37 self.storage_config = config.get_config_parameters('storage',
38 configfile)
39 self.archive_config = config.get_config_parameters('archive',
40 configfile)
41 self.mailing_config = config.get_config_parameters('mailing_lists',
42 configfile)
43 self.name = name
44 self.address = address
45 self.members = members
46
47 def __repr__(self):
48 return "<MailingList '%s'>" % self.address
49
50 def __str__(self):
51 return self.address
52
53 def _validate_member_object(self, member=None):
54 if not isinstance(member, Member):
55 raise TypeError(member, ' is not a valid Member instance')
56 return member
57
58 def _validate_member(self, member=None):
59 member = self._validate_member_object(member)
60 return member.address in self.members_addresses()
61
62 def _validate_member_by_address(self, address=None):
63 if not validate_email_address(address):
64 raise ValueError(address, ' is not a valid email address')
65 return address in self.members_addresses()
66
67 @property
68 def storage(self):
69 return Storage(os.path.join(self.storage_config['path'], self.address))
70
71 @property
72 def archive(self):
73 return Storage(os.path.join(self.archive_config['path'], self.address))
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=None):
86 if self._validate_member_by_address(address):
87 return False
88 member = Member(address)
89 self.members[address] = member
90 return True
91
92 def delete_member(self, member=None):
93 member = self._validate_member_object(member)
94 if not self._validate_member(member):
95 return False
96 del self.members[member.address]
97 return True
98
99 def info(self):
100 """
101 Returns a dict we can use to add this mailing list to a postman
102 instance
103 """
104 # FIXME: This code could be replaced with something that
105 # automagically generates the dict from the instance attributes
106 return {'name': self.name, 'address': self.address,
107 'members': self.members, 'configfile': self.configfile}
108
109 def load(self):
110 if self.storage.exists():
111 data = self.storage.read()
112 self.name = data.name
113 self.address = data.address
114 self.members = data.members
115 return True
116 return False
117
118 def save(self):
119 self.storage.write(self)
Note: See TracBrowser for help on using the repository browser.