o
    á=Abz  ã                   @   s”   d dl Z d dlZd dlZd dlmZ d dlZddlmZmZ ddlm	Z	 ddl
mZ ddlmZ e ¡ Zi Zedd	„ ƒZd
d„ ZG dd„ deƒZdS )é    N)Úcontextmanageré   )Ú
RepositoryÚRepositoryError)ÚPyGIWarning)Úget_introspection_module)Úload_overridesc                 c   s`   � t  | ¡}dV  |rdS | dv rdS t | ¡durdS t  | ¡}tjd| |dœ t|d� dS )aO  A context manager which tries to give helpful warnings
    about missing gi.require_version() which could potentially
    break code if only an older version than expected is installed
    or a new version gets introduced.

    ::

        with _check_require_version("Gtk", stacklevel):
            load_namespace_and_overrides()
    N)ÚGLibÚGObjectÚGioz±%(namespace)s was imported without specifying a version first. Use gi.require_version('%(namespace)s', '%(version)s') before import to ensure that the right version gets loaded.)Ú	namespaceÚversion©Ú
stacklevel)Ú
repositoryÚis_registeredÚgiÚget_required_versionÚget_versionÚwarningsÚwarnr   )r   r   Ú
was_loadedr   © r   ú-/usr/lib/python3/dist-packages/gi/importer.pyÚ_check_require_version*   s    €

ý
ûr   c                 C   sV   t jdd… }|dkr| rdS dS |dkr| rdS dS |dkr%| r#dS dS | r)dS dS )	a2  Returns the stacklevel value for warnings.warn() for when the warning
    gets emitted by an imported module, but the warning should point at the
    code doing the import.

    Pass import_hook=True if the warning gets generated by an import hook
    (warn() gets called in load_module(), see PEP302)
    Né   )é   r   é   )r   r   é   é
   )r   r   )ÚsysÚversion_info)Úimport_hookÚ
py_versionr   r   r   Úget_import_stacklevelQ   s   	r$   c                   @   s8   e Zd Zdd„ Zdd„ Zddd„Zddd	„Zd
d„ ZdS )ÚDynamicImporterc                 C   s
   || _ d S ©N)Úpath)Úselfr'   r   r   r   Ú__init__k   s   
zDynamicImporter.__init__c                 C   s*   |  | j¡sdS | dd¡\}}|| jkS )NFÚ.r   )Ú
startswithr'   Úrsplit)r(   Úfullnamer'   r   r   r   r   Ú_find_module_checkn   s   
z"DynamicImporter._find_module_checkNc                 C   s   |   |¡rtj || ¡S d S r&   )r.   Ú	importlibÚutilÚspec_from_loader)r(   r-   r'   Útargetr   r   r   Ú	find_specu   s   
ÿzDynamicImporter.find_specc                 C   s   |   |¡r| S d S r&   )r.   )r(   r-   r'   r   r   r   Úfind_moduley   s   
ÿzDynamicImporter.find_modulec           	      C   sö   |t jv r
t j| S | dd¡\}}t |¡s"t |¡s"td| ƒ‚tdd�}t||d��7 zt	|ƒ}W n t
yD } zt|ƒ‚d }~ww t |¡D ]}t d| d¡d	  ¡ qJt|ƒ}W d   ƒ n1 sgw   Y  d
| |_| |_|t j|< |S )Nr*   r   z6cannot import name %s, introspection typelib not foundT)r"   r   zgi.repository.ú-r   z<%s>)r    Úmodulesr,   r   r   Úenumerate_versionsÚImportErrorr$   r   r   r   Úget_immediate_dependenciesr/   Úimport_moduleÚsplitr   Ú__file__Ú
__loader__)	r(   r-   r'   r   r   Úintrospection_moduleÚeÚdepÚdynamic_moduler   r   r   Úload_module}   s2   


ÿÿ
€ÿ
ö

zDynamicImporter.load_module)NNr&   )Ú__name__Ú
__module__Ú__qualname__r)   r.   r3   r4   rB   r   r   r   r   r%   g   s    

r%   )r    r   r/   Ú
contextlibr   r   Ú_gir   r   r   Úmoduler   Ú	overridesr   Úget_defaultr   r6   r   r$   Úobjectr%   r   r   r   r   Ú<module>   s   
&