~sambuddhabasu1/mailman/fix_mailman_run_error

« back to all changes in this revision

Viewing changes to src/mailman/model/roster.py

  • Committer: Barry Warsaw
  • Date: 2014-11-01 16:49:15 UTC
  • mfrom: (7251.1.38 abhilash)
  • Revision ID: barry@list.org-20141101164915-06wqfmya6wf47n6n
Database
--------
 * The ORM layer, previously implemented with Storm, has been replaced by
   SQLAlchemy, thanks to the fantastic work by Abhilash Raj and Aurélien
   Bompard.  Alembic is now used for all database schema migrations.
 * The new logger `mailman.database` logs any errors at the database layer.

API
---
 * Several changes to the internal API:
   - `IListManager.mailing_lists` is guaranteed to be sorted in List-ID order.
   - `IDomains.mailing_lists` is guaranteed to be sorted in List-ID order.
   - Iteration over domains via the `IDomainManager` is guaranteed to be sorted
     by `IDomain.mail_host` order.
   - `ITemporaryDatabase` interface and all implementations are removed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
    ]
38
38
 
39
39
 
40
 
from storm.expr import And, Or
 
40
from sqlalchemy import and_, or_
41
41
from zope.interface import implementer
42
42
 
43
43
from mailman.database.transaction import dbconnection
65
65
 
66
66
    @dbconnection
67
67
    def _query(self, store):
68
 
        return store.find(
69
 
            Member,
 
68
        return store.query(Member).filter(
70
69
            Member.list_id == self._mlist.list_id,
71
70
            Member.role == self.role)
72
71
 
104
103
    @dbconnection
105
104
    def get_member(self, store, address):
106
105
        """See `IRoster`."""
107
 
        results = store.find(
108
 
            Member,
 
106
        results = store.query(Member).filter(
109
107
            Member.list_id == self._mlist.list_id,
110
108
            Member.role == self.role,
111
109
            Address.email == address,
160
158
 
161
159
    @dbconnection
162
160
    def _query(self, store):
163
 
        return store.find(
164
 
            Member,
 
161
        return store.query(Member).filter(
165
162
            Member.list_id == self._mlist.list_id,
166
 
            Or(Member.role == MemberRole.owner,
167
 
               Member.role == MemberRole.moderator))
 
163
            or_(Member.role == MemberRole.owner,
 
164
                Member.role == MemberRole.moderator))
168
165
 
169
166
    @dbconnection
170
167
    def get_member(self, store, address):
171
168
        """See `IRoster`."""
172
 
        results = store.find(
173
 
                Member,
174
 
                Member.list_id == self._mlist.list_id,
175
 
                Or(Member.role == MemberRole.moderator,
176
 
                   Member.role == MemberRole.owner),
177
 
                Address.email == address,
178
 
                Member.address_id == Address.id)
 
169
        results = store.query(Member).filter(
 
170
            Member.list_id == self._mlist.list_id,
 
171
            or_(Member.role == MemberRole.moderator,
 
172
                Member.role == MemberRole.owner),
 
173
            Address.email == address,
 
174
            Member.address_id == Address.id)
179
175
        if results.count() == 0:
180
176
            return None
181
177
        elif results.count() == 1:
206
202
        :return: A generator of members.
207
203
        :rtype: generator
208
204
        """
209
 
        results = store.find(
210
 
            Member,
211
 
            And(Member.list_id == self._mlist.list_id,
212
 
                Member.role == MemberRole.member))
 
205
        results = store.query(Member).filter_by(
 
206
            list_id = self._mlist.list_id,
 
207
            role = MemberRole.member)
213
208
        for member in results:
214
209
            if member.delivery_mode in delivery_modes:
215
210
                yield member
250
245
 
251
246
    @dbconnection
252
247
    def _query(self, store):
253
 
        return store.find(Member, Member.list_id == self._mlist.list_id)
 
248
        return store.query(Member).filter_by(list_id = self._mlist.list_id)
254
249
 
255
250
 
256
251
 
265
260
 
266
261
    @dbconnection
267
262
    def _query(self, store):
268
 
        results = store.find(
269
 
            Member,
270
 
            Or(Member.user_id == self._user.id,
271
 
               And(Address.user_id == self._user.id,
272
 
                   Member.address_id == Address.id)))
273
 
        return results.config(distinct=True)
 
263
        results = store.query(Member).filter(
 
264
            or_(Member.user_id == self._user.id,
 
265
            and_(Address.user_id == self._user.id,
 
266
                 Member.address_id == Address.id)))
 
267
        return results.distinct()
274
268
 
275
269
    @property
276
270
    def member_count(self):
297
291
    @dbconnection
298
292
    def get_member(self, store, address):
299
293
        """See `IRoster`."""
300
 
        results = store.find(
301
 
            Member,
 
294
        results = store.query(Member).filter(
302
295
            Member.address_id == Address.id,
303
296
            Address.user_id == self._user.id)
304
297
        if results.count() == 0: