コード例 #1
0
ファイル: query.py プロジェクト: baruwaproject/baruwa2
def get_tagged_addrs(user):
    """Generate a list of tagged addresses for a user"""
    query1 = Session.query(Message.to_address)
    query2 = Session.query(Message.from_address)
    addrs = [addr.address for addr in user.addresses
            if '+*' not in addr.address and '-*' not in addr.address]
    addrs.append(user.email)
    tagged_addrs = [addr.address for addr in user.addresses
            if '+*' in addr.address or '-*' in addr.address]
    if tagged_addrs:
        tagged_opts1 = func._(or_(*[Message.to_address
                            .like(TAGGED_RE.sub(r'\g<one>%', taddr))
                        for taddr in tagged_addrs]))
        tagged_opts2 = func._(or_(*[Message.from_address
                            .like(TAGGED_RE.sub(r'\g<one>%', taddr))
                        for taddr in tagged_addrs]))
        query1 = query1.filter(func._(
                        or_(tagged_opts1, Message.to_address.in_(addrs))))
        query2 = query2.filter(func._(
                        or_(tagged_opts2, Message.from_address.in_(addrs))))
    else:
        query1 = query1.filter(Message.to_address.in_(addrs))
        query2 = query2.filter(Message.from_address.in_(addrs))
    query1 = query1.distinct()
    query2 = query2.distinct()
    to_addrs = [val.to_address for val in query1]
    from_addrs = [val.from_address for val in query2]
    all_addrs = set(to_addrs + from_addrs)
    return [str(crc32(val)) for val in all_addrs]
コード例 #2
0
 def __init__(self, dbsession, user):
     "init"
     self.dbsession = dbsession
     self.user = user
     self.query = self.dbsession.query(func.count(MailQueueItem.id))
     if self.user.is_domain_admin:
         dquery = self.dbsession.query(Domain).join(downs,
                 (oa, downs.c.organization_id == oa.c.organization_id))\
                 .filter(Domain.status == true())\
                 .filter(oa.c.user_id == self.user.id).all()
         # domains = [domain.name for domain in dquery]
         domains = []
         for domain in dquery:
             domains.append(domain.name)
             for domain_alias in domain.aliases:
                 if domain_alias.status:
                     domains.append(domain_alias.name)
         if not domains:
             domains.append('xx')
         self.query = self.query.filter(
             func._(
                 or_(MailQueueItem.to_domain.in_(domains),
                     MailQueueItem.from_domain.in_(domains))))
     if self.user.is_peleb:
         addrs = [
             addr.address for addr in self.user.addresses
             if '+*' not in addr.address and '-*' not in addr.address
         ]
         addrs.append(self.user.email)
         tagged_addrs = [
             addr.address for addr in self.user.addresses
             if '+*' in addr.address or '-*' in addr.address
         ]
         if tagged_addrs:
             tagged_to = func._(
                 or_(*[
                     MailQueueItem.to_address.like(
                         TAGGED_RE.sub(r'\g<one>%', taddr))
                     for taddr in tagged_addrs
                 ]))
             tagged_from = func._(
                 or_(*[
                     MailQueueItem.from_address.like(
                         TAGGED_RE.sub(r'\g<one>%', taddr))
                     for taddr in tagged_addrs
                 ]))
             self.query = self.query\
                                 .filter(func._(
                                     or_(tagged_to,
                                     tagged_from,
                                     MailQueueItem.to_address.in_(addrs),
                                     MailQueueItem.from_address.in_(addrs))
                                 )
                                 )
         else:
             self.query = self.query\
                     .filter(func._(
                         or_(MailQueueItem.to_address.in_(addrs),
                     MailQueueItem.from_address.in_(addrs))))
コード例 #3
0
ファイル: query.py プロジェクト: baruwaproject/baruwa2
 def _build_user_filter(self):
     "Build user filter"
     addrs = [addr.address for addr in self.user.addresses
             if '+*' not in addr.address and '-*' not in addr.address]
     addrs.append(self.user.email)
     tagged_addrs = [addr.address for addr in self.user.addresses
             if '+*' in addr.address or '-*' in addr.address]
     if self.direction and self.direction == 'in':
         if tagged_addrs:
             tagged_opts = func._(or_(*[self.model.to_address
                                 .like(TAGGED_RE.sub(r'\g<one>%', taddr))
                             for taddr in tagged_addrs]))
             self.query = self.query\
                     .filter(
                         func._(
                             or_(tagged_opts,
                                 self.model.to_address.in_(addrs))))
         else:
             self.query = self.query\
                     .filter(self.model.to_address.in_(addrs))
     elif self.direction and self.direction == 'out':
         if tagged_addrs:
             tagged_opts = func._(or_(*[self.model.from_address
                                 .like(TAGGED_RE.sub(r'\g<one>%', taddr))
                             for taddr in tagged_addrs]))
             self.query = self.query\
                     .filter(
                         func._(
                             or_(tagged_opts,
                                 self.model.from_address.in_(addrs))))
         else:
             self.query = self.query\
                     .filter(self.model.from_address.in_(addrs))
     else:
         if tagged_addrs:
             tagged_to = func._(or_(*[self.model.to_address
                                 .like(TAGGED_RE.sub(r'\g<one>%', taddr))
                             for taddr in tagged_addrs]))
             tagged_from = func._(or_(*[self.model.from_address
                                 .like(TAGGED_RE.sub(r'\g<one>%', taddr))
                             for taddr in tagged_addrs]))
             self.query = self.query\
                     .filter(func._(
                         or_(tagged_to, tagged_from,
                         self.model.to_address.in_(addrs),
                         self.model.from_address.in_(addrs))))
         else:
             self.query = self.query\
                     .filter(func._(
                         or_(self.model.to_address.in_(addrs),
                         self.model.from_address.in_(addrs))))
コード例 #4
0
 def count(self):
     "Get the count"
     if self.user.is_domain_admin:
         dquery = self.dbsession.query(Domain).join(downs,
                 (oa, downs.c.organization_id == oa.c.organization_id))\
                 .filter(Domain.status == true())\
                 .filter(oa.c.user_id == self.user.id).all()
         # domains = [domain.name for domain in dquery]
         domains = []
         for domain in dquery:
             domains.append(domain.name)
             for domain_alias in domain.aliases:
                 if domain_alias.status:
                     domains.append(domain_alias.name)
         self.query = self.query.filter(MessageTotals.id.in_(domains))
     elif self.user.is_peleb:
         addrs = [
             addr.address for addr in self.user.addresses
             if '+*' not in addr.address and '-*' not in addr.address
         ]
         tagged_addrs = [
             addr.address for addr in self.user.addresses
             if '+*' in addr.address or '-*' in addr.address
         ]
         addrs.append(self.user.email)
         if tagged_addrs:
             tagged_to = func._(
                 or_(*[
                     Message.to_address.like(
                         TAGGED_RE.sub(r'\g<one>%', taddr))
                     for taddr in tagged_addrs
                 ]))
             tagged_from = func._(
                 or_(*[
                     Message.from_address.like(
                         TAGGED_RE.sub(r'\g<one>%', taddr))
                     for taddr in tagged_addrs
                 ]))
             self.query = self.query.filter(
                 func._(
                     or_(tagged_to, tagged_from,
                         Message.to_address.in_(addrs),
                         Message.from_address.in_(addrs))))
         else:
             self.query = self.query.filter(
                 func._(
                     or_(Message.to_address.in_(addrs),
                         Message.from_address.in_(addrs))))
     value = self.query.one()
     return int(value.total or 0)
コード例 #5
0
ファイル: query.py プロジェクト: baruwaproject/baruwa2
 def get(self, hostname=None):
     "Return the query object"
     if hostname is not None:
         self.query = self.query.filter(Message.hostname == hostname)
     if self.user.is_domain_admin:
         domainquery = self.dbsession.query(Domain).join(downs,
                 (oa, downs.c.organization_id == oa.c.organization_id))\
                 .filter(Domain.status == true())\
                 .filter(oa.c.user_id == self.user.id).all()
         dquery = []
         for domain in domainquery:
             dquery.append(domain.name)
             if domain.aliases:
                 for domain_alias in domain.aliases:
                     dquery.append(domain_alias.name)
         if not dquery:
             dquery.append('xx')
         self.query = self.query.filter(func._(
                     or_(Message.to_domain.in_(dquery),
                     Message.from_domain.in_(dquery))))
     if self.user.is_peleb:
         addrs = [addr.address for addr in self.user.addresses
                 if '+*' not in addr.address and '-*' not in addr.address]
         addrs.append(self.user.email)
         tagged_addrs = [addr.address for addr in self.user.addresses
                 if '+*' in addr.address or '-*' in addr.address]
         if tagged_addrs:
             tagged_to = func._(or_(*[Message.to_address
                                 .like(TAGGED_RE.sub(r'\g<one>%', taddr))
                             for taddr in tagged_addrs]))
             tagged_from = func._(or_(*[Message.from_address
                                 .like(TAGGED_RE.sub(r'\g<one>%', taddr))
                             for taddr in tagged_addrs]))
             self.query = self.query.filter(
                                         func._(or_(tagged_to, tagged_from,
                                         Message.to_address.in_(addrs),
                                         Message.from_address.in_(addrs))))
         else:
             self.query = self.query.filter(
                     func._(or_(Message.to_address.in_(addrs),
                     Message.from_address.in_(addrs))))
     cachekey = 'dailytotals-%s-%s' % (self.user.username, hostname)
     try:
         self.query = self.query.\
                             options(FromCache('sql_cache_short', cachekey))
     except PylibmcError:
         pass
     return self.query.one()
コード例 #6
0
ファイル: query.py プロジェクト: baruwaproject/baruwa2
 def __init__(self, dbsession, user):
     "init"
     self.dbsession = dbsession
     self.user = user
     self.query = self.dbsession.query(func.count(MailQueueItem.id))
     if self.user.is_domain_admin:
         dquery = self.dbsession.query(Domain).join(downs,
                 (oa, downs.c.organization_id == oa.c.organization_id))\
                 .filter(Domain.status == true())\
                 .filter(oa.c.user_id == self.user.id).all()
         # domains = [domain.name for domain in dquery]
         domains = []
         for domain in dquery:
             domains.append(domain.name)
             for domain_alias in domain.aliases:
                 if domain_alias.status:
                     domains.append(domain_alias.name)
         if not domains:
             domains.append('xx')
         self.query = self.query.filter(
                         func._(or_(MailQueueItem.to_domain.in_(domains),
                         MailQueueItem.from_domain.in_(domains))))
     if self.user.is_peleb:
         addrs = [addr.address for addr in self.user.addresses
                 if '+*' not in addr.address and '-*' not in addr.address]
         addrs.append(self.user.email)
         tagged_addrs = [addr.address for addr in self.user.addresses
                 if '+*' in addr.address or '-*' in addr.address]
         if tagged_addrs:
             tagged_to = func._(or_(*[MailQueueItem.to_address
                                 .like(TAGGED_RE.sub(r'\g<one>%', taddr))
                             for taddr in tagged_addrs]))
             tagged_from = func._(or_(*[MailQueueItem.from_address
                             .like(TAGGED_RE.sub(r'\g<one>%', taddr))
                             for taddr in tagged_addrs]))
             self.query = self.query\
                                 .filter(func._(
                                     or_(tagged_to,
                                     tagged_from,
                                     MailQueueItem.to_address.in_(addrs),
                                     MailQueueItem.from_address.in_(addrs))
                                 )
                                 )
         else:
             self.query = self.query\
                     .filter(func._(
                         or_(MailQueueItem.to_address.in_(addrs),
                     MailQueueItem.from_address.in_(addrs))))
コード例 #7
0
ファイル: query.py プロジェクト: baruwaproject/baruwa2
 def count(self):
     "Get the count"
     if self.user.is_domain_admin:
         dquery = self.dbsession.query(Domain).join(downs,
                 (oa, downs.c.organization_id == oa.c.organization_id))\
                 .filter(Domain.status == true())\
                 .filter(oa.c.user_id == self.user.id).all()
         # domains = [domain.name for domain in dquery]
         domains = []
         for domain in dquery:
             domains.append(domain.name)
             for domain_alias in domain.aliases:
                 if domain_alias.status:
                     domains.append(domain_alias.name)
         self.query = self.query.filter(MessageTotals.id.in_(domains))
     elif self.user.is_peleb:
         addrs = [addr.address for addr in self.user.addresses
         if '+*' not in addr.address and '-*' not in addr.address]
         tagged_addrs = [addr.address for addr in self.user.addresses
                 if '+*' in addr.address or '-*' in addr.address]
         addrs.append(self.user.email)
         if tagged_addrs:
             tagged_to = func._(or_(*[Message.to_address
                                 .like(TAGGED_RE.sub(r'\g<one>%', taddr))
                             for taddr in tagged_addrs]))
             tagged_from = func._(or_(*[Message.from_address
                                 .like(TAGGED_RE.sub(r'\g<one>%', taddr))
                             for taddr in tagged_addrs]))
             self.query = self.query.filter(func._(or_(
                                         tagged_to, tagged_from,
                                         Message.to_address.in_(addrs),
                                         Message.from_address.in_(addrs))))
         else:
             self.query = self.query.filter(func._(
                             or_(Message.to_address.in_(addrs),
                             Message.from_address.in_(addrs))))
     value = self.query.one()
     return int(value.total or 0)
コード例 #8
0
def get_tagged_addrs(user):
    """Generate a list of tagged addresses for a user"""
    query1 = Session.query(Message.to_address)
    query2 = Session.query(Message.from_address)
    addrs = [
        addr.address for addr in user.addresses
        if '+*' not in addr.address and '-*' not in addr.address
    ]
    addrs.append(user.email)
    tagged_addrs = [
        addr.address for addr in user.addresses
        if '+*' in addr.address or '-*' in addr.address
    ]
    if tagged_addrs:
        tagged_opts1 = func._(
            or_(*[
                Message.to_address.like(TAGGED_RE.sub(r'\g<one>%', taddr))
                for taddr in tagged_addrs
            ]))
        tagged_opts2 = func._(
            or_(*[
                Message.from_address.like(TAGGED_RE.sub(r'\g<one>%', taddr))
                for taddr in tagged_addrs
            ]))
        query1 = query1.filter(
            func._(or_(tagged_opts1, Message.to_address.in_(addrs))))
        query2 = query2.filter(
            func._(or_(tagged_opts2, Message.from_address.in_(addrs))))
    else:
        query1 = query1.filter(Message.to_address.in_(addrs))
        query2 = query2.filter(Message.from_address.in_(addrs))
    query1 = query1.distinct()
    query2 = query2.distinct()
    to_addrs = [val.to_address for val in query1]
    from_addrs = [val.from_address for val in query2]
    all_addrs = set(to_addrs + from_addrs)
    return [str(crc32(val)) for val in all_addrs]
コード例 #9
0
 def get(self, hostname=None):
     "Return the query object"
     if hostname is not None:
         self.query = self.query.filter(Message.hostname == hostname)
     if self.user.is_domain_admin:
         domainquery = self.dbsession.query(Domain).join(downs,
                 (oa, downs.c.organization_id == oa.c.organization_id))\
                 .filter(Domain.status == true())\
                 .filter(oa.c.user_id == self.user.id).all()
         dquery = []
         for domain in domainquery:
             dquery.append(domain.name)
             if domain.aliases:
                 for domain_alias in domain.aliases:
                     dquery.append(domain_alias.name)
         if not dquery:
             dquery.append('xx')
         self.query = self.query.filter(
             func._(
                 or_(Message.to_domain.in_(dquery),
                     Message.from_domain.in_(dquery))))
     if self.user.is_peleb:
         addrs = [
             addr.address for addr in self.user.addresses
             if '+*' not in addr.address and '-*' not in addr.address
         ]
         addrs.append(self.user.email)
         tagged_addrs = [
             addr.address for addr in self.user.addresses
             if '+*' in addr.address or '-*' in addr.address
         ]
         if tagged_addrs:
             tagged_to = func._(
                 or_(*[
                     Message.to_address.like(
                         TAGGED_RE.sub(r'\g<one>%', taddr))
                     for taddr in tagged_addrs
                 ]))
             tagged_from = func._(
                 or_(*[
                     Message.from_address.like(
                         TAGGED_RE.sub(r'\g<one>%', taddr))
                     for taddr in tagged_addrs
                 ]))
             self.query = self.query.filter(
                 func._(
                     or_(tagged_to, tagged_from,
                         Message.to_address.in_(addrs),
                         Message.from_address.in_(addrs))))
         else:
             self.query = self.query.filter(
                 func._(
                     or_(Message.to_address.in_(addrs),
                         Message.from_address.in_(addrs))))
     cachekey = 'dailytotals-%s-%s' % (self.user.username, hostname)
     try:
         self.query = self.query.\
                             options(FromCache('sql_cache_short', cachekey))
     except PylibmcError:
         pass
     return self.query.one()
コード例 #10
0
 def _build_user_filter(self):
     "Build user filter"
     addrs = [
         addr.address for addr in self.user.addresses
         if '+*' not in addr.address and '-*' not in addr.address
     ]
     addrs.append(self.user.email)
     tagged_addrs = [
         addr.address for addr in self.user.addresses
         if '+*' in addr.address or '-*' in addr.address
     ]
     if self.direction and self.direction == 'in':
         if tagged_addrs:
             tagged_opts = func._(
                 or_(*[
                     self.model.to_address.like(
                         TAGGED_RE.sub(r'\g<one>%', taddr))
                     for taddr in tagged_addrs
                 ]))
             self.query = self.query\
                     .filter(
                         func._(
                             or_(tagged_opts,
                                 self.model.to_address.in_(addrs))))
         else:
             self.query = self.query\
                     .filter(self.model.to_address.in_(addrs))
     elif self.direction and self.direction == 'out':
         if tagged_addrs:
             tagged_opts = func._(
                 or_(*[
                     self.model.from_address.like(
                         TAGGED_RE.sub(r'\g<one>%', taddr))
                     for taddr in tagged_addrs
                 ]))
             self.query = self.query\
                     .filter(
                         func._(
                             or_(tagged_opts,
                                 self.model.from_address.in_(addrs))))
         else:
             self.query = self.query\
                     .filter(self.model.from_address.in_(addrs))
     else:
         if tagged_addrs:
             tagged_to = func._(
                 or_(*[
                     self.model.to_address.like(
                         TAGGED_RE.sub(r'\g<one>%', taddr))
                     for taddr in tagged_addrs
                 ]))
             tagged_from = func._(
                 or_(*[
                     self.model.from_address.like(
                         TAGGED_RE.sub(r'\g<one>%', taddr))
                     for taddr in tagged_addrs
                 ]))
             self.query = self.query\
                     .filter(func._(
                         or_(tagged_to, tagged_from,
                         self.model.to_address.in_(addrs),
                         self.model.from_address.in_(addrs))))
         else:
             self.query = self.query\
                     .filter(func._(
                         or_(self.model.to_address.in_(addrs),
                         self.model.from_address.in_(addrs))))