o
    Uh                     @   s   g d Z ddlZddlmZ zddlZW n ey!   ddlZY nw dZdZdZ	eej
dejfeej
dejfe	ejddfiZdd	 Zd
d ZedZedZedZG dd deZG dd deZdd ZdS ))open_sourceREGISTRY_SOURCE_LMREGISTRY_SOURCE_LM_WOW6432REGISTRY_SOURCE_CU    N)count         zSoftware\Pythonc                 C   s,   |t jkrd| v r| d | d S | S d S )N )winregREG_SZindex)valuevtype r   t/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/findpython/pep514tools/_registry.pyget_value_from_tuple*   s
   
r   c                 C   s   | d | S N\r   )xyr   r   r   join2   s   r   z	^[a-z_]+$z^[A-Za-z]+$z([A-Z]+[a-z]+)c                   @   s\   e Zd Ze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dS )PythonWrappedDictc                 C   s0   | sdS t | s| S ddd | dD S )N c                 s   s    | ]}|  V  qd S N)
capitalize).0cr   r   r   	<genexpr>B       z1PythonWrappedDict._attr_to_key.<locals>.<genexpr>_)_VALID_ATTRmatchr   split)attrr   r   r   _attr_to_key<   s
   
zPythonWrappedDict._attr_to_keyc                 C   s4   | sdS t | s| S ddd t| D  S )Nr   r    c                 s   s    | ]}|r|V  qd S r   r   r   kr   r   r   r   J   r   z1PythonWrappedDict._key_to_attr.<locals>.<genexpr>)
_VALID_KEYr"   r   _KEY_TO_ATTRr#   lower)keyr   r   r   _key_to_attrD   s
   
zPythonWrappedDict._key_to_attrc                 C   s
   || _ d S r   )_d)selfdr   r   r   __init__L      
zPythonWrappedDict.__init__c                 C   sR   | drt| |S |dkrd}| |}z| j| W S  ty(   Y t|w Nr    r   r   )
startswithobject__getattribute__r%   r-   	ExceptionAttributeError)r.   r$   r+   r   r   r   __getattr__O   s   

zPythonWrappedDict.__getattr__c                 C   s8   | drt| ||S |dkrd}|| j| |< d S r2   )r3   r4   __setattr__r-   r%   )r.   r$   r   r   r   r   r9   ]   s
   
zPythonWrappedDict.__setattr__c                 C   s   | j }tt|| jS r   )r,   listmapr-   )r.   k2ar   r   r   __dir__e   s   zPythonWrappedDict.__dir__c                 C   s   | j || d S r   )r-   
setdefault)r.   r+   r   r   r   r   _setdefaulti   s   zPythonWrappedDict._setdefaultc                 C   s
   | j  S r   )r-   itemsr.   r   r   r   _itemsl   r1   zPythonWrappedDict._itemsc                    s,   | j  dd fdd| j D  d S )Nzinfo(z, c                 3   s$    | ]\}}d   ||V  qdS )z{}={!r}N)format)r   r'   vr<   r   r   r   s   s   " z-PythonWrappedDict.__repr__.<locals>.<genexpr>))r,   r   r-   r@   rA   r   rE   r   __repr__o   s   zPythonWrappedDict.__repr__N)__name__
__module____qualname__staticmethodr%   r,   r0   r8   r9   r=   r?   rB   rG   r   r   r   r   r   ;   s    

r   c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )RegistryAccessorc                 C   s(   || _ || _|d\}}| _|| _d S r   )_rootsubkey
rpartitionname_flags)r.   rootrN   flagsr    r   r   r   r0   y   s   
zRegistryAccessor.__init__c                    s   g }z/t  j jdt j jB }t D ]}|t || qW d    n1 s+w   Y  W n	 t	y:   Y nw t
 fdd|D S )Nr   c                 3   s    | ]} | V  qd S r   r   r&   rA   r   r   r      r   z,RegistryAccessor.__iter__.<locals>.<genexpr>)r   	OpenKeyExrM   rN   KEY_READrQ   r   appendEnumKeyOSErroriter)r.   subkey_namesr+   ir   rA   r   __iter__   s   
zRegistryAccessor.__iter__c                 C   s   t | jt| j|| jS r   )rL   rM   r   rN   rQ   )r.   r+   r   r   r   __getitem__   s   zRegistryAccessor.__getitem__c                 C   sj   z*t | j| jdt j| jB }tt || W  d    W S 1 s#w   Y  W d S  ty4   Y d S w Nr   )	r   rT   rM   rN   rU   rQ   r   QueryValueExrX   )r.   
value_namer+   r   r   r   	get_value   s   (zRegistryAccessor.get_valuec                 C   s   i }| D ]	}|  ||j< qt| j| jdtj| jB }z8|$ t D ]}t	||\}}}t
||}|r;|||p:d< q#W d    n1 sFw   Y  W t|S W t|S  ty`   Y t|S w )Nr   r   )get_all_valuesrP   r   rT   rM   rN   rU   rQ   r   	EnumValuer   rX   r   )r.   schemarN   r+   r[   vnamer   r   r   r   r   rb      s*   

		zRegistryAccessor.get_all_valuesc                 C   s   t | j| jdt j| jB 5}|d u rt || nt|tr*t 	||dt j
| ntdt|W d    d S W d    d S 1 sFw   Y  d S Nr   zcannot write {} to registry)r   CreateKeyExrM   rN   	KEY_WRITErQ   DeleteValue
isinstancestr
SetValueExr   	TypeErrorrC   type)r.   r`   r   r+   r   r   r   	set_value   s   
"zRegistryAccessor.set_valuec              	   C   s   t ||dt j| jB U}|D ]I\}}t|tr#| ||| | qt|tr3| |||	 | q|d u r>t 
|| qt|trNt ||dt j| q|dt| qW d    d S 1 sdw   Y  d S rf   )r   rg   rh   rQ   rj   r   _set_all_valuesrB   dictr@   ri   rk   rl   r   rV   rC   rn   )r.   rootkeyrP   infoerrorsr+   r'   rD   r   r   r   rp      s   


"z RegistryAccessor._set_all_valuesc                 C   sp   g }t |tr| }nt |tr| }ntd| | j| j|| t	|dkr0t
|d |r6t
|d S )Nzinfo must be a dictionaryr   r   )rj   r   rB   rq   r@   rm   rp   rM   rN   len
ValueError)r.   rs   rt   r@   r   r   r   set_all_values   s   



zRegistryAccessor.set_all_valuesc                 C   s~   | D ]}|   qzt| jd dtj| jB }W n
 ty"   Y d S w | t|| j W d    d S 1 s8w   Y  d S r^   )	deleter   rT   rM   rU   rQ   rX   DeleteKeyExrN   )r.   r'   r+   r   r   r   rx      s   
"zRegistryAccessor.deleteN)rH   rI   rJ   r0   r\   r]   ra   rb   ro   rp   rw   rx   r   r   r   r   rL   x   s    	rL   c                 C   s,   t | }|std|\}}}t|||S )Nzunsupported registry source)_REG_KEY_INFOgetrv   rL   )registry_sourcers   rR   rN   rS   r   r   r   r      s
   

r   )__all__re	itertoolsr   r   ImportError_winregr   r   r   HKEY_LOCAL_MACHINEKEY_WOW64_64KEYKEY_WOW64_32KEYHKEY_CURRENT_USERrz   r   r   compiler!   r(   r)   r4   r   rL   r   r   r   r   r   <module>   s>   


=d