File: //lib/python3.12/__pycache__/pkgutil.cpython-312.pyc
�
    )!�hiG  �                   �  � d Z ddlmZ ddlmZ ddlZddlZddlZddl	Z	ddl
Z	ddlZddlm
Z
 ddlZg d�Z edd�      Zd	e_         d
� Zdd�Zdd�Zedd
��       Zdd�Zej-                  ej.                  j0                  e�       	 ddlZddlmZ dd�Zej-                  ee�       d� Zdd�Zd� Zd� Z d� Z!d� Z"da#d� Z$y# e$ r Y � w xY w)zUtilities to support packages.�    )�
namedtuple)�singledispatchN)�
ModuleType)
�get_importer�iter_importers�
get_loader�find_loader�
walk_packages�iter_modules�get_data�	read_code�extend_path�
ModuleInfor   zmodule_finder name ispkgz.A namedtuple with minimal info about a module.c                 �   � dd l }| j                  d�      }|t        j                  j                  k7  ry | j                  d�       |j                  | �      S )Nr   �   �   )�marshal�read�	importlib�util�MAGIC_NUMBER�load)�streamr   �magics      �/usr/lib/python3.12/pkgutil.pyr
   r
      sC   � � ��K�K��N�E��	���+�+�+��
�K�K��O��<�<����    c              #   ��  K  � i fd�}t        | |�      D ]�  }|�� |j                  s�	 t        |j                  �       t	        t
        j                  |j                     dd�      xs g } | D �cg c]
  } ||�      r�|�� } }t        | |j                  dz   |�      E d{  ���  �� yc c}w 7 �# t        $ r |� ||j                  �       Y ��t        $ r |� ||j                  �       n� Y ��w xY w�w)a�  Yields ModuleInfo for all modules recursively
    on path, or, if path is None, all accessible modules.
    'path' should be either None or a list of paths to look for
    modules in.
    'prefix' is a string to output on the front of every module name
    on output.
    Note that this function must import all *packages* (NOT all
    modules!) on the given path, in order to access the __path__
    attribute to find submodules.
    'onerror' is a function which gets called with one argument (the
    name of the package which was being imported) if any exception
    occurs while trying to import a package.  If no onerror function is
    supplied, ImportErrors are caught and ignored, while all other
    exceptions are propagated, terminating the search.
    Examples:
    # list all modules python can access
    walk_packages()
    # list all submodules of ctypes
    walk_packages(ctypes.__path__, ctypes.__name__+'.')
    c                 �   � | |v ryd|| <