a T`2c@sddlZddlZddlZddlZddlZddlmZddlmZddl m Z m Z ddl m Z mZddlmZeeeZiZGdddejZGd d d eZd d Zd dZeZddZddZeiiedfddZdddZddZdS)N) get_loader)PyGIDeprecationWarning) CallableInfopygobject_new_full) TYPE_NONE TYPE_INVALID) extend_pathcs8eZdZdZfddZddZddZdd ZZS) OverridesProxyModulez7Wraps a introspection module and contains all overridescstt||j||_dSN)Zsuperr__init____name___introspection_module)selfintrospection_module __class__9/usr/lib/python3.9/site-packages/gi/overrides/__init__.pyr s zOverridesProxyModule.__init__cCs t|j|Sr )getattrr )r Znamerrr __getattr__sz OverridesProxyModule.__getattr__cCs6tt|j}||j|t|jt|Sr )ZsetZdirrupdateZ__dict__Zkeysr sorted)r Zresultrrr__dir__"szOverridesProxyModule.__dir__cCsdt|j|jfS)Nz<%s %r>)typer r )r rrr__repr__(szOverridesProxyModule.__repr__) r __module__ __qualname____doc__r rrrZ __classcell__rrrrrs  rc@s0eZdZdZddZddZddZdd Zd S) _DeprecatedAttributezA deprecation descriptor for OverridesProxyModule subclasses. Emits a PyGIDeprecationWarning on every access and tries to act as a normal instance attribute (can be replaced and deleted). cCs$||_||_td|||f|_dS)Nz#%s.%s is deprecated; use %s instead)_attr_valuer_warning)r namespaceattrvalue replacementrrrr 3sz_DeprecatedAttribute.__init__cCs(|durt|jtj|jdd|jS)N stacklevel)AttributeErrorrwarningswarnr r)r instanceZownerrrr__get__:s z_DeprecatedAttribute.__get__cCs$|j}tt||t|||dSr )rdelattrrsetattr)r r+r#r"rrr__set__@sz_DeprecatedAttribute.__set__cCstt||jdSr )r-rr)r r+rrr __delete__Fsz_DeprecatedAttribute.__delete__N)r rrrr r,r/r0rrrrr,s rc Cs|jddd}d|}|tjv}tj|}t|dtfi}||}|tj|<ddlm}t|dsnJ|||<zd |}z t |} Wnt yd } Yn0| d ur|W||=tj|=|r|tj|<St |} W||=tj|=|r|tj|<n ||=tj|=|r|tj|<0||_ g} t| d r4| j} | D]@} zt| | } Wnt tfyhYq8Yn0t|| | q8t|gD]^\}}zt||}Wn t ytd |Yn0t||t||||}t|||q|S) zLoads overrides for an introspection module. Either returns the same module again in case there are no overrides or a proxy module including overrides. Doesn't cache the result. .gi.repository.Z ProxyModuler%)modulesr z gi.overrides.N__all__z1%s was set deprecated but wasn't added to __all__)r rsplitsysr5ZgetrrZimporterZhasattrrr( importlibZ import_moduleZ_overrides_moduler6r TypeErrorr._deprecated_attrspopZAssertionErrorr-r)rr!Z module_keyZhas_oldZ old_moduleZ proxy_typeZproxyr5Zoverride_package_nameZoverride_loaderZ override_modZ override_allZvarZitemr"r$r#deprecated_attrrrrload_overridesKsn               r>cst|tr>|}|jddd}tjd|fdd}|St|tjrXtd|nzt |d}Wn t ytd |j Yn0|j d st d ||jf|}|tksJ|tkr||_|jddd}tjd|t|j ||Sd S) aDecorator for registering an override. Other than objects added to __all__, these can get referenced in the same override module via the gi.repository module (get_parent_for_object() does for example), so they have to be added to the module immediately. r1r2r3r4cst|j||Sr )r.r funcZmodulerrwrapperszoverride..wrapperz"func must be a gi function, got %sZ__info__zKCan not override a type %s, which is not in a gobject introspection typelibz gi.overrideszUYou have tried override outside of the overrides module. This is not allowed (%s, %s)N)Z isinstancerrr7r8r5typesZ FunctionTyper:rr(r Z startswithZKeyErrorZ get_g_typerrZpytyper.)Ztype_r@r!rBZinfoZg_typerrAroverrides<       rDcstfdd}|S)z7Decorator for marking methods and classes as deprecatedcs(tjdjftdd|i|S)Nz %s is deprecated; use %s insteadr%r&)r)r*r r)argskwargsfnr$rrwrappedszdeprecated..wrapped functoolsZwraps)rHr$rIrrGr deprecatedsrLcCst|g||fdS)a:Marks a module level attribute as deprecated. Accessing it will emit a PyGIDeprecationWarning warning. e.g. for ``deprecated_attr("GObject", "STATUS_FOO", "GLib.Status.FOO")`` accessing GObject.STATUS_FOO will emit: "GObject.STATUS_FOO is deprecated; use GLib.Status.FOO instead" :param str namespace: The namespace of the override this is called in. :param str namespace: The attribute name (which gets added to __all__). :param str replacement: The replacement text which will be included in the warning. N)r;Z setdefaultappend)r!r"r$rrrr=sr=r%csfdd}|S)aWrapper for deprecating GObject based __init__ methods which specify defaults already available or non-standard defaults. :param callable super_init_func: Initializer to wrap. :param list arg_names: Ordered argument name list. :param list ignore: List of argument names to ignore when calling the wrapped function. This is useful for function which take a non-standard keyword that is munged elsewhere. :param dict deprecated_aliases: Dictionary mapping a keyword alias to the actual g_object_newv keyword. :param dict deprecated_defaults: Dictionary of non-standard defaults that will be used when the keyword is not explicitly passed. :param Exception category: Exception category of the error. :param int stacklevel: Stack level for the deprecation passed on to warnings.warn :returns: Wrapped version of ``super_init_func`` which gives a deprecation warning when non-keyword args or aliases are used. :rtype: callable c sR|r:tjdddt|dtt|}ni}||g}D](\}}||vrT||||<| |qT|rtjddfddt |Ddt |fdg}D]&\}}||vrȈ|||<| |q|r"tjddfd dt |DdD]}||vr&||q&|fi|S) zInitializer for a GObject based classes with support for property sets through the use of explicit keyword arguments. zUsing positional arguments with the GObject constructor has been deprecated. Please specify keyword(s) for "%s" or use a class specific constructor. See: https://wiki.gnome.org/PyGObject/InitializerDeprecationsz, Nr&zThe keyword(s) "%s" have been deprecated in favor of "%s" respectively. See: https://wiki.gnome.org/PyGObject/InitializerDeprecationsc3s|]}|VqdSr rZ.0Zk)deprecated_aliasesrr (z4deprecated_init..new_init..zInitializer is relying on deprecated non-standard defaults. Please update to explicitly use: %s See: https://wiki.gnome.org/PyGObject/InitializerDeprecationsc3s|]}d||fVqdS)z%s=%sNrrN)deprecated_defaultsrrrP7rQ) r)r*ZjoinlenZdictZziprZitemsr<rMr) r rErFZ new_kwargsZ aliases_usedZkeyZaliasZ defaults_usedr# arg_namescategoryrOrRignorer'super_init_funcrrnew_initsJ      z!deprecated_init..new_initr)rXrUrWrOrRrVr'rYrrTrdeprecated_inits3rZcs tfdd}|S)aTranslate method's return value for stripping off success flag. There are a lot of methods which return a "success" boolean and have several out arguments. Translate such a method to return the out arguments on success and None on failure. csP|i|}|dr8t|dkr*|dS|ddSnrHpDdSdS)Nrr%r2z call failed)rS)rErFZretexc_strexc_typefail_retmethodrrrIKs  z%strip_boolean_result..wrappedrJ)r_r]r\r^rIrr[rstrip_boolean_resultDs r`csfdd}|S)Ncs&t|d}t|d}||g|RS)NF)r)ZaZbZ user_datar?rrwrap\s  z'wrap_list_store_sort_func..wrapr)r@rarr?rwrap_list_store_sort_funcZs rb)NNN) rKrCr)r9r8ZpkgutilrZgirZgi._girrZ gi._constantsrrrZ__path__r r;Z ModuleTyperZobjectrr>rDZ overridefuncrLr=ZtuplerZr`rbrrrrZs2    V-  T