Merge lp:~stylistica/mailman.client/user_preferences into lp:mailman.client

Proposed by Sneha Priscilla
Status: Merged
Merged at revision: 47
Proposed branch: lp:~stylistica/mailman.client/user_preferences
Merge into: lp:mailman.client
Diff against target: 157 lines (+28/-6)
1 file modified
src/mailmanclient/_client.py (+28/-6)
To merge this branch: bzr merge lp:~stylistica/mailman.client/user_preferences
Reviewer Review Type Date Requested Status
Florian Fuchs Pending
Review via email: mp+188950@code.launchpad.net

Description of the change

Made changes to the Mailman client file with respect to my user preferences GSoC project.
Brief Summary: Added a read only attributes list for preferences , added preferences for Address object which was missing

To post a comment you must log in.
Revision history for this message
Terri (terriko) wrote :

Asked stylistica, and apparently the extra lines were added by the pep8 tool, so I'm going to assume they're awesome and long-overdue fixes ;)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/mailmanclient/_client.py'
2--- src/mailmanclient/_client.py 2013-03-22 18:28:16 +0000
3+++ src/mailmanclient/_client.py 2013-10-02 22:19:26 +0000
4@@ -43,11 +43,13 @@
5
6
7 class MailmanConnectionError(Exception):
8+
9 """Custom Exception to catch connection errors."""
10 pass
11
12
13 class _Connection:
14+
15 """A connection to the REST client."""
16
17 def __init__(self, baseurl, name=None, password=None):
18@@ -122,6 +124,7 @@
19
20
21 class Client:
22+
23 """Access the Mailman REST API root."""
24
25 def __init__(self, baseurl, name=None, password=None):
26@@ -248,8 +251,9 @@
27 response, content = self._connection.call(
28 'lists/{0}'.format(fqdn_listname), None, 'DELETE')
29
30-
31
32+
33 class _Domain:
34+
35 def __init__(self, connection, url):
36 self._connection = connection
37 self._url = url
38@@ -308,6 +312,7 @@
39
40
41 class _List:
42+
43 def __init__(self, connection, url, data=None):
44 self._connection = connection
45 self._url = url
46@@ -538,6 +543,7 @@
47
48
49 class _Member:
50+
51 def __init__(self, connection, url):
52 self._connection = connection
53 self._url = url
54@@ -594,6 +600,7 @@
55
56
57 class _User:
58+
59 def __init__(self, connection, url):
60 self._connection = connection
61 self._url = url
62@@ -656,11 +663,11 @@
63 subscriptions = []
64 for address in self.addresses:
65 response, content = self._connection.call('members/find',
66- data={'subscriber': address})
67+ data={'subscriber': address})
68 try:
69 for entry in content['entries']:
70 subscriptions.append(_Member(self._connection,
71- entry['self_link']))
72+ entry['self_link']))
73 except KeyError:
74 pass
75 self._subscriptions = subscriptions
76@@ -696,6 +703,7 @@
77
78
79 class _Addresses:
80+
81 def __init__(self, connection, user_id):
82 self._connection = connection
83 self._user_id = user_id
84@@ -719,9 +727,11 @@
85
86
87 class _Address:
88+
89 def __init__(self, connection, address):
90 self._connection = connection
91 self._address = address
92+ self._preferences = None
93 self._url = address['self_link']
94 self._info = None
95
96@@ -748,6 +758,13 @@
97 self._get_info()
98 return self._info.get('verified_on')
99
100+ @property
101+ def preferences(self):
102+ if self._preferences is None:
103+ path = 'addresses/{0}/preferences'.format(self._address['email'])
104+ self._preferences = _Preferences(self._connection, path)
105+ return self._preferences
106+
107 def verify(self):
108 self._connection.call('addresses/{0}/verify'
109 .format(self._address['email']), method='POST')
110@@ -768,8 +785,11 @@
111 'receive_list_copy',
112 'receive_own_postings', )
113
114+PREF_READ_ONLY_ATTRS = ('http_etag', 'self_link')
115+
116
117 class _Preferences:
118+
119 def __init__(self, connection, url):
120 self._connection = connection
121 self._url = url
122@@ -789,7 +809,7 @@
123
124 def __setitem__(self, key, value):
125 self._preferences[key] = value
126-
127+
128 def __getitem__(self, key):
129 return self._preferences[key]
130
131@@ -812,9 +832,9 @@
132 def save(self):
133 data = {}
134 for key in self._preferences:
135- if self._preferences[key] is not None:
136+ if key not in PREF_READ_ONLY_ATTRS and self._preferences[key] is not None:
137 data[key] = self._preferences[key]
138- response, content = self._connection.call(self._url, data, 'PUT')
139+ response, content = self._connection.call(self._url, data, 'PATCH')
140
141
142 LIST_READ_ONLY_ATTRS = ('bounces_address', 'created_at', 'digest_last_sent_at',
143@@ -827,6 +847,7 @@
144
145
146 class _Settings:
147+
148 def __init__(self, connection, url):
149 self._connection = connection
150 self._url = url
151@@ -872,6 +893,7 @@
152
153
154 class _Page:
155+
156 def __init__(self, connection, path, model, count=DEFAULT_PAGE_ITEM_COUNT,
157 page=1):
158 self._connection = connection

Subscribers

People subscribed via source and target branches