o =Abz@sddlZddlZddlZddlmZddlZddlmZmZddlm Z ddl m Z ddl m Z eZiZedd Zd d ZGd d d eZdS)N)contextmanager) RepositoryRepositoryError) PyGIWarning)get_introspection_module)load_overridesccs`t|}dV|r dS|dvrdSt|durdSt|}tjd||dt|ddS)aOA 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)GLibGObjectGioz%(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.) namespaceversion stacklevel) repository is_registeredgiget_required_version get_versionwarningswarnr)r r was_loadedr r-/usr/lib/python3/dist-packages/gi/importer.py_check_require_version*s    rcCsVtjdd}|dkr|rdSdS|dkr|rdSdS|dkr%|r#dSdS|r)dSdS) a2Returns 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)rr )rr)sys version_info) import_hook py_versionrrrget_import_stacklevelQs     r$c@s8eZdZddZddZd ddZd dd Zd d ZdS)DynamicImportercCs ||_dSN)path)selfr'rrr__init__ks zDynamicImporter.__init__cCs*||jsdS|dd\}}||jkS)NF.r) startswithr'rsplit)r(fullnamer'r rrr_find_module_checkns  z"DynamicImporter._find_module_checkNcCs||r tj||SdSr&)r. importlibutilspec_from_loader)r(r-r'targetrrr find_specus zDynamicImporter.find_speccCs||r|SdSr&)r.)r(r-r'rrr find_moduleys zDynamicImporter.find_modulec Cs|tjvr tj|S|dd\}}t|s"t|s"td|tdd}t||d7zt |}Wnt yD}zt|d}~wwt |D]}t d|dd qJt|}Wdn1sgwYd ||_||_|tj|<|S) Nr*rz6cannot import name %s, introspection typelib not foundT)r"rzgi.repository.-rz<%s>)r modulesr,rrenumerate_versions ImportErrorr$rrrget_immediate_dependenciesr/ import_modulesplitr__file__ __loader__) r(r-r'r rintrospection_moduleedepdynamic_modulerrr load_module}s2        zDynamicImporter.load_module)NNr&)__name__ __module__ __qualname__r)r.r3r4rBrrrrr%gs    r%)r rr/ contextlibrr_girrrmoduler overridesr get_defaultrr6rr$objectr%rrrrs     &