o
    b                     @   s  d Z ddlmZ ddlmZ G dd deZG dd deZG dd	 d	eZG d
d deZ	G dd deZ
G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZdd ZG dd deZG d d! d!eZG d"d# d#eZd$S )%z_ Checks assigning attributes not found in class slots
will trigger assigning-non-slot warning.
    )deque)Unknownc                   @   s   e Zd ZdZdS )Emptyz empty N)__name__
__module____qualname____doc__ r	   r	   h/var/www/secure340b-portal/env/lib/python3.10/site-packages/pylint/test/functional/assigning_non_slot.pyr   	   s    r   c                   @      e Zd ZdZdgZdd ZdS )Badz missing not in slots. memberc                 C   
   d| _ d S N*   missingselfr	   r	   r
   __init__      
zBad.__init__Nr   r   r   r   	__slots__r   r	   r	   r	   r
   r      s    r   c                   @   s"   e Zd ZdZej dgZdd ZdS )Bad2z missing not in slots r   c                 C   s   d| _ d| _d S r   )r   r   r   r	   r	   r
   r         
zBad2.__init__N)r   r   r   r   r   r   r   r	   r	   r	   r
   r      s    
r   c                       s&   e Zd ZdZdgZ fddZ  ZS )Bad3z missing not found in slots 	componentc                    s$   d| _ d| _d| _tt|   d S Nr      )r   r   r   superr   r   r   	__class__r	   r
   r   !   s   zBad3.__init__)r   r   r   r   r   r   __classcell__r	   r	   r    r
   r      s    r   c                   @   r   )GoodzD missing not in slots, but Empty doesn't
    specify __slots__.
    ac                 C   r   r   r   r   r	   r	   r
   r   -   r   zGood.__init__Nr   r	   r	   r	   r
   r#   '   s    r#   c                   @   s    e Zd ZdZddgZdd ZdS )Good2z' Using __dict__ in slots will be safe. __dict__compc                 C      d| _ d| _d S )N      )r'   r   r   r	   r	   r
   r   5   r   zGood2.__init__Nr   r	   r	   r	   r
   r%   0   s    r%   c                   @   s:   e Zd ZdZddgZedd Zejdd Zdd Zd	S )
PropertyGoodz Using properties is safe. tmp_valuec                 C      | j S Nr-   r   r	   r	   r
   test>   s   zPropertyGood.testc                 C   
   || _ d S r/   r0   r   valuer	   r	   r
   r1   B   s   
c                 C   r   r   r1   r   r	   r	   r
   r   G   r   zPropertyGood.__init__N)	r   r   r   r   r   propertyr1   setterr   r	   r	   r	   r
   r+   9   s    

r+   c                   @   s8   e Zd ZdZdgZdd Zdd ZeeeZdd Z	d	S )
PropertyGood2z4 Using properties in the body of the class is safe. r-   c                 C   r.   r/   r0   r   r	   r	   r
   _getterN   s   zPropertyGood2._getterc                 C   r2   r/   r0   r3   r	   r	   r
   _setterQ   s   
zPropertyGood2._setterc                 C   r   )Nr   r5   r   r	   r	   r
   r   W   r   zPropertyGood2.__init__N)
r   r   r   r   r   r9   r:   r6   r1   r   r	   r	   r	   r
   r8   J   s    
r8   c                   @   s   e Zd ZdZdZdd ZdS )UnicodeSlotszUsing unicode objects in __slots__ is okay.

    On Python 3.3 onward, u'' is equivalent to '',
    so this test should be safe for both versions.
    firstsecondc                 C   r(   r   r<   r   r	   r	   r
   r   b   r   zUnicodeSlots.__init__Nr   r	   r	   r	   r
   r;   Z   s    r;   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
DataDescriptor c                 C   s   || _ || _d S r/   )_DataDescriptor__name_DataDescriptor__default)r   namedefaultr	   r	   r
   r   h   r   zDataDescriptor.__init__c                 C   s   t || j| jS r/   )getattrrA   rB   r   instclsr	   r	   r
   __get__l   s   zDataDescriptor.__get__c                 C   s   t || j| d S r/   )setattrrA   )r   rG   r4   r	   r	   r
   __set__o   s   zDataDescriptor.__set__N)r@   )r   r   r   r   rI   rK   r	   r	   r	   r
   r?   g   s    
r?   c                   @   s   e Zd Zdd ZdS )NonDataDescriptorc                 C   s   dS r   r	   rF   r	   r	   r
   rI   t   s   zNonDataDescriptor.__get__N)r   r   r   rI   r	   r	   r	   r
   rL   s   s    rL   c                   @   s&   e Zd ZdgZedZe Ze Z	dS )SlotsWithDescriptorZ_errN)
r   r   r   r   r?   data_descriptorrL   non_data_descriptorr   Zmissing_descriptorr	   r	   r	   r
   rM   x   s
    
rM   c                  C   s   t  } d| _d| _d S )NZfooZlala)rM   rN   rO   )rG   r	   r	   r
   dont_emit_for_descriptors   s   
rP   c                   @   s   e Zd ZdgZdS )ClassWithSlotsfoobarN)r   r   r   r   r	   r	   r	   r
   rQ      s    
rQ   c                   @   s   e Zd ZdgZdd ZdS )ClassReassigningDunderClassrR   c                 C   
   t | _d S r/   rQ   r!   r   r	   r	   r
   release   r   z#ClassReassigningDunderClass.releaseNr   r   r   r   rV   r	   r	   r	   r
   rS      s    rS   c                   @   s   e Zd Zg Zdd ZdS )"ClassReassingingInvalidLayoutClassc                 C   rT   r/   rU   r   r	   r	   r
   rV      r   z*ClassReassingingInvalidLayoutClass.releaseNrW   r	   r	   r	   r
   rX      s    rX   N)r   collectionsr   r   r   objectr   r   r   r   r#   r%   r+   r8   r;   r?   rL   rM   rP   rQ   rS   rX   r	   r	   r	   r
   <module>   s&    		