
    ?g-	                     >    d dl mZ  G d de      Z G d de      Zy)    )ABCMetac                   N     e Zd Z fdZed        Zed        Zed        Z xZS )EnforceOverridesMetac                    t        |       D ]m  }|j                  d      r|dk7  st        | |      }t        |t        t
        t        t        t        t        t        f      rWt        t        | |      dd       o t        | 4  | |||fi |}|j                         D ]M  \  }}| j                  ||       |j                  d      r*| j!                  |      }| j#                  |||       O |S )N__mro__ignored__T)dir
startswithgetattr
isinstanceboolstrintfloattuplelistdictsetattrsuper__new__items _check_if_overrides_final_method_handle_special_value/_check_if_overrides_without_overrides_decorator)	mclsnamebases	namespacekwargsmethodvaluecls	__class__s	           F/var/www/openai/venv/lib/python3.12/site-packages/overrides/enforce.pyr   zEnforceOverridesMeta.__new__   s    $iF$$T*vf-!%$S%d)STGD&1=$G	   godD%EfE$??,KD%11$>??4(2259DDT5RWX	 -
 
    c                     t        |dd      }|D ]>  }t        || d      }|rt        |      rt        |dd      r+|r.t        d|  d| d       y )N__override__Fr	   Method z overrides method from z& but does not have @override decorator)r   callable	TypeError)r   r"   r   is_overridebasebase_class_methods         r%   r   zDEnforceOverridesMeta._check_if_overrides_without_overrides_decorator   si    e^U;D 'dE :% 12,mUCdV#:4&@fg  r&   c                 j    |D ].  }t        || d      }t        |dd      st        d|  d| d       y )NF	__final__r)   z is finalized in z, it cannot be overridden)r   r+   )r   r   r-   r.   s       r%   r   z5EnforceOverridesMeta._check_if_overrides_final_method%   sI    D 'dE :(+u=dV#4TF:ST 	 r&   c                     t        | t              st        | t              r| j                  d t              } | S t        | t
              r| j                  } | S )N)r   classmethodstaticmethod__get__r   propertyfget)r"   s    r%   r   z*EnforceOverridesMeta._handle_special_value/   sF    e[)Z|-LMM$-E  x(JJEr&   )	__name__
__module____qualname__r   r3   r   r   r   __classcell__)r$   s   @r%   r   r      sD           r&   r   c                       e Zd ZdZy)EnforceOverridesz4Use this as the parent class for your custom classesN)r7   r8   r9   __doc__ r&   r%   r<   r<   8   s    :r&   r<   )	metaclassN)abcr   r   r<   r>   r&   r%   <module>rA      s"    17 1h	!5 	r&   