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

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from compiler import ast, walk
  5.  
  6. def is_future(stmt):
  7.     if not isinstance(stmt, ast.From):
  8.         return 0
  9.     if stmt.modname == '__future__':
  10.         return 1
  11.     return 0
  12.  
  13.  
  14. class FutureParser:
  15.     features = ('nested_scopes', 'generators', 'division', 'absolute_import', 'with_statement', 'print_function', 'unicode_literals')
  16.     
  17.     def __init__(self):
  18.         self.found = { }
  19.  
  20.     
  21.     def visitModule(self, node):
  22.         stmt = node.node
  23.         for s in stmt.nodes:
  24.             if not self.check_stmt(s):
  25.                 break
  26.                 continue
  27.         
  28.  
  29.     
  30.     def check_stmt(self, stmt):
  31.         if is_future(stmt):
  32.             for name, asname in stmt.names:
  33.                 if name in self.features:
  34.                     self.found[name] = 1
  35.                     continue
  36.                 raise SyntaxError, 'future feature %s is not defined' % name
  37.             
  38.             stmt.valid_future = 1
  39.             return 1
  40.         return 0
  41.  
  42.     
  43.     def get_features(self):
  44.         return self.found.keys()
  45.  
  46.  
  47.  
  48. class BadFutureParser:
  49.     
  50.     def visitFrom(self, node):
  51.         if hasattr(node, 'valid_future'):
  52.             return None
  53.         if node.modname != '__future__':
  54.             return None
  55.         raise SyntaxError, 'invalid future statement ' + repr(node)
  56.  
  57.  
  58.  
  59. def find_futures(node):
  60.     p1 = FutureParser()
  61.     p2 = BadFutureParser()
  62.     walk(node, p1)
  63.     walk(node, p2)
  64.     return p1.get_features()
  65.  
  66. if __name__ == '__main__':
  67.     import sys
  68.     from compiler import parseFile, walk
  69.     for file in sys.argv[1:]:
  70.         print file
  71.         tree = parseFile(file)
  72.         v = FutureParser()
  73.         walk(tree, v)
  74.         print v.found
  75.         print 
  76.     
  77.  
  78.