Find modules that import a given **module**.
(self, module: str)
| 778 | self.add_edge(self._top_script_node, node) |
| 779 | |
| 780 | def get_code_using(self, module: str) -> dict: |
| 781 | """ |
| 782 | Find modules that import a given **module**. |
| 783 | """ |
| 784 | co_dict = {} |
| 785 | pure_python_module_types = PURE_PYTHON_MODULE_TYPES | { |
| 786 | 'Script', |
| 787 | } |
| 788 | node = self.find_node(module) |
| 789 | if node: |
| 790 | referrers = self.incoming(node) |
| 791 | for r in referrers: |
| 792 | # Under python 3.7 and earlier, if `module` is added to hidden imports, one of referrers ends up being |
| 793 | # None, causing #3825. Work around it. |
| 794 | if r is None: |
| 795 | continue |
| 796 | # Ensure that modulegraph objects have 'code' attribute. |
| 797 | if type(r).__name__ not in pure_python_module_types: |
| 798 | continue |
| 799 | identifier = r.identifier |
| 800 | if identifier == module or identifier.startswith(module + '.'): |
| 801 | # Skip self references or references from `modules`'s own submodules. |
| 802 | continue |
| 803 | # The code object may be None if referrer ends up shadowed by eponymous directory that ends up treated |
| 804 | # as a namespace package. See #6873 for an example. |
| 805 | if r.code is None: |
| 806 | continue |
| 807 | co_dict[r.identifier] = r.code |
| 808 | return co_dict |
| 809 | |
| 810 | def metadata_required(self) -> set: |
| 811 | """ |