
    W                     >    d dl mZ  G d de      Z G d de      Zy)    )ABCMetac                   .     e Zd Z fdZed        Z xZS )EnforceOverridesMetac                 P   t        
|   | |||fi |}|j                         D ]~  \  }}|j                  d      r| j	                  |      }t        |dd      }|D ]D  }t        ||d      }	|	rt        |	      s|s
J d|z         t        |	dd      s8J d|	d|d         |S )	N____override__Fz:Method %s overrides but does not have @overrides decorator__finalized__zMethod z is finalized in z, it cannot be overridden)super__new__items
startswithhandle_special_valuegetattrcallable)mclsnamebases	namespacekwargsclsvalueis_overridebasebase_class_method	__class__s             $lib/third_party/overrides/enforce.pyr   zEnforceOverridesMeta.__new__   s    godD%EfE$??,KD% t$--e4E!%?K$+D$$>!(9J0KYOSWXY ##4ouM ($0M  -& 
    c                     t        | t              st        | t              r| j                  d t              } | S t        | t
              r| j                  } | S )N)
isinstanceclassmethodstaticmethod__get__dictpropertyfget)r   s    r   r   z)EnforceOverridesMeta.handle_special_value   sF    e[)Z|-LMM$-E  x(JJEr   )__name__
__module____qualname__r   r!   r   __classcell__)r   s   @r   r   r      s    .  r   r   c                       e Zd ZdZy)EnforceOverridesz4Use this as the parent class for your custom classesN)r&   r'   r(   __doc__ r   r   r+   r+   %   s    :r   r+   )	metaclassN)abcr   r   r+   r-   r   r   <module>r0      s"    7 B	!5 	r   