home *** CD-ROM | disk | FTP | other *** search
/ Freelog 116 / FreelogNo116-JuilletSeptembre2013.iso / GestionFichiers / metamorphose / metamorphose2_0.8.2_setup.exe / metamorphose2.exe / mimetools.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2011-01-12  |  7KB  |  258 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. import os
  5. import sys
  6. import tempfile
  7. from warnings import filterwarnings, catch_warnings
  8. catch_warnings().__enter__()
  9.  
  10. try:
  11.     import rfc822
  12. finally:
  13.     pass
  14.  
  15. from warnings import warnpy3k
  16. warnpy3k('in 3.x, mimetools has been removed in favor of the email package', stacklevel = 2)
  17. __all__ = [
  18.     'Message',
  19.     'choose_boundary',
  20.     'encode',
  21.     'decode',
  22.     'copyliteral',
  23.     'copybinary']
  24.  
  25. class Message(rfc822.Message):
  26.     
  27.     def __init__(self, fp, seekable = 1):
  28.         rfc822.Message.__init__(self, fp, seekable)
  29.         self.encodingheader = self.getheader('content-transfer-encoding')
  30.         self.typeheader = self.getheader('content-type')
  31.         self.parsetype()
  32.         self.parseplist()
  33.  
  34.     
  35.     def parsetype(self):
  36.         str = self.typeheader
  37.         if str is None:
  38.             str = 'text/plain'
  39.         
  40.         if ';' in str:
  41.             i = str.index(';')
  42.             self.plisttext = str[i:]
  43.             str = str[:i]
  44.         else:
  45.             self.plisttext = ''
  46.         fields = str.split('/')
  47.         for i in range(len(fields)):
  48.             fields[i] = fields[i].strip().lower()
  49.         
  50.         self.type = '/'.join(fields)
  51.         self.maintype = fields[0]
  52.         self.subtype = '/'.join(fields[1:])
  53.  
  54.     
  55.     def parseplist(self):
  56.         str = self.plisttext
  57.         self.plist = []
  58.         while str[:1] == ';':
  59.             str = str[1:]
  60.             if ';' in str:
  61.                 end = str.index(';')
  62.             else:
  63.                 end = len(str)
  64.             f = str[:end]
  65.             if '=' in f:
  66.                 i = f.index('=')
  67.                 f = f[:i].strip().lower() + '=' + f[i + 1:].strip()
  68.             
  69.             self.plist.append(f.strip())
  70.             str = str[end:]
  71.  
  72.     
  73.     def getplist(self):
  74.         return self.plist
  75.  
  76.     
  77.     def getparam(self, name):
  78.         name = name.lower() + '='
  79.         n = len(name)
  80.         for p in self.plist:
  81.             if p[:n] == name:
  82.                 return rfc822.unquote(p[n:])
  83.         
  84.  
  85.     
  86.     def getparamnames(self):
  87.         result = []
  88.         for p in self.plist:
  89.             i = p.find('=')
  90.             if i >= 0:
  91.                 result.append(p[:i].lower())
  92.                 continue
  93.         
  94.         return result
  95.  
  96.     
  97.     def getencoding(self):
  98.         if self.encodingheader is None:
  99.             return '7bit'
  100.         return self.encodingheader.lower()
  101.  
  102.     
  103.     def gettype(self):
  104.         return self.type
  105.  
  106.     
  107.     def getmaintype(self):
  108.         return self.maintype
  109.  
  110.     
  111.     def getsubtype(self):
  112.         return self.subtype
  113.  
  114.  
  115.  
  116. try:
  117.     import thread
  118. except ImportError:
  119.     catch_warnings().__exit__
  120.     catch_warnings().__exit__
  121.     catch_warnings()
  122.     import dummy_thread as thread
  123. except:
  124.     catch_warnings().__exit__
  125.  
  126. _counter_lock = thread.allocate_lock()
  127. del thread
  128. _counter = 0
  129.  
  130. def _get_next_counter():
  131.     global _counter
  132.     _counter_lock.acquire()
  133.     _counter += 1
  134.     result = _counter
  135.     _counter_lock.release()
  136.     return result
  137.  
  138. _prefix = None
  139.  
  140. def choose_boundary():
  141.     global _prefix
  142.     import time as time
  143.     if _prefix is None:
  144.         import socket as socket
  145.         
  146.         try:
  147.             hostid = socket.gethostbyname(socket.gethostname())
  148.         except socket.gaierror:
  149.             hostid = '127.0.0.1'
  150.  
  151.         
  152.         try:
  153.             uid = repr(os.getuid())
  154.         except AttributeError:
  155.             uid = '1'
  156.  
  157.         
  158.         try:
  159.             pid = repr(os.getpid())
  160.         except AttributeError:
  161.             pid = '1'
  162.  
  163.         _prefix = hostid + '.' + uid + '.' + pid
  164.     
  165.     return '%s.%.3f.%d' % (_prefix, time.time(), _get_next_counter())
  166.  
  167.  
  168. def decode(input, output, encoding):
  169.     if encoding == 'base64':
  170.         import base64
  171.         return base64.decode(input, output)
  172.     if encoding == 'quoted-printable':
  173.         import quopri as quopri
  174.         return quopri.decode(input, output)
  175.     if encoding in ('uuencode', 'x-uuencode', 'uue', 'x-uue'):
  176.         import uu as uu
  177.         return uu.decode(input, output)
  178.     if encoding in ('7bit', '8bit'):
  179.         return output.write(input.read())
  180.     if encoding in decodetab:
  181.         pipethrough(input, decodetab[encoding], output)
  182.     else:
  183.         raise ValueError, 'unknown Content-Transfer-Encoding: %s' % encoding
  184.     return encoding in ('7bit', '8bit')
  185.  
  186.  
  187. def encode(input, output, encoding):
  188.     if encoding == 'base64':
  189.         import base64
  190.         return base64.encode(input, output)
  191.     if encoding == 'quoted-printable':
  192.         import quopri
  193.         return quopri.encode(input, output, 0)
  194.     if encoding in ('uuencode', 'x-uuencode', 'uue', 'x-uue'):
  195.         import uu
  196.         return uu.encode(input, output)
  197.     if encoding in ('7bit', '8bit'):
  198.         return output.write(input.read())
  199.     if encoding in encodetab:
  200.         pipethrough(input, encodetab[encoding], output)
  201.     else:
  202.         raise ValueError, 'unknown Content-Transfer-Encoding: %s' % encoding
  203.     return encoding in ('7bit', '8bit')
  204.  
  205. uudecode_pipe = '(\nTEMP=/tmp/@uu.$$\nsed "s%^begin [0-7][0-7]* .*%begin 600 $TEMP%" | uudecode\ncat $TEMP\nrm $TEMP\n)'
  206. decodetab = {
  207.     'uuencode': uudecode_pipe,
  208.     'x-uuencode': uudecode_pipe,
  209.     'uue': uudecode_pipe,
  210.     'x-uue': uudecode_pipe,
  211.     'quoted-printable': 'mmencode -u -q',
  212.     'base64': 'mmencode -u -b' }
  213. encodetab = {
  214.     'x-uuencode': 'uuencode tempfile',
  215.     'uuencode': 'uuencode tempfile',
  216.     'x-uue': 'uuencode tempfile',
  217.     'uue': 'uuencode tempfile',
  218.     'quoted-printable': 'mmencode -q',
  219.     'base64': 'mmencode -b' }
  220.  
  221. def pipeto(input, command):
  222.     pipe = os.popen(command, 'w')
  223.     copyliteral(input, pipe)
  224.     pipe.close()
  225.  
  226.  
  227. def pipethrough(input, command, output):
  228.     (fd, tempname) = tempfile.mkstemp()
  229.     temp = os.fdopen(fd, 'w')
  230.     copyliteral(input, temp)
  231.     temp.close()
  232.     pipe = os.popen(command + ' <' + tempname, 'r')
  233.     copybinary(pipe, output)
  234.     pipe.close()
  235.     os.unlink(tempname)
  236.  
  237.  
  238. def copyliteral(input, output):
  239.     while None:
  240.         line = input.readline()
  241.         if not line:
  242.             break
  243.         
  244.         continue
  245.         return None
  246.  
  247.  
  248. def copybinary(input, output):
  249.     BUFSIZE = 8192
  250.     while None:
  251.         line = input.read(BUFSIZE)
  252.         if not line:
  253.             break
  254.         
  255.         continue
  256.         return None
  257.  
  258.