o
    㥵i_                     @  s`   d dl mZ d dlmZmZmZmZmZmZm	Z	 edZ
G dd deZG dd dee
 ZdS )	    )annotations)AnyDictGenericNoReturnTupleTypeVaroverloadTc                      s,   e Zd Zd fd	d
Zd fddZ  ZS )	SingletonnamestrbasesTuple[type]	namespaceDict[str, Any]returnNonec                   s   d | _ t ||| d S N)instancesuper__init__)clsr   r   r   	__class__ E/home/ubuntu/.local/lib/python3.10/site-packages/kui/utils/objects.pyr   	   s   zSingleton.__init__r   c                   s$   | j d u rt j|i || _ | j S r   )r   r   __call__)r   argskwargsr   r   r   r      s   
zSingleton.__call__)r   r   r   r   r   r   r   r   )r   r   )__name__
__module____qualname__r   r   __classcell__r   r   r   r   r      s    	r   c                   @  sN   e Zd ZdddZedddZedddZdd ZdddZdddZdS )ImmutableAttributeownerobjectr   r   r   r   c                 C  s   || _ d| | _d S )N_)public_nameprivate_name)selfr%   r   r   r   r   __set_name__   s   zImmutableAttribute.__set_name__r   r   type | Noner   c                 C     d S r   r   r*   r   r   r   r   r   __get__      zImmutableAttribute.__get__r
   c                 C  r-   r   r   r.   r   r   r   r/       r0   c                 C  s0   |d u rt |jj d| j dd t|| jS )Nz has no attribute '')AttributeErrorr   r    r(   getattrr)   r.   r   r   r   r/   #   s   valuec                 C  s:   t || jrt|jj d| j dd t|| j| d S N.z is immutable)hasattrr)   RuntimeErrorr   r    r(   setattr)r*   r   r4   r   r   r   __set__+   s   zImmutableAttribute.__set__c                 C  s   t |jj d| j dd r5   )r8   r   r    r(   )r*   r   r   r   r   
__delete__2   s
   zImmutableAttribute.__delete__N)r%   r&   r   r   r   r   )r   r   r   r,   r   r   )r   r&   r   r,   r   r
   )r   r&   r4   r
   r   r   )r   r&   r   r   )r    r!   r"   r+   r	   r/   r:   r;   r   r   r   r   r$      s    

r$   N)
__future__r   typingr   r   r   r   r   r   r	   r
   typer   r$   r   r   r   r   <module>   s
    $