
    2`=                     4    d Z  G d de      Z G d de      Zy)z#
meta.py

Some useful metaclasses.
c                       e Zd ZdZd Zy)LeafClassesMetaa  
    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
    c                     t        | d      st               | _        t        | d      }|j	                  |        |t        |      z  }y )N_leaf_classes)hasattrsetr   getattradd)clsnamebasesattrsleaf_classess        5/usr/lib/python3/dist-packages/jaraco/classes/meta.py__init__zLeafClassesMeta.__init__   s>    sO, #CsO4E
"    N)__name__
__module____qualname____doc__r    r   r   r   r      s    (#r   r   c                   &     e Zd ZdZdZ fdZ xZS )TagRegisteredaY  
    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                     t         t        |   |||       t        | d      si | _        | j
                  }t        | |j                  d       }|r| | j                  |<   y y )N	_registry)superr   r   r   r   	__class__r   	attr_name)r
   r   r   	namespacemetaattrr   s         r   r   zTagRegistered.__init__;   sX    mS*4	BsK(CM}}sDNND1"%CMM$ r   )r   r   r   r   r   r   __classcell__)r   s   @r   r   r   &   s    $ I& &r   r   N)r   typer   r   r   r   r   <module>r$      s"   #d #<&D &r   