B
    [                 @   s   d dl mZ 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 )    )absolute_importN)contextmanager   )
RepositoryRepositoryError)PyGIWarning)get_introspection_module)load_overridesc             c   s^   t | }dV  |rdS | dkr$dS t| dk	r6d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)ZGLibZGObjectZ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giZget_required_versionZget_versionwarningswarnr   )r
   r   Z
was_loadedr    r   -/usr/lib/python3/dist-packages/gi/importer.py_check_require_version+   s    


r   c             C   sZ   t jdd }|dkr"| rdS dS |dkr6| r2dS dS |dkrJ| rFdS dS | rRdS 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_hookZ
py_versionr   r   r   get_import_stacklevelR   s    	r   c               @   s&   e Zd Zdd ZdddZdd ZdS )	DynamicImporterc             C   s
   || _ d S )N)path)selfr   r   r   r   __init__l   s    zDynamicImporter.__init__Nc             C   s2   | | jsd S |dd\}}|| jkr.d S | S )N.r   )
startswithr   rsplit)r    fullnamer   r
   r   r   r   find_moduleo   s    
zDynamicImporter.find_modulec       	      C   s   |t jkrt j| S |dd\}}t|sDt|sDtd| tdd}t||dr yt	|}W n* t
k
r } zt|W d d }~X Y nX x*t|D ]}td|dd	   qW t|}W d Q R X 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   Zenumerate_versionsImportErrorr   r   r   r   Zget_immediate_dependencies	importlibimport_modulesplitr	   __file__
__loader__)	r    r%   r   r
   r   Zintrospection_moduleeZdepZdynamic_moduler   r   r   load_moduley   s(    






zDynamicImporter.load_module)N)__name__
__module____qualname__r!   r&   r0   r   r   r   r   r   h   s   

r   )Z
__future__r   r   r   r*   
contextlibr   r   Z_gir   r   r   moduler   Z	overridesr	   Zget_defaultr   r(   r   r   objectr   r   r   r   r   <module>   s   '