Mercurial > hg
comparison mercurial/mail.py @ 7948:de377b1a9a84
move encoding bits from util to encoding
In addition to cleaning up util, this gets rid of some circular dependencies.
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Fri, 03 Apr 2009 14:51:48 -0500 |
parents | 9fabcb1fe68d |
children | 46293a0c7e9f |
comparison
equal
deleted
inserted
replaced
7947:a454eeb1b827 | 7948:de377b1a9a84 |
---|---|
6 # of the GNU General Public License, incorporated herein by reference. | 6 # of the GNU General Public License, incorporated herein by reference. |
7 | 7 |
8 from i18n import _ | 8 from i18n import _ |
9 import os, smtplib, socket | 9 import os, smtplib, socket |
10 import email.Header, email.MIMEText, email.Utils | 10 import email.Header, email.MIMEText, email.Utils |
11 import util | 11 import util, encoding |
12 | 12 |
13 def _smtp(ui): | 13 def _smtp(ui): |
14 '''build an smtp connection and return a function to send mail''' | 14 '''build an smtp connection and return a function to send mail''' |
15 local_hostname = ui.config('smtp', 'local_hostname') | 15 local_hostname = ui.config('smtp', 'local_hostname') |
16 s = smtplib.SMTP(local_hostname=local_hostname) | 16 s = smtplib.SMTP(local_hostname=local_hostname) |
98 return email.MIMEText.MIMEText(s, subtype) | 98 return email.MIMEText.MIMEText(s, subtype) |
99 | 99 |
100 def _charsets(ui): | 100 def _charsets(ui): |
101 '''Obtains charsets to send mail parts not containing patches.''' | 101 '''Obtains charsets to send mail parts not containing patches.''' |
102 charsets = [cs.lower() for cs in ui.configlist('email', 'charsets')] | 102 charsets = [cs.lower() for cs in ui.configlist('email', 'charsets')] |
103 fallbacks = [util._fallbackencoding.lower(), | 103 fallbacks = [encoding.fallbackencoding.lower(), |
104 util._encoding.lower(), 'utf-8'] | 104 encoding.encoding.lower(), 'utf-8'] |
105 for cs in fallbacks: # util.unique does not keep order | 105 for cs in fallbacks: # util.unique does not keep order |
106 if cs not in charsets: | 106 if cs not in charsets: |
107 charsets.append(cs) | 107 charsets.append(cs) |
108 return [cs for cs in charsets if not cs.endswith('ascii')] | 108 return [cs for cs in charsets if not cs.endswith('ascii')] |
109 | 109 |
110 def _encode(ui, s, charsets): | 110 def _encode(ui, s, charsets): |
111 '''Returns (converted) string, charset tuple. | 111 '''Returns (converted) string, charset tuple. |
112 Finds out best charset by cycling through sendcharsets in descending | 112 Finds out best charset by cycling through sendcharsets in descending |
113 order. Tries both _encoding and _fallbackencoding for input. Only as | 113 order. Tries both encoding and fallbackencoding for input. Only as |
114 last resort send as is in fake ascii. | 114 last resort send as is in fake ascii. |
115 Caveat: Do not use for mail parts containing patches!''' | 115 Caveat: Do not use for mail parts containing patches!''' |
116 try: | 116 try: |
117 s.decode('ascii') | 117 s.decode('ascii') |
118 except UnicodeDecodeError: | 118 except UnicodeDecodeError: |
119 sendcharsets = charsets or _charsets(ui) | 119 sendcharsets = charsets or _charsets(ui) |
120 for ics in (util._encoding, util._fallbackencoding): | 120 for ics in (encoding.encoding, encoding.fallbackencoding): |
121 try: | 121 try: |
122 u = s.decode(ics) | 122 u = s.decode(ics) |
123 except UnicodeDecodeError: | 123 except UnicodeDecodeError: |
124 continue | 124 continue |
125 for ocs in sendcharsets: | 125 for ocs in sendcharsets: |