o
    Rh-	                     @   s2   d dl mZ G dd deZG dd dedZdS )    )ABCMetac                       s@   e Zd Z fddZedd Zedd Zedd Z  ZS )	EnforceOverridesMetac              
      s   t | D ]%}|ds)|dkr)t| |}t|tttttt	t
fs)tt| |dd qt j| |||fi |}| D ]\}}| || |dsV| |}| ||| q;|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/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/overrides/enforce.pyr      s   


zEnforceOverridesMeta.__new__c                 C   sZ   t |dd}|D ]"}t || d}|rt|rt |ddrq|s*td|  d| dqd S )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_methodr#   r#   r$   r      s    
zDEnforceOverridesMeta._check_if_overrides_without_overrides_decoratorc                 C   s<   |D ]}t || d}t |ddrtd|  d| dqd S )NF	__final__r&   z is finalized in z, it cannot be overridden)r	   r(   )r   r   r*   r+   r#   r#   r$   r   %   s   z5EnforceOverridesMeta._check_if_overrides_final_methodc                 C   s8   t | ts
t | tr| d t} | S t | tr| j} | S )N)r
   classmethodstaticmethod__get__r   propertyfget)r   r#   r#   r$   r   /   s   
z*EnforceOverridesMeta._handle_special_value)	__name__
__module____qualname__r   r.   r   r   r   __classcell__r#   r#   r!   r$   r      s    

	r   c                   @   s   e Zd ZdZdS )EnforceOverridesz4Use this as the parent class for your custom classesN)r2   r3   r4   __doc__r#   r#   r#   r$   r6   8   s    r6   )	metaclassN)abcr   r   r6   r#   r#   r#   r$   <module>   s    4