home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / lib / python2.4 / site-packages / BitTorrent / bencode.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2006-08-31  |  6.2 KB  |  340 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4.  
  5. def decode_int(x, f):
  6.     f += 1
  7.     newf = x.index('e', f)
  8.     
  9.     try:
  10.         n = int(x[f:newf])
  11.     except (OverflowError, ValueError):
  12.         n = long(x[f:newf])
  13.  
  14.     if x[f] == '-':
  15.         if x[f + 1] == '0':
  16.             raise ValueError
  17.         
  18.     elif x[f] == '0' and newf != f + 1:
  19.         raise ValueError
  20.     
  21.     return (n, newf + 1)
  22.  
  23.  
  24. def decode_string(x, f):
  25.     colon = x.index(':', f)
  26.     
  27.     try:
  28.         n = int(x[f:colon])
  29.     except (OverflowError, ValueError):
  30.         n = long(x[f:colon])
  31.  
  32.     if x[f] == '0' and colon != f + 1:
  33.         raise ValueError
  34.     
  35.     colon += 1
  36.     return (x[colon:colon + n], colon + n)
  37.  
  38.  
  39. def decode_list(x, f):
  40.     r = []
  41.     f = f + 1
  42.     while x[f] != 'e':
  43.         (v, f) = decode_func[x[f]](x, f)
  44.         r.append(v)
  45.     return (r, f + 1)
  46.  
  47.  
  48. def decode_dict(x, f):
  49.     r = { }
  50.     f = f + 1
  51.     lastkey = None
  52.     while x[f] != 'e':
  53.         (k, f) = decode_string(x, f)
  54.         if lastkey >= k:
  55.             raise ValueError
  56.         
  57.         lastkey = k
  58.         (r[k], f) = decode_func[x[f]](x, f)
  59.     return (r, f + 1)
  60.  
  61. decode_func = { }
  62. decode_func['l'] = decode_list
  63. decode_func['d'] = decode_dict
  64. decode_func['i'] = decode_int
  65. decode_func['0'] = decode_string
  66. decode_func['1'] = decode_string
  67. decode_func['2'] = decode_string
  68. decode_func['3'] = decode_string
  69. decode_func['4'] = decode_string
  70. decode_func['5'] = decode_string
  71. decode_func['6'] = decode_string
  72. decode_func['7'] = decode_string
  73. decode_func['8'] = decode_string
  74. decode_func['9'] = decode_string
  75.  
  76. def bdecode(x):
  77.     
  78.     try:
  79.         (r, l) = decode_func[x[0]](x, 0)
  80.     except (IndexError, KeyError):
  81.         raise ValueError
  82.  
  83.     if l != len(x):
  84.         raise ValueError
  85.     
  86.     return r
  87.  
  88.  
  89. def test_bdecode():
  90.     
  91.     try:
  92.         bdecode('0:0:')
  93.     except ValueError:
  94.         pass
  95.  
  96.     
  97.     try:
  98.         bdecode('ie')
  99.     except ValueError:
  100.         pass
  101.  
  102.     
  103.     try:
  104.         bdecode('i341foo382e')
  105.     except ValueError:
  106.         pass
  107.  
  108.     
  109.     try:
  110.         bdecode('i-0e')
  111.     except ValueError:
  112.         pass
  113.  
  114.     
  115.     try:
  116.         bdecode('i123')
  117.     except ValueError:
  118.         pass
  119.  
  120.     
  121.     try:
  122.         bdecode('')
  123.     except ValueError:
  124.         pass
  125.  
  126.     
  127.     try:
  128.         bdecode('i6easd')
  129.     except ValueError:
  130.         pass
  131.  
  132.     
  133.     try:
  134.         bdecode('35208734823ljdahflajhdf')
  135.     except ValueError:
  136.         pass
  137.  
  138.     
  139.     try:
  140.         bdecode('2:abfdjslhfld')
  141.     except ValueError:
  142.         pass
  143.  
  144.     
  145.     try:
  146.         bdecode('02:xy')
  147.     except ValueError:
  148.         pass
  149.  
  150.     
  151.     try:
  152.         bdecode('l')
  153.     except ValueError:
  154.         pass
  155.  
  156.     
  157.     try:
  158.         bdecode('leanfdldjfh')
  159.     except ValueError:
  160.         pass
  161.  
  162.     
  163.     try:
  164.         bdecode('relwjhrlewjh')
  165.     except ValueError:
  166.         pass
  167.  
  168.     
  169.     try:
  170.         bdecode('d')
  171.     except ValueError:
  172.         pass
  173.  
  174.     
  175.     try:
  176.         bdecode('defoobar')
  177.     except ValueError:
  178.         pass
  179.  
  180.     
  181.     try:
  182.         bdecode('d3:fooe')
  183.     except ValueError:
  184.         pass
  185.  
  186.     
  187.     try:
  188.         bdecode('di1e0:e')
  189.     except ValueError:
  190.         pass
  191.  
  192.     
  193.     try:
  194.         bdecode('d1:b0:1:a0:e')
  195.     except ValueError:
  196.         pass
  197.  
  198.     
  199.     try:
  200.         bdecode('d1:a0:1:a0:e')
  201.     except ValueError:
  202.         pass
  203.  
  204.     
  205.     try:
  206.         bdecode('i03e')
  207.     except ValueError:
  208.         pass
  209.  
  210.     
  211.     try:
  212.         bdecode('l01:ae')
  213.     except ValueError:
  214.         pass
  215.  
  216.     
  217.     try:
  218.         bdecode('9999:x')
  219.     except ValueError:
  220.         pass
  221.  
  222.     
  223.     try:
  224.         bdecode('l0:')
  225.     except ValueError:
  226.         pass
  227.  
  228.     
  229.     try:
  230.         bdecode('d0:0:')
  231.     except ValueError:
  232.         pass
  233.  
  234.     
  235.     try:
  236.         bdecode('d0:')
  237.     except ValueError:
  238.         pass
  239.  
  240.     
  241.     try:
  242.         bdecode('00:')
  243.     except ValueError:
  244.         pass
  245.  
  246.     
  247.     try:
  248.         bdecode('l-3:e')
  249.     except ValueError:
  250.         pass
  251.  
  252.     
  253.     try:
  254.         bdecode('i-03e')
  255.     except ValueError:
  256.         pass
  257.  
  258.     bdecode('d0:i3ee')
  259.  
  260. from types import StringType, IntType, LongType, DictType, ListType, TupleType
  261.  
  262. class Bencached(object):
  263.     __slots__ = [
  264.         'bencoded']
  265.     
  266.     def __init__(self, s):
  267.         self.bencoded = s
  268.  
  269.  
  270.  
  271. def encode_bencached(x, r):
  272.     r.append(x.bencoded)
  273.  
  274.  
  275. def encode_int(x, r):
  276.     r.extend(('i', str(x), 'e'))
  277.  
  278.  
  279. def encode_string(x, r):
  280.     r.extend((str(len(x)), ':', x))
  281.  
  282.  
  283. def encode_list(x, r):
  284.     r.append('l')
  285.     for i in x:
  286.         encode_func[type(i)](i, r)
  287.     
  288.     r.append('e')
  289.  
  290.  
  291. def encode_dict(x, r):
  292.     r.append('d')
  293.     ilist = x.items()
  294.     ilist.sort()
  295.     for k, v in ilist:
  296.         r.extend((str(len(k)), ':', k))
  297.         encode_func[type(v)](v, r)
  298.     
  299.     r.append('e')
  300.  
  301. encode_func = { }
  302. encode_func[type(Bencached(0))] = encode_bencached
  303. encode_func[IntType] = encode_int
  304. encode_func[LongType] = encode_int
  305. encode_func[StringType] = encode_string
  306. encode_func[ListType] = encode_list
  307. encode_func[TupleType] = encode_list
  308. encode_func[DictType] = encode_dict
  309.  
  310. try:
  311.     from types import BooleanType
  312.     encode_func[BooleanType] = encode_int
  313. except ImportError:
  314.     pass
  315.  
  316.  
  317. def bencode(x):
  318.     r = []
  319.     encode_func[type(x)](x, r)
  320.     return ''.join(r)
  321.  
  322.  
  323. def test_bencode():
  324.     
  325.     try:
  326.         bencode({
  327.             1: 'foo' })
  328.     except TypeError:
  329.         return None
  330.  
  331.  
  332.  
  333. try:
  334.     import psyco
  335.     psyco.bind(bdecode)
  336.     psyco.bind(bencode)
  337. except ImportError:
  338.     pass
  339.  
  340.