Advertisement
Ciccius

AWS Python Libs

Jun 21st, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.70 KB | None | 0 0
  1. # $Id$
  2. #
  3. # Locate all standard modules present in the AWS Lambda environment
  4. #
  5. # To launch call the "main" function in Lambda
  6. #
  7. # Based on listmodules.py written by Fredrik Lundh, January 2005
  8. # http://svn.python.org/projects/python/tags/r252/Doc/tools/listmodules.py
  9. #
  10.  
  11. from __future__ import print_function
  12. import imp, sys, os, re, time
  13. import StringIO
  14. from botocore.vendored import requests
  15.  
  16. API_DEV_KEY = 'YOUR_PASTEBIN_DEV_KEY'
  17.  
  18. identifier = "python-%s-%s" % (sys.version[:3], sys.platform)
  19. timestamp = time.strftime("%Y%m%dT%H%M%SZ", time.gmtime(time.time()))
  20.  
  21. # known test packages
  22. TEST_PACKAGES = "test.", "bsddb.test.", "distutils.tests."
  23.  
  24. try:
  25. import platform
  26. platform = platform.platform()
  27. except:
  28. platform = None # unknown
  29.  
  30. suffixes = imp.get_suffixes()
  31.  
  32. def get_suffix(file):
  33. for suffix in suffixes:
  34. if file[-len(suffix[0]):] == suffix[0]:
  35. return suffix
  36. return None
  37.  
  38. def main(event, context):
  39.  
  40. path = getpath()
  41.  
  42. modules = {}
  43. for m in sys.builtin_module_names:
  44. modules[m] = None
  45.  
  46. for p in path:
  47. modules.update(getmodules(p))
  48.  
  49. keys = modules.keys()
  50. keys.sort()
  51.  
  52. # filter out known test packages
  53. def cb(m):
  54. for d in TEST_PACKAGES:
  55. if m[:len(d)] == d:
  56. return 0
  57. return 1
  58. keys = filter(cb, keys)
  59.  
  60. out = StringIO.StringIO()
  61.  
  62. out.write("# module list (generated by listmodules.py)\n")
  63. out.write("#\n")
  64. out.write("# timestamp=%s\n" % repr(timestamp))
  65. out.write("# sys.version=%s\n" % repr(sys.version))
  66. out.write("# sys.platform=%s\n" % repr(sys.platform))
  67. if platform:
  68. out.write("# platform=%s\n" % repr(platform))
  69. out.write("#\n")
  70.  
  71. for k in keys:
  72. out.write(k + "\n")
  73.  
  74.  
  75. data = {'api_option': 'paste',
  76. 'api_user_key': '',
  77. 'api_paste_private': '0',
  78. 'api_paste_name': 'AWS Lambda python modules',
  79. 'api_paste_expire_date': '1D',
  80. 'api_paste_format': 'text',
  81. 'api_dev_key': API_DEV_KEY,
  82. 'api_paste_code': out.getvalue()}
  83. r = requests.post("http://pastebin.com/api/api_post.php", data = data)
  84.  
  85. print(r.text)
  86.  
  87. def getmodules(p):
  88. # get modules in a given directory
  89. modules = {}
  90. for f in os.listdir(p):
  91. f = os.path.join(p, f)
  92. if os.path.isfile(f):
  93. m, e = os.path.splitext(f)
  94. suffix = get_suffix(f)
  95. if not suffix:
  96. continue
  97. m = os.path.basename(m)
  98. if re.compile("(?i)[a-z_]\w*$").match(m):
  99. if suffix[2] == imp.C_EXTENSION:
  100. # check that this extension can be imported
  101. try:
  102. __import__(m)
  103. except ImportError:
  104. continue
  105. modules[m] = f
  106. elif os.path.isdir(f):
  107. m = os.path.basename(f)
  108. if os.path.isfile(os.path.join(f, "__init__.py")):
  109. for mm, f in getmodules(f).items():
  110. modules[m + "." + mm] = f
  111. return modules
  112.  
  113. def getpath():
  114. path = map(os.path.normcase, map(os.path.abspath, sys.path[:]))
  115. # get rid of site packages
  116. for p in path:
  117. if p[-13:] == "site-packages":
  118. def cb(p, site_package_path=os.path.abspath(p)):
  119. return p[:len(site_package_path)] != site_package_path
  120. path = filter(cb, path)
  121. break
  122. # get rid of non-existent directories and the current directory
  123. def cb(p, cwd=os.path.normcase(os.getcwd())):
  124. return os.path.isdir(p) and p != cwd
  125. path = filter(cb, path)
  126. return path
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement