py2stdlib.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. """ASTNG hooks for the Python 2 standard library.
  2. Currently help understanding of :
  3. * hashlib.md5 and hashlib.sha1
  4. """
  5. from logilab.astng import MANAGER
  6. from logilab.astng.builder import ASTNGBuilder
  7. MODULE_TRANSFORMS = {}
  8. def hashlib_transform(module):
  9. fake = ASTNGBuilder(MANAGER).string_build('''
  10. class md5(object):
  11. def __init__(self, value): pass
  12. def hexdigest(self):
  13. return u''
  14. class sha1(object):
  15. def __init__(self, value): pass
  16. def hexdigest(self):
  17. return u''
  18. ''')
  19. for hashfunc in ('sha1', 'md5'):
  20. module.locals[hashfunc] = fake.locals[hashfunc]
  21. def collections_transform(module):
  22. fake = ASTNGBuilder(MANAGER).string_build('''
  23. class defaultdict(dict):
  24. default_factory = None
  25. def __missing__(self, key): pass
  26. class deque(object):
  27. maxlen = 0
  28. def __init__(iterable=None, maxlen=None): pass
  29. def append(self, x): pass
  30. def appendleft(self, x): pass
  31. def clear(self): pass
  32. def count(self, x): return 0
  33. def extend(self, iterable): pass
  34. def extendleft(self, iterable): pass
  35. def pop(self): pass
  36. def popleft(self): pass
  37. def remove(self, value): pass
  38. def reverse(self): pass
  39. def rotate(self, n): pass
  40. ''')
  41. for klass in ('deque', 'defaultdict'):
  42. module.locals[klass] = fake.locals[klass]
  43. def pkg_resources_transform(module):
  44. fake = ASTNGBuilder(MANAGER).string_build('''
  45. def resource_exists(package_or_requirement, resource_name):
  46. pass
  47. def resource_isdir(package_or_requirement, resource_name):
  48. pass
  49. def resource_filename(package_or_requirement, resource_name):
  50. pass
  51. def resource_stream(package_or_requirement, resource_name):
  52. pass
  53. def resource_string(package_or_requirement, resource_name):
  54. pass
  55. def resource_listdir(package_or_requirement, resource_name):
  56. pass
  57. def extraction_error():
  58. pass
  59. def get_cache_path(archive_name, names=()):
  60. pass
  61. def postprocess(tempname, filename):
  62. pass
  63. def set_extraction_path(path):
  64. pass
  65. def cleanup_resources(force=False):
  66. pass
  67. ''')
  68. for func_name, func in fake.locals.items():
  69. module.locals[func_name] = func
  70. # for func in ('resource_exists', 'resource_isdir', 'resource_filename',
  71. # 'resource_stream', 'resource_string', 'resource_listdir',
  72. # 'extraction_error', 'get_cache_path', 'postprocess',
  73. # 'set_extraction_path', 'cleanup_resources'):
  74. # module.locals[func] = fake.locals[func]
  75. MODULE_TRANSFORMS['hashlib'] = hashlib_transform
  76. MODULE_TRANSFORMS['collections'] = collections_transform
  77. MODULE_TRANSFORMS['pkg_resources'] = pkg_resources_transform
  78. def transform(module):
  79. try:
  80. tr = MODULE_TRANSFORMS[module.name]
  81. except KeyError:
  82. pass
  83. else:
  84. tr(module)
  85. from logilab.astng import MANAGER
  86. MANAGER.register_transformer(transform)