1# Copyright 2007 Google, Inc. All Rights Reserved. 2# Licensed to PSF under a Contributor Agreement. 3 4"""Fixer for removing uses of the types module. 5 6These work for only the known names in the types module. The forms above 7can include types. or not. ie, It is assumed the module is imported either as: 8 9 import types 10 from types import ... # either * or specific types 11 12The import statements are not modified. 13 14There should be another fixer that handles at least the following constants: 15 16 type([]) -> list 17 type(()) -> tuple 18 type('') -> str 19 20""" 21 22# Local imports 23from .. import fixer_base 24from ..fixer_util import Name 25 26_TYPE_MAPPING = { 27 'BooleanType' : 'bool', 28 'BufferType' : 'memoryview', 29 'ClassType' : 'type', 30 'ComplexType' : 'complex', 31 'DictType': 'dict', 32 'DictionaryType' : 'dict', 33 'EllipsisType' : 'type(Ellipsis)', 34 #'FileType' : 'io.IOBase', 35 'FloatType': 'float', 36 'IntType': 'int', 37 'ListType': 'list', 38 'LongType': 'int', 39 'ObjectType' : 'object', 40 'NoneType': 'type(None)', 41 'NotImplementedType' : 'type(NotImplemented)', 42 'SliceType' : 'slice', 43 'StringType': 'bytes', # XXX ? 44 'StringTypes' : '(str,)', # XXX ? 45 'TupleType': 'tuple', 46 'TypeType' : 'type', 47 'UnicodeType': 'str', 48 'XRangeType' : 'range', 49 } 50 51_pats = ["power< 'types' trailer< '.' name='%s' > >" % t for t in _TYPE_MAPPING] 52 53class FixTypes(fixer_base.BaseFix): 54 BM_compatible = True 55 PATTERN = '|'.join(_pats) 56 57 def transform(self, node, results): 58 new_value = _TYPE_MAPPING.get(results["name"].value) 59 if new_value: 60 return Name(new_value, prefix=node.prefix) 61 return None 62