o
    f_t                     @   s  d dl Z d dlZd dlZddlmZmZ ddlmZ ddlm	Z	m
Z
mZmZ ddlmZmZmZ d dlmZmZ edZg Zd d	lmZ e ed
 d dlmZ d dlmZ eZejZejZejZejZdd Z dd Z!dd Z"de_#de_$ejj%e_%e!e_&e'e"e_(eg d7 ZG dd de)Z*ddddddddd d!d"d"d"d#Z+G d$d% d%ej,Z,d&d" Z-e.e,d"e- ed% dld(d)Z/ed) d*D ]Z0d+e0 Z1ede1d,e0  e2ej3d-e0 e4 e1< ee1 qd.D ]Z0e2ej5e0e4 d/e0 < ed/e0  qd0D ]Z0d1e0 Z1ede1d2e0  e2ej6e0e4 e1< ee1 qej6j7Z8edd3d4 ed3 d5D ]Z0d6e0 Z1e2ej9e0e4 e1< ede1d7e0  ee1 q,d8D ]Z0d9e0 Z1e2ej:e0e4 e1< ede1d:e0  ee1 qLd;D ]Z0d<e0 Z1e2ej;e0e4 e1< ede1d=e0  ee1 qld>D ]Z0d?e0 Z1ede1d@e0  e2ej<e0e4 e1< ee1 qdAD ]Z=e=>dBdCd' Z1e2ee=e4 e1< ee1 qG dDdE dEej?Z?ee?Z?edE G dFdG dGej@Z@ee@Z@edG G dHdI dIejAZAeeAZAedI G dJdK dKeAZBedK G dLdM dMeAZCedM dNdO ZDedO dPdQ ZEedQ dRdS ZFedS dTdU ZGedU dVdW ZHedW G dXdY dYejIZIeeIZIedY G dZd[ d[ejJZJeeJZJed[ d\d] ZKed] d^d_ ZLed_ d`da ZMeeMdbZMeda dldcddZNedd eOederejPZQedf eddfdg ejRejSejTfZUedh eddhdi eZVedj eddjdk dS )m    N   )wakeup_on_signalregister_sigint_fallback)get_introspection_module)variant_type_from_string
source_newsource_set_callbackio_channel_read)override
deprecateddeprecated_attr)PyGIDeprecationWarningversion_infoGLib)_optionoption)_gi)GErrorc                   C   s   t jdtdd d S )NzmSince version 3.11, calling threads_init is no longer needed. See: https://wiki.gnome.org/PyGObject/Threadingr   )
stacklevel)warningswarnr    r   r   3/usr/lib/python3/dist-packages/gi/overrides/GLib.pythreads_init5   s   
r   c                 C   s2   t | jtrt| j}n| j}|| jf||fkS N)
isinstancedomainstrr   quark_from_stringcode)selfr   r   self_domain_quarkr   r   r   gerror_matches;   s   r"   c                 C   s   t | }t|||S r   )r   quark_to_stringr   )r   messager   domain_quarkr   r   r   gerror_new_literalE   s   
r&   Errorzgi.repository.GLib)r   r'   OptionContextOptionGroupPidspawn_asyncr   c                   @   sn   e Zd Zejjejjejjejjejj	ejj
ejjejjejjejjejjejjejjejjdZdd ZdS )_VariantCreator)bynqiuxthdsogvc           	      C   sv  t |}|| jv r| j| |S t j|}|du r| S | r4|| |	 
 | | S zt| W n tyI   td||f w | r^| t|kr^td||f | rpt|dkrptd||f | r|	 
 }t|tr| }|D ]}|| || q| S |dd }|D ]}t|
 }|| || |t|d }q| S )aB  Create a GVariant object from given format and a value that matches
        the format.

        This method recursively calls itself for complex structures (arrays,
        dictionaries, boxed).

        Returns the generated GVariant.

        If value is None it will generate an empty GVariant container type.
        NzOCould not create array, tuple or dictionary entry from non iterable value %s %sz1Tuple mismatches value's number of elements %s %sr   z/Dictionary entries must have two elements %s %s   )r   VariantType_LEAF_CONSTRUCTORSVariantBuildernewendis_maybe	add_value_createelement
dup_stringiter	TypeErroris_tuplen_itemslenis_dict_entryis_arrayr   dictitemsr   )	r    formatvaluegvtypebuilderelement_typer1   remainer_formatdupr   r   r   rC   i   sB   


z_VariantCreator._createN)__name__
__module____qualname__r   Variantnew_booleannew_byte	new_int16
new_uint16	new_int32
new_uint32	new_int64
new_uint64
new_handle
new_double
new_stringnew_object_pathnew_signaturenew_variantr=   rC   r   r   r   r   r,   V   s"    r,   get_booleanget_byte	get_int16
get_uint16	get_int32
get_uint32	get_int64
get_uint64
get_handle
get_double
get_string)r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   c                   @   s   e Zd Zdd Zedd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zedd Zdd Zdd Zdd Zdd Zdd ZdS ) rY   c                 C   s2   t j|std|t }|||}||_|S )a  Create a GVariant from a native Python object.

        format_string is a standard GVariant type signature, value is a Python
        object whose structure has to match the signature.

        Examples:
          GLib.Variant('i', 1)
          GLib.Variant('(is)', (1, 'hello'))
          GLib.Variant('(asa{sv})', ([], {'foo': GLib.Variant('b', True),
                                          'bar': GLib.Variant('i', 2)}))
        z#Invalid GVariant format string '%s')r   r<   string_is_validrG   r,   rC   format_string)clsrt   rP   creatorr:   r   r   r   __new__   s   
zVariant.__new__c                  G   s   t j| S r   )r   rY   	new_tuple)elementsr   r   r   rx      s   zVariant.new_tuplec                 C   s$   z|    W d S  ty   Y d S w r   )unrefImportErrorr    r   r   r   __del__   s
   zVariant.__del__c                 C   s
   |  dS NT)print_r|   r   r   r   __str__      
zVariant.__str__c                 C   s,   t | dr	| j}n|  }d|| df S )Nrt   zGLib.Variant('%s', %s)F)hasattrrt   get_type_stringr   )r    fr   r   r   __repr__   s   
zVariant.__repr__c                 C   s"   z|  |W S  ty   Y dS w NFequalrG   r    otherr   r   r   __eq__   s
   zVariant.__eq__c                 C   s$   z|  | W S  ty   Y dS w r~   r   r   r   r   r   __ne__   s
   zVariant.__ne__c                 C   s   t |  |  fS r   )hashr   unpackr|   r   r   r   __hash__   s   zVariant.__hash__c                    s      }t|}|rt | S |dr%t fddt  D S |drJi }t  D ]} |}|d	 ||d	 < q2|S |dr\ fdd	t  D S |d
rg 
 	 S |dry  srdS  d	 S td| )z1Decompose a GVariant into a native Python object.(c                 3   s    | ]
}  | V  qd S r   get_child_valuer   .0r1   r|   r   r   	<genexpr>   s    z!Variant.unpack.<locals>.<genexpr>a{r;   r   ac                    s   g | ]	}  | qS r   r   r   r|   r   r   
<listcomp>  s    z"Variant.unpack.<locals>.<listcomp>r:   mNzunsupported GVariant type )r   LEAF_ACCESSORSgetgetattr
startswithtuplerange
n_childrenr   r   get_variantNotImplementedError)r    type_stringlaresr1   r:   r   r|   r   r      s2   









zVariant.unpackc           	      C   s   |dkrg S | ds|gS g }d}|dd }|rn|d }||7 }|dd }|dv r-q|d	v red}|}|dkr<d
}nd}|dkre|d }||7 }|dd }||krY|d7 }n||kra|d8 }|dksB|| d}|s|S )a[  Return a list of the element signatures of the topmost signature tuple.

        If the signature is not a tuple, it returns one element with the entire
        signature. If the signature is an empty tuple, the result is [].

        This is useful for e. g. iterating over method parameters which are
        passed as a single Variant.
        z()r    r;   r   N)r   r   )r   {)})r   append)	klass	signatureresultheadtailclevelupdownr   r   r   split_signature  s@   




zVariant.split_signaturec                 C   sL   |   dv rt|  S |   ds|   dr|  S td|    )Nr7   r8   r9   r   r   z'GVariant type %s does not have a length)r   rJ   rr   r   r   rG   r|   r   r   r   __len__K  s
   zVariant.__len__c                 C   s   |   drJz| |td}|d u rt|| W S  tyI   t|  D ]}| 	|}|	d |krD|	d    Y S q)t|w |   dsX|   dr{t
|}|dk rf|  | }|dk sp||  krttd| 	| S |   dv r|  |S td	|    )
Nr   *r   r;   r   r   zlist index out of ranger   z#GVariant type %s is not a container)r   r   lookup_valuer   KeyErrorr   rG   r   r   r   int
IndexErrorrr   __getitem__)r    keyvalr1   r:   r   r   r   r   S  s0   

zVariant.__getitem__c                 C      |   S r   )__bool__r|   r   r   r   __nonzero__x     zVariant.__nonzero__c                 C   s|   |   dv r|  dkS |   dv r|  S |   dv r$t|  dkS |   ds2|   dr8|  dkS t|  S )N)	r.   r/   r0   r1   r2   r3   r4   r5   r6   r   )r-   r   r   r   )r   r   rh   rJ   rr   r   r   boolr|   r   r   r   r   {  s   zVariant.__bool__c                 C   sV   |   dstd|    g }t|  D ]}| |}||d  q|S )Nr   z$GVariant type %s is not a dictionaryr   )r   r   rG   r   r   r   r   r   )r    r   r1   r:   r   r   r   keys  s   
zVariant.keysN)rV   rW   rX   rw   staticmethodrx   r}   r   r   r   r   r   r   classmethodr   r   r   r   r   r   r   r   r   r   rY      s$    
(
5%rY   c                 C   s   t j| \}}|S r   )r   rY   rr   )r    rP   lengthr   r   r   rr     s   r   c                 C   s(   t | trt| d|S t| |S )NUTF-8)r   bytesr   markup_escape_textdecode)textr   r   r   r   r     s   
r   )DESKTOP	DOCUMENTSDOWNLOADMUSICPICTURESPUBLIC_SHARE	TEMPLATESVIDEOSUSER_DIRECTORY_zGLib.UserDirectory.DIRECTORY_
DIRECTORY_)ERRHUPINNVALOUTPRIIO_)APPENDGET_MASKIS_READABLEIS_SEEKABLEMASKNONBLOCKSET_MASKIO_FLAG_zGLib.IOFlags.IO_FLAG_IS_WRITEABLEzGLib.IOFlags.IS_WRITABLE)AGAINEOFERRORNORMAL
IO_STATUS_zGLib.IOStatus.)CHILD_INHERITS_STDINDO_NOT_REAP_CHILDFILE_AND_ARGV_ZEROLEAVE_DESCRIPTORS_OPENSEARCH_PATHSTDERR_TO_DEV_NULLSTDOUT_TO_DEV_NULLSPAWN_zGLib.SpawnFlags.)HIDDENIN_MAINREVERSENO_ARGFILENAMEOPTIONAL_ARGNOALIASOPTION_FLAG_zGLib.OptionFlags.)UNKNOWN_OPTION	BAD_VALUEFAILEDOPTION_ERROR_zGLib.OptionError.)
G_MINFLOAT
G_MAXFLOATG_MINDOUBLEG_MAXDOUBLE
G_MINSHORT
G_MAXSHORTG_MAXUSHORTG_MININTG_MAXINT	G_MAXUINT	G_MINLONG	G_MAXLONG
G_MAXULONG	G_MAXSIZE
G_MINSSIZE
G_MAXSSIZEG_MINOFFSETG_MAXOFFSET_r;   c                       s0   e Zd ZdddZdddZ fddZ  ZS )	MainLoopNc                 C   s   t j|dS r   )r   r  r?   )ru   contextr   r   r   rw        zMainLoop.__new__c                 C   s   d S r   r   )r    r  r   r   r   __init__     zMainLoop.__init__c              	      st   t | j+ t  tt|   W d    n1 sw   Y  W d    d S W d    d S 1 s3w   Y  d S r   )r   quitr   superr  runr|   	__class__r   r   r    s   "zMainLoop.runr   )rV   rW   rX   rw   r  r  __classcell__r   r   r  r   r    s    

r  c                       s   e Zd Zd fdd	Z  ZS )MainContextTc                    s   t t| |S r   )r  r  	iteration)r    	may_blockr  r   r   r        zMainContext.iteration)T)rV   rW   rX   r   r  r   r   r  r   r    s    r  c                       s   e Zd Zdd Z fddZdd Zd fdd		Zd
d ZeedZdd Z	dd Z
ee	e
Zdd Zdd ZeeeZ  ZS )Sourcec                 O   s   t  }| |_t|dd |S )N__pygi_custom_sourceT)r   r  setattr)ru   argskwargssourcer   r   r   rw     s   zSource.__new__c                       t t|  S r   )r  r#  r  r    r&  r'  r  r   r   r    r  zSource.__init__c                 C   s"   t | dr|   |   d S d S Nr$  )r   destroy_clear_boxedr|   r   r   r   r}     s   
zSource.__del__Nc                    s0   t | drt| || d S tt| || d S r+  )r   r   r  r#  set_callback)r    fn	user_datar  r   r   r.    s   
zSource.set_callbackc                 C      t  d S Ngư>r   get_real_timer|   r   r   r   get_current_time     zSource.get_current_timez.GLib.Source.get_time() or GLib.get_real_time()c                 C   r   r   )get_priorityr|   r   r   r   __get_priority'  r   zSource.__get_priorityc                 C      |  | d S r   )set_priorityr    rP   r   r   r   __set_priority*  r  zSource.__set_priorityc                 C   r   r   )get_can_recurser|   r   r   r   __get_can_recurse/  r   zSource.__get_can_recursec                 C   r9  r   )set_can_recurser;  r   r   r   __set_can_recurse2  r  zSource.__set_can_recurser   )rV   rW   rX   rw   r  r}   r.  r5  r   _Source__get_priority_Source__set_prioritypropertypriority_Source__get_can_recurse_Source__set_can_recursecan_recurser  r   r   r  r   r#    s    	
r#  c                       s0   e Zd ZejfddZejf fdd	Z  ZS )Idlec                 C   s   t  }| |_|S r   )r   idle_source_newr  )ru   rD  r(  r   r   r   rw   =     zIdle.__new__c                    s*   t t|   |tjkr| | d S d S r   )r  r#  r  r   PRIORITY_DEFAULTr:  )r    rD  r  r   r   r  B  s   
zIdle.__init__)rV   rW   rX   r   rK  rw   r  r  r   r   r  r   rH  <  s    rH  c                   @   s,   e Zd ZdejfddZdejfddZdS )Timeoutr   c                 C   s   t |}| |_|S r   )r   timeout_source_newr  )ru   intervalrD  r(  r   r   r   rw   L  s   
zTimeout.__new__c                 C   s   |t jkr| | d S d S r   )r   rK  r:  )r    rN  rD  r   r   r   r  Q  s   
zTimeout.__init__N)rV   rW   rX   r   rK  rw   r  r   r   r   r   rL  K  s    rL  c                 O   s"   | dtj}tj|| g|R  S NrD  )r   r   PRIORITY_DEFAULT_IDLEidle_add)functionr0  r'  rD  r   r   r   rQ  Z  s   rQ  c                 O   $   | dtj}tj|| |g|R  S rO  )r   r   rK  timeout_addrN  rR  r0  r'  rD  r   r   r   rT  b     rT  c                 O   rS  rO  )r   r   rK  timeout_add_secondsrU  r   r   r   rW  j  rV  rW  c                    sD  t |trt |tjr2tdt |}| |}t stdd|v r.tdt |d }ntj	}nt
|dk s>t|d sBtd|d  |dd  }t tr_ fdd	}tj}n<t tjrztjd
krz fdd	}tj }n!tdr fdd	}tj }nt tjsJ  }}|||||fS )NzFCalling io_add_watch without priority as second argument is deprecatedzthird argument must be callablerD  zgCalling io_add_watch with priority keyword argument is deprecated, put it as second positional argumentr;   r   z%expecting callback as fourth argumentc                        |g|R  S r   r   r  conddatacallbackchannelr   r   <lambda>      z(_io_add_watch_get_args.<locals>.<lambda>win32c                    rX  r   r   rY  r\  r   r   r_    r`  filenoc                    rX  r   r   rY  r\  r   r   r_    r`  )r   r   r   IOConditionr   r   r   callablerG   rK  rJ   	IOChannelunix_newsocketsysplatformwin32_new_socketrb  r   )r^  	priority_	conditioncb_and_user_datar'  r0  func_fdtransformreal_channelr   r\  r   _io_add_watch_get_args~  s@   


rp  c                  O   s0   t | i |\}}}}}tj||||g|R  S )zOio_add_watch(channel, priority, condition, func, *user_data) -> event_source_id)rp  r   io_add_watch)r&  r'  r^  rD  rl  funcr0  r   r   r   rq    s   rq  c                       s   e Zd ZdddZ fddZdddZdd	d
ZdddZdddZdd Z	e
jje
jje
jjdZdddZdd ZeedZdd Zdd ZeZ  ZS )re  Nc                 C   sJ   |d ur
t j|S |d urt j||pdS |d ur!t j|S td)NrzLeither a valid file descriptor, file name, or window handle must be supplied)r   re  rf  new_filewin32_new_fdrG   )ru   filedesfilenamemodehwndr   r   r   rw     s   zIOChannel.__new__c                    r)  r   )r  re  r  r*  r  r   r   r    r  zIOChannel.__init__r   c                 C   s
   t | |S r   )r	   )r    	max_countr   r   r   read  r   zIOChannel.readc                 C   s    |   \}}}}|d u rdS |S Nr   )	read_line)r    	size_hintstatusbufr   terminator_posr   r   r   readline  s   zIOChannel.readlinec                 C   sN   g }t jj}|t jjkr%|  \}}}}|d u rd}|| |t jjks|S r|  )r   IOStatusr   r}  r   )r    r~  linesr  r  r   r  r   r   r   	readlines  s   
zIOChannel.readlinesc                 C   s8   t |ts
|d}|dkrt|}| ||\}}|S )Nr   r   )r   r   encoderJ   write_chars)r    r  buflenr  writtenr   r   r   write  s   

zIOChannel.writec                 C   s   |D ]}|  | qd S r   )r  )r    r  liner   r   r   
writelines  s   zIOChannel.writelines)r   r;   r   r   c                 C   s2   z| j | }W n ty   tdw | ||S )Nzinvalid 'whence' value)_whence_mapr   
ValueErrorseek_position)r    offsetwhencewr   r   r   seek  s   zIOChannel.seekc                 O   s$   | dtj}t| |||g|R  S rO  )r   r   rK  rq  )r    rl  r]  r0  r'  rD  r   r   r   	add_watch  rV  zIOChannel.add_watchzGLib.io_add_watch()c                 C   s   | S r   r   r|   r   r   r   __iter__  r  zIOChannel.__iter__c                 C   s$   |   \}}}}|tjjkr|S tr   )r}  r   r  r   StopIteration)r    r  r  r   r  r   r   r   __next__  s   zIOChannel.__next__)NNNNr   )r   )rV   rW   rX   rw   r  r{  r  r  r  r  r   SeekTypeSETCURENDr  r  r  r   r  r  nextr  r   r   r  r   re    s    
	





re  c                   @   s   e Zd Zdd Zdd ZdS )PollFDc                 C   s   t  }| |_|S r   )r   r  r  )ru   fdeventspollfdr   r   r   rw   	  rJ  zPollFD.__new__c                 C   s   || _ || _d S r   )r  r  )r    r  r  r   r   r   r    s   
zPollFD.__init__N)rV   rW   rX   rw   r  r   r   r   r   r    s    r  c                 O   s  g }t |rBtdt | }|}t|dkr|dtj}nNt|dkr.|}|dtj}n>t|dkr>|d g}|d }n.td| }|}d|v rQ|d }|}nt|dkrht |d rh|d }|dd  }ntdd	|v r{|rvtd
|d	 f}||||fS )NzHCalling child_watch_add without priority as first argument is deprecatedr   rD  r;   r   z'expected at most 4 positional argumentsrR  z#expected callback as third argumentr[  z'got multiple values for "data" argument)	rd  r   r   r   rJ   r   r   rK  rG   )priority_or_pidpid_or_callbackr&  r'  r0  pidr]  rD  r   r   r   _child_watch_add_get_args  s<   


r  c                  O   s,   t | i |\}}}}tj|||g|R  S )z/child_watch_add(priority, pid, function, *data))r  r   child_watch_add)r&  r'  rD  r  rR  r[  r   r   r   r  G  s   r  c                   C   r1  r2  r3  r   r   r   r   r5  P  r6  r5  zGLib.get_real_time()c                 C   s   t | |d S )Nr   )r   filename_from_utf8)
utf8stringrJ   r   r   r   r  [  r"  r  unix_signal_addunix_signal_add_fullzGLib.unix_signal_addglib_versionz<(GLib.MAJOR_VERSION, GLib.MINOR_VERSION, GLib.MICRO_VERSION)pyglib_versionzgi.version_infor  )Wr   rh  rg  _ossighelperr   r   moduler   r   r   r   r   r	   	overridesr
   r   r   gir   r   r   __all__r   r   r   	gi._errorr   r'   r(   r)   r*   r+   r   r"   r&   rV   rW   	__gtype__matchesr   new_literalobjectr,   r   rY   rr   r%  r   r/   attrr   UserDirectoryglobalsrc  IOFlagsIS_WRITABLEr   r  
SpawnFlagsOptionFlagsOptionErrornamesplitr  r  r#  rH  rL  rQ  rT  rW  rp  rq  re  r  r  r  r5  r  r   r  r  MAJOR_VERSIONMINOR_VERSIONMICRO_VERSIONr  r  r   r   r   r   <module>   s  



G g





6






+
N

	
'







