o
    tf-	                     @   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__ Z/var/www/html/software/conda/envs/catlas/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 )NZ__override__Fr   Method z overrides method from z& but does not have @override decorator)r	   callable	TypeError)r   r   r   Z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 )NFZ	__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)r/   r0   r1   __doc__r#   r#   r#   r$   r3   8   s    r3   )	metaclassN)abcr   r   r3   r#   r#   r#   r$   <module>   s    4