
    k7i                    f    S r SSKJr  SSKJr  \(       a  SSKJr   " S S\5      r " S S\5      rg	)
z#
meta.py

Some useful metaclasses.
    )annotations)TYPE_CHECKING)Anyc                  >    \ rS rSr% SrS\S'           SS jrSrg)	LeafClassesMeta   a  
A metaclass for classes that keeps track of all of them that
aren't base classes.

>>> Parent = LeafClassesMeta('MyParentClass', (), {})
>>> Parent in Parent._leaf_classes
True
>>> Child = LeafClassesMeta('MyChildClass', (Parent,), {})
>>> Child in Parent._leaf_classes
True
>>> Parent in Parent._leaf_classes
False

>>> Other = LeafClassesMeta('OtherClass', (), {})
>>> Parent in Other._leaf_classes
False
>>> len(Other._leaf_classes)
1
zset[type[Any]]_leaf_classesc                    [        U S5      (       d  [        5       U l        [        U S5      nUR	                  U 5        U[        U5      -  ng )Nr	   )hasattrsetr	   getattradd)clsnamebasesattrsleaf_classess        M/home/james-whalen/.local/lib/python3.13/site-packages/jaraco/classes/meta.py__init__LeafClassesMeta.__init__&   sC     sO,, #CsO4E
"     N)r   strr   tuple[type[object], ...]r   dict[str, object]returnNone)__name__
__module____qualname____firstlineno____doc____annotations__r   __static_attributes__r   r   r   r   r      s:    ( "!## (# !	#
 
#r   r   c                  D   ^  \ rS rSrSrSr        SU 4S jjrSrU =r$ )TagRegistered4   a!  
As classes of this metaclass are created, they keep a registry in the
base class of all classes by a class attribute, indicated by attr_name.

>>> FooObject = TagRegistered('FooObject', (), dict(tag='foo'))
>>> FooObject._registry['foo'] is FooObject
True
>>> BarObject = TagRegistered('Barobject', (FooObject,), dict(tag='bar'))
>>> FooObject._registry is BarObject._registry
True
>>> len(FooObject._registry)
2

'...' below should be 'jaraco.classes' but for pytest-dev/pytest#3396
>>> FooObject._registry['bar']
<class '....meta.Barobject'>
tagc                   > [         [        U ]  XU5        [        U S5      (       d  0 U l        U R
                  n[        XR                  S 5      nU(       a  X R                  U'   g g )N	_registry)superr&   r   r   r*   	__class__r   	attr_name)r   r   r   	namespacemetaattrr,   s         r   r   TagRegistered.__init__I   sW     	mS*4	BsK((CM}}sNND1"%MM$ r   r   )r   r   r   r   r.   r   r   r   )	r   r   r    r!   r"   r-   r   r$   __classcell__)r,   s   @r   r&   r&   4   s?    $ I&& (& %	&
 
& &r   r&   N)	r"   
__future__r   typingr   r   typer   r&   r   r   r   <module>r6      s1    #  "#d "#J!&D !&r   