Package svnmailer :: Package notifier :: Module _textnews
[hide private]

Source Code for Module svnmailer.notifier._textnews

  1  # -*- coding: utf-8 -*- 
  2  # pylint: disable-msg = W0613 
  3  # 
  4  # Copyright 2004-2006 André Malo or his licensors, as applicable 
  5  # 
  6  # Licensed under the Apache License, Version 2.0 (the "License"); 
  7  # you may not use this file except in compliance with the License. 
  8  # You may obtain a copy of the License at 
  9  # 
 10  #     http://www.apache.org/licenses/LICENSE-2.0 
 11  # 
 12  # Unless required by applicable law or agreed to in writing, software 
 13  # distributed under the License is distributed on an "AS IS" BASIS, 
 14  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 15  # See the License for the specific language governing permissions and 
 16  # limitations under the License. 
 17  """ 
 18  Text based news notifier 
 19  """ 
 20  __author__    = "André Malo" 
 21  __docformat__ = "epytext en" 
 22  __all__       = ['TextNewsNotifier'] 
 23   
 24  # global imports 
 25  from svnmailer.notifier import _textmail, _mail 
 26   
 27   
28 -def getNotifier(cls, settings, groupset):
29 """ Returns an initialized notifier or nothing 30 31 @param cls: The notifier base class to use 32 @type cls: C{class} 33 34 @param settings: The svnmailer settings 35 @type settings: C{svnmailer.settings.Settings} 36 37 @param groupset: The groupset to process 38 @type groupset: C{list} 39 40 @return: The list of notifiers (containing 0 or 1 member) 41 @rtype: C{list} 42 """ 43 from svnmailer import util 44 45 return [_textmail.decorateNotifier( 46 util.inherit(cls, TextNewsNotifier), 47 groupset.groups[0].long_news_action, settings, groupset 48 )]
49 50
51 -class TextNewsNotifier(_textmail.TextMailNotifier):
52 """ Bases class for news notifiers """ 53 __implements__ = [_textmail.TextMailNotifier] 54
55 - def sendMail(self, sender, to_addr, mail):
56 """ Sends the news 57 58 @param sender: The mail sender (envelope from) 59 @type sender: C{str} 60 61 @param to_addr: The receivers 62 @type to_addr: C{list} 63 64 @param mail: The mail object 65 @type mail: C{_TextMail} 66 """ 67 self.sendNews(mail)
68 69
70 - def sendNews(self, posting):
71 """ Sends the news 72 73 @param posting: The posting object 74 @type posting: C{_textmail._TextMail} 75 """ 76 raise NotImplementedError()
77 78
79 - def getTransferEncoding(self):
80 """ Returns the news transfer encoding """ 81 return self.config.news_transfer_encoding
82 83
84 - def composeHeaders(self, groups):
85 """ Compose the informational headers of the mail 86 87 @param groups: The groups to process 88 @type groups: C{list} 89 90 @return: sender (C{unicode}), recipients (C{list}), headers 91 (C{dict}) 92 @rtype: C{tuple} 93 """ 94 from email import Header 95 96 sender, from_addrs, to_newsgroups, reply_to = \ 97 self.getNewsAddresses(groups) 98 if not to_newsgroups: 99 raise _mail.NoRecipientsError() 100 101 headers = self.getBasicHeaders() 102 headers['From'] = from_addrs[0] 103 headers['Newsgroups'] = Header.Header(','.join(to_newsgroups)) 104 105 if reply_to: 106 headers['Reply-To'] = Header.Header(', '.join(reply_to)) 107 if len(from_addrs) > 1: 108 # TODO: make Sender configurable? 109 headers['Sender'] = Header.Header(from_addrs[0]) 110 111 # TODO: generate message-id (using configured format string)? 112 113 if self._settings.runtime.debug: 114 headers['X-Config-Groups'] = Header.Header(', '.join([ 115 "[%s]" % group._name for group in groups 116 ]), 'iso-8859-1') 117 118 return (sender, to_newsgroups, headers)
119 120
121 - def getNewsAddresses(self, groups):
122 """ Returns the substituted mail addresses (from/to/reply-to) 123 124 @param groups: The groups to process 125 @type groups: C{list} 126 127 @return: The address lists (sender, from, to, reply-to) 128 @rtype: C{tuple} 129 """ 130 from_addrs = [] 131 to_newsgroups = [] 132 reply_to = [] 133 134 sender = None 135 for group in groups: 136 from_addrs.extend(group.from_addr or []) 137 to_newsgroups.extend(group.to_newsgroup or []) 138 reply_to.extend( 139 group.reply_to_addr and [group.reply_to_addr] or [] 140 ) 141 142 from_addrs = dict.fromkeys(from_addrs).keys() or [ 143 (self.getAuthor() and self.getAuthor().decode('utf-8', 'replace')) 144 or u'no_author' 145 ] 146 to_newsgroups = dict.fromkeys(to_newsgroups).keys() 147 reply_to = dict.fromkeys(reply_to).keys() 148 149 return (sender or from_addrs[0], from_addrs, to_newsgroups, reply_to)
150