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

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from _ast import *
  5. from _ast import __version__
  6.  
  7. def parse(expr, filename = '<unknown>', mode = 'exec'):
  8.     return compile(expr, filename, mode, PyCF_ONLY_AST)
  9.  
  10.  
  11. def literal_eval(node_or_string):
  12.     _safe_names = {
  13.         'None': None,
  14.         'True': True,
  15.         'False': False }
  16.     if isinstance(node_or_string, basestring):
  17.         node_or_string = parse(node_or_string, mode = 'eval')
  18.     
  19.     if isinstance(node_or_string, Expression):
  20.         node_or_string = node_or_string.body
  21.     
  22.     
  23.     def _convert(node):
  24.         if isinstance(node, Str):
  25.             return node.s
  26.         if isinstance(node, Num):
  27.             return node.n
  28.         if isinstance(node, Tuple):
  29.             return tuple(map(_convert, node.elts))
  30.         if isinstance(node, List):
  31.             return list(map(_convert, node.elts))
  32.         if isinstance(node, Dict):
  33.             return (dict,)((lambda .0: for k, v in .0:
  34. (_convert(k), _convert(v)))(zip(node.keys, node.values)))
  35.         raise ValueError('malformed string')
  36.  
  37.     return _convert(node_or_string)
  38.  
  39.  
  40. def dump(node, annotate_fields = True, include_attributes = False):
  41.     
  42.     def _format(node):
  43.         if isinstance(node, AST):
  44.             fields = [ (a, _format(b)) for a, b in iter_fields(node) ]
  45.             rv = [] % ('%s(%s', node.__class__.__name__(', '.join if annotate_fields else (lambda .0: for a, b in .0:
  46. b)(fields)))
  47.             return rv + ')'
  48.         if isinstance(node, list):
  49.             return '[%s]' % (', '.join,)((lambda .0: for x in .0:
  50. _format(x))(node))
  51.         return repr(node)
  52.  
  53.     if not isinstance(node, AST):
  54.         raise TypeError('expected AST, got %r' % node.__class__.__name__)
  55.     isinstance(node, AST)
  56.     return _format(node)
  57.  
  58.  
  59. def copy_location(new_node, old_node):
  60.     for attr in ('lineno', 'col_offset'):
  61.         if attr in old_node._attributes and attr in new_node._attributes and hasattr(old_node, attr):
  62.             setattr(new_node, attr, getattr(old_node, attr))
  63.             continue
  64.     
  65.     return new_node
  66.  
  67.  
  68. def fix_missing_locations(node):
  69.     
  70.     def _fix(node, lineno, col_offset):
  71.         if 'lineno' in node._attributes:
  72.             if not hasattr(node, 'lineno'):
  73.                 node.lineno = lineno
  74.             else:
  75.                 lineno = node.lineno
  76.         
  77.         if 'col_offset' in node._attributes:
  78.             if not hasattr(node, 'col_offset'):
  79.                 node.col_offset = col_offset
  80.             else:
  81.                 col_offset = node.col_offset
  82.         
  83.         for child in iter_child_nodes(node):
  84.             _fix(child, lineno, col_offset)
  85.         
  86.  
  87.     _fix(node, 1, 0)
  88.     return node
  89.  
  90.  
  91. def increment_lineno(node, n = 1):
  92.     if 'lineno' in node._attributes:
  93.         node.lineno = getattr(node, 'lineno', 0) + n
  94.     
  95.     for child in walk(node):
  96.         if 'lineno' in child._attributes:
  97.             child.lineno = getattr(child, 'lineno', 0) + n
  98.             continue
  99.     
  100.     return node
  101.  
  102.  
  103. def iter_fields(node):
  104.     for field in node._fields:
  105.         
  106.         try:
  107.             yield (field, getattr(node, field))
  108.         continue
  109.         except AttributeError:
  110.             continue
  111.         
  112.  
  113.     
  114.  
  115.  
  116. def iter_child_nodes(node):
  117.     for name, field in iter_fields(node):
  118.         if isinstance(field, AST):
  119.             yield field
  120.             continue
  121.         if isinstance(field, list):
  122.             for item in field:
  123.                 if isinstance(item, AST):
  124.                     yield item
  125.                     continue
  126.             
  127.     
  128.  
  129.  
  130. def get_docstring(node, clean = True):
  131.     if not isinstance(node, (FunctionDef, ClassDef, Module)):
  132.         raise TypeError("%r can't have docstrings" % node.__class__.__name__)
  133.     isinstance(node, (FunctionDef, ClassDef, Module))
  134.     if node.body and isinstance(node.body[0], Expr) and isinstance(node.body[0].value, Str):
  135.         if clean:
  136.             import inspect
  137.             return inspect.cleandoc(node.body[0].value.s)
  138.         return node.body[0].value.s
  139.  
  140.  
  141. def walk(node):
  142.     deque = deque
  143.     import collections
  144.     todo = deque([
  145.         node])
  146.     while todo:
  147.         node = todo.popleft()
  148.         todo.extend(iter_child_nodes(node))
  149.         yield node
  150.  
  151.  
  152. class NodeVisitor(object):
  153.     
  154.     def visit(self, node):
  155.         method = 'visit_' + node.__class__.__name__
  156.         visitor = getattr(self, method, self.generic_visit)
  157.         return visitor(node)
  158.  
  159.     
  160.     def generic_visit(self, node):
  161.         for field, value in iter_fields(node):
  162.             if isinstance(value, list):
  163.                 for item in value:
  164.                     if isinstance(item, AST):
  165.                         self.visit(item)
  166.                         continue
  167.                 
  168.             if isinstance(value, AST):
  169.                 self.visit(value)
  170.                 continue
  171.         
  172.  
  173.  
  174.  
  175. class NodeTransformer(NodeVisitor):
  176.     
  177.     def generic_visit(self, node):
  178.         for field, old_value in iter_fields(node):
  179.             old_value = getattr(node, field, None)
  180.             if isinstance(old_value, list):
  181.                 new_values = []
  182.                 for value in old_value:
  183.                     if isinstance(value, AST):
  184.                         value = self.visit(value)
  185.                         if value is None:
  186.                             continue
  187.                         elif not isinstance(value, AST):
  188.                             new_values.extend(value)
  189.                             continue
  190.                         
  191.                     
  192.                     new_values.append(value)
  193.                 
  194.                 old_value[:] = new_values
  195.                 continue
  196.             if isinstance(old_value, AST):
  197.                 new_node = self.visit(old_value)
  198.                 if new_node is None:
  199.                     delattr(node, field)
  200.                 else:
  201.                     setattr(node, field, new_node)
  202.             new_node is None
  203.         
  204.         return node
  205.  
  206.  
  207.