home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_452 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  6.8 KB  |  239 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. __all__ = [
  5.     'collapse_rfc2231_value',
  6.     'decode_params',
  7.     'decode_rfc2231',
  8.     'encode_rfc2231',
  9.     'formataddr',
  10.     'formatdate',
  11.     'getaddresses',
  12.     'make_msgid',
  13.     'parseaddr',
  14.     'parsedate',
  15.     'parsedate_tz',
  16.     'unquote']
  17. import os
  18. import re
  19. import time
  20. import base64
  21. import random
  22. import socket
  23. import urllib
  24. import warnings
  25. from email._parseaddr import quote
  26. from email._parseaddr import AddressList as _AddressList
  27. from email._parseaddr import mktime_tz
  28. from email._parseaddr import parsedate as _parsedate
  29. from email._parseaddr import parsedate_tz as _parsedate_tz
  30. from quopri import decodestring as _qdecode
  31. from email.encoders import _bencode, _qencode
  32. COMMASPACE = ', '
  33. EMPTYSTRING = ''
  34. UEMPTYSTRING = u''
  35. CRLF = '\r\n'
  36. TICK = "'"
  37. specialsre = re.compile('[][\\\\()<>@,:;".]')
  38. escapesre = re.compile('[][\\\\()"]')
  39.  
  40. def _identity(s):
  41.     return s
  42.  
  43.  
  44. def _bdecode(s):
  45.     if not s:
  46.         return s
  47.     value = base64.decodestring(s)
  48.     if not s.endswith('\n') and value.endswith('\n'):
  49.         return value[:-1]
  50.     return value
  51.  
  52.  
  53. def fix_eols(s):
  54.     s = re.sub('(?<!\\r)\\n', CRLF, s)
  55.     s = re.sub('\\r(?!\\n)', CRLF, s)
  56.     return s
  57.  
  58.  
  59. def formataddr(pair):
  60.     (name, address) = pair
  61.     if name:
  62.         quotes = ''
  63.         if specialsre.search(name):
  64.             quotes = '"'
  65.         
  66.         name = escapesre.sub('\\\\\\g<0>', name)
  67.         return '%s%s%s <%s>' % (quotes, name, quotes, address)
  68.     return address
  69.  
  70.  
  71. def getaddresses(fieldvalues):
  72.     all = COMMASPACE.join(fieldvalues)
  73.     a = _AddressList(all)
  74.     return a.addresslist
  75.  
  76. ecre = re.compile('\n  =\\?                   # literal =?\n  (?P<charset>[^?]*?)   # non-greedy up to the next ? is the charset\n  \\?                    # literal ?\n  (?P<encoding>[qb])    # either a "q" or a "b", case insensitive\n  \\?                    # literal ?\n  (?P<atom>.*?)         # non-greedy up to the next ?= is the atom\n  \\?=                   # literal ?=\n  ', re.VERBOSE | re.IGNORECASE)
  77.  
  78. def formatdate(timeval = None, localtime = False, usegmt = False):
  79.     if timeval is None:
  80.         timeval = time.time()
  81.     
  82.     if localtime:
  83.         now = time.localtime(timeval)
  84.         if time.daylight and now[-1]:
  85.             offset = time.altzone
  86.         else:
  87.             offset = time.timezone
  88.         (hours, minutes) = divmod(abs(offset), 3600)
  89.         if offset > 0:
  90.             sign = '-'
  91.         else:
  92.             sign = '+'
  93.         zone = '%s%02d%02d' % (sign, hours, minutes // 60)
  94.     else:
  95.         now = time.gmtime(timeval)
  96.         if usegmt:
  97.             zone = 'GMT'
  98.         else:
  99.             zone = '-0000'
  100.     return '%s, %02d %s %04d %02d:%02d:%02d %s' % ([
  101.         'Mon',
  102.         'Tue',
  103.         'Wed',
  104.         'Thu',
  105.         'Fri',
  106.         'Sat',
  107.         'Sun'][now[6]], now[2], [
  108.         'Jan',
  109.         'Feb',
  110.         'Mar',
  111.         'Apr',
  112.         'May',
  113.         'Jun',
  114.         'Jul',
  115.         'Aug',
  116.         'Sep',
  117.         'Oct',
  118.         'Nov',
  119.         'Dec'][now[1] - 1], now[0], now[3], now[4], now[5], zone)
  120.  
  121.  
  122. def make_msgid(idstring = None):
  123.     timeval = time.time()
  124.     utcdate = time.strftime('%Y%m%d%H%M%S', time.gmtime(timeval))
  125.     pid = os.getpid()
  126.     randint = random.randrange(100000)
  127.     if idstring is None:
  128.         idstring = ''
  129.     else:
  130.         idstring = '.' + idstring
  131.     idhost = socket.getfqdn()
  132.     msgid = '<%s.%s.%s%s@%s>' % (utcdate, pid, randint, idstring, idhost)
  133.     return msgid
  134.  
  135.  
  136. def parsedate(data):
  137.     if not data:
  138.         return None
  139.     return _parsedate(data)
  140.  
  141.  
  142. def parsedate_tz(data):
  143.     if not data:
  144.         return None
  145.     return _parsedate_tz(data)
  146.  
  147.  
  148. def parseaddr(addr):
  149.     addrs = _AddressList(addr).addresslist
  150.     if not addrs:
  151.         return ('', '')
  152.     return addrs[0]
  153.  
  154.  
  155. def unquote(str):
  156.     return str
  157.  
  158.  
  159. def decode_rfc2231(s):
  160.     parts = s.split(TICK, 2)
  161.     if len(parts) <= 2:
  162.         return (None, None, s)
  163.     return parts
  164.  
  165.  
  166. def encode_rfc2231(s, charset = None, language = None):
  167.     import urllib
  168.     s = urllib.quote(s, safe = '')
  169.     if charset is None and language is None:
  170.         return s
  171.     if language is None:
  172.         language = ''
  173.     
  174.     return "%s'%s'%s" % (charset, language, s)
  175.  
  176. rfc2231_continuation = re.compile('^(?P<name>\\w+)\\*((?P<num>[0-9]+)\\*?)?$')
  177.  
  178. def decode_params(params):
  179.     params = params[:]
  180.     new_params = []
  181.     rfc2231_params = { }
  182.     (name, value) = params.pop(0)
  183.     new_params.append((name, value))
  184.     while params:
  185.         (name, value) = params.pop(0)
  186.         if name.endswith('*'):
  187.             encoded = True
  188.         else:
  189.             encoded = False
  190.         value = unquote(value)
  191.         mo = rfc2231_continuation.match(name)
  192.         if mo:
  193.             (name, num) = mo.group('name', 'num')
  194.             if num is not None:
  195.                 num = int(num)
  196.             
  197.             rfc2231_params.setdefault(name, []).append((num, value, encoded))
  198.             continue
  199.         new_params.append((name, '"%s"' % quote(value)))
  200.     if rfc2231_params:
  201.         for name, continuations in rfc2231_params.items():
  202.             value = []
  203.             extended = False
  204.             continuations.sort()
  205.             for num, s, encoded in continuations:
  206.                 if encoded:
  207.                     s = urllib.unquote(s)
  208.                     extended = True
  209.                 
  210.                 value.append(s)
  211.             
  212.             value = quote(EMPTYSTRING.join(value))
  213.             if extended:
  214.                 (charset, language, value) = decode_rfc2231(value)
  215.                 new_params.append((name, (charset, language, '"%s"' % value)))
  216.                 continue
  217.             new_params.append((name, '"%s"' % value))
  218.         
  219.     
  220.     return new_params
  221.  
  222.  
  223. def collapse_rfc2231_value(value, errors = 'replace', fallback_charset = 'us-ascii'):
  224.     if isinstance(value, tuple):
  225.         rawval = unquote(value[2])
  226.         if not value[0]:
  227.             pass
  228.         charset = 'us-ascii'
  229.         
  230.         try:
  231.             return unicode(rawval, charset, errors)
  232.         except LookupError:
  233.             return unicode(rawval, fallback_charset, errors)
  234.         
  235.  
  236.     None<EXCEPTION MATCH>LookupError
  237.     return unquote(value)
  238.  
  239.