brain_boto3.py 1012 B

12345678910111213141516171819202122232425262728293031
  1. # Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html
  2. # For details: https://github.com/PyCQA/astroid/blob/main/LICENSE
  3. # Copyright (c) https://github.com/PyCQA/astroid/blob/main/CONTRIBUTORS.txt
  4. """Astroid hooks for understanding ``boto3.ServiceRequest()``."""
  5. from astroid import extract_node
  6. from astroid.manager import AstroidManager
  7. from astroid.nodes.scoped_nodes import ClassDef
  8. BOTO_SERVICE_FACTORY_QUALIFIED_NAME = "boto3.resources.base.ServiceResource"
  9. def service_request_transform(node):
  10. """Transform ServiceResource to look like dynamic classes."""
  11. code = """
  12. def __getattr__(self, attr):
  13. return 0
  14. """
  15. func_getattr = extract_node(code)
  16. node.locals["__getattr__"] = [func_getattr]
  17. return node
  18. def _looks_like_boto3_service_request(node) -> bool:
  19. return node.qname() == BOTO_SERVICE_FACTORY_QUALIFIED_NAME
  20. AstroidManager().register_transform(
  21. ClassDef, service_request_transform, _looks_like_boto3_service_request
  22. )