HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/constantly/__pycache__/_constants.cpython-312.pyc
�

?f�U�>�	�T�dZddlmZmZgd�ZddlmZddlmZddl	m
Z
mZmZe
�Zeee��ZGd�de
�ZGd	�d
e�ZGd�ded
e
fi��ZGd�de�ZGd�de�ZGd�de�ZGd�de�Zd�ZGd�de�ZGd�de�Zy)zi
Symbolic constant support, including collections and constants with text,
numeric, and bit flag values.
�)�division�absolute_import)�
NamedConstant�
ValueConstant�FlagConstant�Names�Values�Flags)�partial)�count)�and_�or_�xorc�:�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
y	)
�	_Constanta�
    @ivar _index: A C{int} allocated from a shared counter in order to keep
        track of the order in which L{_Constant}s are instantiated.

    @ivar name: A C{str} giving the name of this constant; only set once the
        constant is initialized by L{_ConstantsContainer}.

    @ivar _container: The L{_ConstantsContainer} subclass this constant belongs
        to; C{None} until the constant is initialized by that subclass.
    c�0�d|_t�|_y�N)�
_container�_constantOrder�_index��selfs �7/usr/lib/python3/dist-packages/constantly/_constants.py�__init__z_Constant.__init__#s�����$�&���c�P�d|jj�d|j�d�S)zq
        Return text identifying both which constant this is and which
        collection it belongs to.
        �<�=�>)r�__name__�namers r�__repr__z_Constant.__repr__(s��
!�O�O�4�4�d�i�i�@�@rc��t||j�r|j|jk(stS|j|jkS)aC
        Implements C{<}.  Order is defined by instantiation order.

        @param other: An object.

        @return: C{NotImplemented} if C{other} is not a constant belonging to
            the same container as this constant, C{True} if this constant is
            defined before C{other}, otherwise C{False}.
        ��
isinstance�	__class__r�NotImplementedr�r�others  r�__lt__z_Constant.__lt__0�=���5�$�.�.�1����5�#3�#3�3�!�!��{�{�U�\�\�)�)rc��t||j�r|j|jk(stS||uxs|j|jkS)aP
        Implements C{<=}.  Order is defined by instantiation order.

        @param other: An object.

        @return: C{NotImplemented} if C{other} is not a constant belonging to
            the same container as this constant, C{True} if this constant is
            defined before or equal to C{other}, otherwise C{False}.
        r$r(s  r�__le__z_Constant.__le__B�F���5�$�.�.�1����5�#3�#3�3�!�!��u�}�:����e�l�l� :�:rc��t||j�r|j|jk(stS|j|jkDS)aB
        Implements C{>}.  Order is defined by instantiation order.

        @param other: An object.

        @return: C{NotImplemented} if C{other} is not a constant belonging to
            the same container as this constant, C{True} if this constant is
            defined after C{other}, otherwise C{False}.
        r$r(s  r�__gt__z_Constant.__gt__Tr+rc��t||j�r|j|jk(stS||uxs|j|jkDS)aO
        Implements C{>=}.  Order is defined by instantiation order.

        @param other: An object.

        @return: C{NotImplemented} if C{other} is not a constant belonging to
            the same container as this constant, C{True} if this constant is
            defined after or equal to C{other}, otherwise C{False}.
        r$r(s  r�__ge__z_Constant.__ge__fr.rc� �||_||_y)ao
        Complete the initialization of this L{_Constant}.

        @param container: The L{_ConstantsContainer} subclass this constant is
            part of.

        @param name: The name of this constant in its container.

        @param value: The value of this constant; not used, as named constants
            have no value apart from their identity.
        N)rr!)r�	containerr!�values    r�_realizez_Constant._realizexs��$�����	rN)r �
__module__�__qualname__�__doc__rr"r*r-r0r2r6�rrrrs+��	�'�
A�*�$;�$*�$;�$
rrc�"��eZdZdZ�fd�Z�xZS)�_ConstantsContainerTypeza
    L{_ConstantsContainerType} is a metaclass for creating constants container
    classes.
    c����tt|�||||�}t|dd�}|�|Sg}|j	�D]a\}}t||j�s�|j�td|�d|j����|j|j||f��ci}t|�D]0\}	}
}|j|
|�}|j||
|�|||
<�2||_|S)a�
        Create a new constants container class.

        If C{attributes} includes a value of C{None} for the C{"_constantType"}
        key, the new class will not be initialized as a constants container and
        it will behave as a normal class.

        @param name: The name of the container class.
        @type name: L{str}

        @param bases: A tuple of the base classes for the new container class.
        @type bases: L{tuple} of L{_ConstantsContainerType} instances

        @param attributes: The attributes of the new container class, including
            any constants it is to contain.
        @type attributes: L{dict}
        �
_constantTypeNzCannot use z! as the value of an attribute on )�superr<�__new__�getattr�itemsr%r>r�
ValueErrorr �appendr�sorted�_constantFactoryr6�_enumerants)
rr!�bases�
attributes�cls�constantType�	constants�
descriptor�
enumerants�index�	enumerantr5r&s
            �rr@z_ConstantsContainerType.__new__�s���$�+�T�:��$��z�+��
�s�O�T�:�����J��	�",�"2�"2�"4��T�:��*�c�&7�&7�8��(�(�4�$�&����6�7�7�� � �*�"3�"3�T�:�!F�G�
#5��
�.4�Y�.?�*�U�I�z��(�(��J�?�E�����Y��6�$.�J�y�!�/@�%����
r)r r7r8r9r@�
__classcell__)r&s@rr<r<�s����/�/rr<c�J�eZdZdZdZd�Zed��Zed��Zed��Z	y)�_ConstantsContainera�
    L{_ConstantsContainer} is a class with attributes used as symbolic
    constants.  It is up to subclasses to specify what kind of constants are
    allowed.

    @cvar _constantType: Specified by a L{_ConstantsContainer} subclass to
        specify the type of constants allowed by that subclass.

    @cvar _enumerants: A C{dict} mapping the names of constants (eg
        L{NamedConstant} instances) found in the class definition to those
        instances.
    Nc�2�t|j�d���)z�
        Classes representing constants containers are not intended to be
        instantiated.

        The class object itself is used directly.
        z may not be instantiated.)�	TypeErrorr )rJs rr@z_ConstantsContainer.__new__�s������G�H�Hrc��tS)a�
        Construct the value for a new constant to add to this container.

        @param name: The name of the constant to create.

        @param descriptor: An instance of a L{_Constant} subclass (eg
            L{NamedConstant}) which is assigned to C{name}.

        @return: L{NamedConstant} instances have no value apart from identity,
            so return a meaningless dummy value.
        )�_unspecified)rJr!rMs   rrFz$_ConstantsContainer._constantFactory�s
���rc�L�||jvrt||�St|��)a�
        Retrieve a constant by its name or raise a C{ValueError} if there is no
        constant associated with that name.

        @param name: A C{str} giving the name of one of the constants defined
            by C{cls}.

        @raise ValueError: If C{name} is not the name of one of the constants
            defined by C{cls}.

        @return: The L{NamedConstant} associated with C{name}.
        )rGrArC)rJr!s  r�lookupByNamez _ConstantsContainer.lookupByName�s(���3�?�?�"��3��%�%����rc�d�|jj�}tt|d����S)z�
        Iteration over a L{Names} subclass results in all of the constants it
        contains.

        @return: an iterator the elements of which are the L{NamedConstant}
            instances defined in the body of this L{Names} subclass.
        c��|jSr)r)rMs r�<lambda>z3_ConstantsContainer.iterconstants.<locals>.<lambda>s
��Z�5F�5Fr)�key)rG�values�iterrE)rJrLs  r�
iterconstantsz!_ConstantsContainer.iterconstantss0���O�O�*�*�,�	���9�"F�G�I�	Ir)
r r7r8r9r>r@�classmethodrFrYr`r:rrrSrS�sR����M�I���������$�I��IrrS�c��eZdZdZy)ra
    L{NamedConstant} defines an attribute to be a named constant within a
    collection defined by a L{Names} subclass.

    L{NamedConstant} is only for use in the definition of L{Names}
    subclasses.  Do not instantiate L{NamedConstant} elsewhere and do not
    subclass it.
    N)r r7r8r9r:rrrrs��rrc��eZdZdZeZy)rze
    A L{Names} subclass contains constants which differ only in their names and
    identities.
    N)r r7r8r9rr>r:rrrr!s���"�Mrrc��eZdZdZd�Zy)ra
    L{ValueConstant} defines an attribute to be a named constant within a
    collection defined by a L{Values} subclass.

    L{ValueConstant} is only for use in the definition of L{Values} subclasses.
    Do not instantiate L{ValueConstant} elsewhere and do not subclass it.
    c�<�tj|�||_yr�rrr5�rr5s  rrzValueConstant.__init__2������4� ���
rN)r r7r8r9rr:rrrr*s���rrc�$�eZdZdZeZed��Zy)r	za
    A L{Values} subclass contains constants which are associated with arbitrary
    values.
    c�h�|j�D]}|j|k(s�|cSt|��)a�
        Retrieve a constant by its value or raise a C{ValueError} if there is
        no constant associated with that value.

        @param value: The value of one of the constants defined by C{cls}.

        @raise ValueError: If C{value} is not the value of one of the constants
            defined by C{cls}.

        @return: The L{ValueConstant} associated with C{value}.
        )r`r5rC)rJr5�constants   r�
lookupByValuezValues.lookupByValue?s5���)�)�+�H��~�~��&���,����rN)r r7r8r9rr>rarmr:rrr	r	8s ���"�M�� �� rr	c���||j|j�}||j|j�}t�}|j|j||�|S)a�
    Implement a binary operator for a L{FlagConstant} instance.

    @param op: A two-argument callable implementing the binary operation.  For
        example, C{operator.or_}.

    @param left: The left-hand L{FlagConstant} instance.
    @param right: The right-hand L{FlagConstant} instance.

    @return: A new L{FlagConstant} instance representing the result of the
        operation.
    )r5�namesrr6r)�op�left�rightr5ro�results      r�_flagOprtSsL��
�t�z�z�5�;�;�'�E��t�z�z�5�;�;�'�E�
�^�F�
�O�O�D�O�O�U�E�2��Mrc�N�eZdZdZefd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
e
Zy)ra
    L{FlagConstant} defines an attribute to be a flag constant within a
    collection defined by a L{Flags} subclass.

    L{FlagConstant} is only for use in the definition of L{Flags} subclasses.
    Do not instantiate L{FlagConstant} elsewhere and do not subclass it.
    c�<�tj|�||_yrrgrhs  rrzFlagConstant.__init__prirc���t|t�r|}t|g�}n3t|�dk(r|\}n ddj	t|��zdz}tj||||�||_||_	y)aR
        Complete the initialization of this L{FlagConstant}.

        This implementation differs from other C{_realize} implementations in
        that a L{FlagConstant} may have several names which apply to it, due to
        flags being combined with various operators.

        @param container: The L{Flags} subclass this constant is part of.

        @param names: When a single-flag value is being initialized, a C{str}
            giving the name of that flag.  This is the case which happens when
            a L{Flags} subclass is being initialized and L{FlagConstant}
            instances from its body are being realized.  Otherwise, a C{set} of
            C{str} giving names of all the flags set on this L{FlagConstant}
            instance.  This is the case when two flags are combined using C{|},
            for example.
        ��{�,�}N)
r%�str�set�len�joinrErr6r5ro)rr4ror5r!s     rr6zFlagConstant._realizeusn��$�e�S�!��D����L�E�
��Z�1�_��G�T�����&��-�0�0�3�6�D����4��D�%�8���
���
rc�$�tt||�S)z�
        Define C{|} on two L{FlagConstant} instances to create a new
        L{FlagConstant} instance with all flags set in either instance set.
        )rtrr(s  r�__or__zFlagConstant.__or__�s��
�s�D�%�(�(rc�$�tt||�S)z�
        Define C{&} on two L{FlagConstant} instances to create a new
        L{FlagConstant} instance with only flags set in both instances set.
        )rtr
r(s  r�__and__zFlagConstant.__and__�s��
�t�T�5�)�)rc�$�tt||�S)z�
        Define C{^} on two L{FlagConstant} instances to create a new
        L{FlagConstant} instance with only flags set on exactly one instance
        set.
        )rtrr(s  r�__xor__zFlagConstant.__xor__�s���s�D�%�(�(rc���t�}|j|jt�d�|jj	�D]$}|j
|j
zdk(s� ||z}�&|S)z�
        Define C{~} on a L{FlagConstant} instance to create a new
        L{FlagConstant} instance with all flags not set on this instance set.
        r)rr6rr}r`r5)rrs�flags   r�
__invert__zFlagConstant.__invert__�s]��
������������2��O�O�1�1�3�D��z�z�D�J�J�&�!�+��$���4��
rc�.���fd��jD�S)zI
        @return: An iterator of flags set on this instance set.
        c3�T�K�|]}�jj|����!y�wr)rrY)�.0r!rs  �r�	<genexpr>z(FlagConstant.__iter__.<locals>.<genexpr>�s!�����J�z�t����,�,�T�2�z�s�%()rors`r�__iter__zFlagConstant.__iter__�s���K�t�z�z�J�Jrc��t||z�S)z�
        @param flag: The flag to test for membership in this instance
            set.

        @return: C{True} if C{flag} is in this instance set, else
            C{False}.
        )�bool)rr�s  r�__contains__zFlagConstant.__contains__�s���D�4�K� � rc�,�t|j�S)zL
        @return: C{False} if this flag's value is 0, else C{True}.
        )r�r5rs r�__nonzero__zFlagConstant.__nonzero__�s���D�J�J��rN)r r7r8r9rWrr6r�r�r�r�r�r�r��__bool__r:rrrrhsA���*��
�<)�*�)�
�K�	!� �
�Hrrc�(�eZdZdZeZdZed��Zy)r
z�
    A L{Flags} subclass contains constants which can be combined using the
    common bitwise operators (C{|}, C{&}, etc) similar to a I{bitvector} from a
    language like C.
    rxc��|jtur#|j}|xjdzc_|S|j}|dz|_|S)a

        For L{FlagConstant} instances with no explicitly defined value, assign
        the next power of two as its value.

        @param name: The name of the constant to create.

        @param descriptor: An instance of a L{FlagConstant} which is assigned
            to C{name}.

        @return: Either the value passed to the C{descriptor} constructor, or
            the next power of 2 value which will be assigned to C{descriptor},
            relative to the value of the last defined L{FlagConstant}.
        rx)r5rW�_value)rJr!rMr5s    rrFzFlags._constantFactory�sM�����|�+��J�J�E��J�J�1��J����$�$�E��!��C�J��rN)	r r7r8r9rr>r�rarFr:rrr
r
�s%���
!�M�
�F����rr
N)r9�
__future__rr�__all__�	functoolsr�	itertoolsr�operatorr
rr�objectrW�nextrr�typer<rSrrrr	rtrr
r:rr�<module>r�s���
�
1� ����#�#��x����u�w�'��m��m�b4�d�4�~II�1�"�v�i��D�II�Z�I��"��"�
�I�
� �
 � �6�*i�9�i�Z�F�r