
V                 @   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	 j   Z i  Z e d	 d
    Z d d   Z Gd d   d e  Z d S)    )absolute_importN)contextmanager   )
RepositoryRepositoryError)PyGIWarning)get_introspection_module)load_overridesc             c   s   t  j |   } d V| r d S|  d	 k r. d St j |   d k	 rG d St  j |   } t j d d |  d | i 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)r
   r   r   )
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   ss   t  j d d  } | d k r- |  r) d Sd S| d k rG |  rC d Sd S| d	 k ra |  r] d Sd S|  rk d Sd Sd 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   r   )sysversion_info)import_hook
py_versionr   r   r   get_import_stacklevelR   s    	r!   c               @   s7   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   sw   | j  |  j  s d  S| j d d  \ } } | |  j k rA d  St j |  s_ t j |  rc |  St d |   d  S)N.r   z6cannot import name %s, introspection typelib not found)
startswithr#   rsplitr   r   Zenumerate_versionsImportError)r$   fullnamer#   r   r   r   r   find_moduleo   s    zDynamicImporter.find_modulec       	      C   s
  | t  j k r t  j | S| j d d  \ } } t d d  } t | d |  y t |  } Wn1 t k
 r } z t |   WYd  d  } ~ Xn Xx5 t j	 |  D]$ } t
 j d | j d  d  q Wt |  } Wd  QRXd	 | | _ |  | _ | t  j | <| S)
Nr&   r   r   Tr   zgi.repository.-r   z<%s>)r   modulesr(   r!   r   r   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_module   s     "	zDynamicImporter.load_module)__name__
__module____qualname__r%   r+   r4   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   '