
    ?wg              	           d Z  G d de      Z e       Z G d de      Z G d de      Z G d d ed	efi             Zy
)z:Who hasn't needed a good, old-fashioned enum now and then?c                   *    e Zd Zd Zd Zd Zd Zd Zy)_enumc                     |r|rt        d      i }d}|j                         D ])  \  }}||}|dz  }nt        |t              r|dz   }|||<   + t	        ||      D ]
  \  }}|||<    t        |t        f|      S )Nz+enums can only be made from args XOR kwargs       )start)	TypeErroritems
isinstanceint	enumeratetypeEnum)self	enum_nameargskwargs
enum_itemscounternamevals           A/var/www/horilla/myenv/lib/python3.12/site-packages/utils/enum.py__call__z_enum.__call__   s    FIJJ
 	#ID#{1C%'"Jt	# #4w7 	#IC"Jt	# Iw
33    c                      | | S N )r   iterables     r   from_iterablez_enum.from_iterable   s    Xr   c                      | di |S )Nr   r   )r   dcts     r   	from_dictz_enum.from_dict   s    {c{r   c              #   \   K   | j                   j                         D ]  \  }}||f  y wr   )_enum__enum_itemsr	   )r   kvs      r   __iter__z_enum.__iter__!   s1     %%++- 	DAqQ$J	s   *,c                 ~    dj                  | j                  j                  | j                  j	                               S )Nz<{}: {}>)format	__class____name__r#   valuesr   s    r   __repr__z_enum.__repr__%   s.      !8!8$:K:K:R:R:TUUr   N)r*   
__module____qualname__r   r   r!   r&   r-   r   r   r   r   r      s    4*Vr   r   c                   N    e Zd Zd Zd Zd Zed        Zed        Zed        Z	y)EnumItemc                 .    || _         || _        || _        y r   )_EnumItem__parent_EnumItem__name_EnumItem__value)r   parentr   values       r   __init__zEnumItem.__init__,   s    r   c                 x    dj                  | j                  j                  | j                  | j                        S )Nz<{}: {} [{}]>)r(   r)   r*   r   r7   r,   s    r   r-   zEnumItem.__repr__1   s)    %%dnn&=&=tyy$**UUr   c                     t        || j                        rS| j                  j                  r$| j                  |j                  k7  rt	        d      | j
                  |j
                  k(  S | j
                  |k(  S )Nz,can't compare EnumItems from different enums)r
   r)   r6   	is_strict
ValueErrorr7   )r   others     r   __eq__zEnumItem.__eq__4   sZ    eT^^,{{$$)D !OPP::,,zzU""r   c                     | j                   S r   )r5   r,   s    r   r7   zEnumItem.value<   s    ||r   c                     | j                   S r   )r4   r,   s    r   r   zEnumItem.name@   s    {{r   c                     | j                   S r   )r3   r,   s    r   r6   zEnumItem.parentD   s    }}r   N)
r*   r.   r/   r8   r-   r>   propertyr7   r   r6   r   r   r   r1   r1   *   sN    
V#      r   r1   c                   >     e Zd Z fdZ fdZed        Zd Z xZS )	_EnumMetac                    |j                  dt              }t        |dd      |d<   t        t        |   | ||i       }i }|j                         D ]  \  }}|j                  d      rt        t        | #  |||       -t        |dd      r!|j                  |       |j                         }t        |||      }	|	||<   t        t        | #  |||	        t        |dd      rt        t        | #  |d	d       nt        t        | #  |d	d       t        |d
d      rt        t        | #  |dd       nt        t        | #  |dd       t        t        | #  |d|       |S )NOptionsstrict_compareT
__strict____force_uppercaseFfrozen
__frozen__strict__enum_item_map__)popobjectgetattrsuperrD   __new__r	   
startswith__setattr__upperr1   )clsr   bases	attr_dictoptionsnew_enumr   	attr_name
attr_value	enum_itemr)   s             r   rS   z_EnumMeta.__new__J   sS   --	62")'3CT"J	,C0dE2F
%.__%6 	N!Iz##D)i1(IzRw 159i(%OO-	 9jAI$-Jy!)S-h	9M	N 7Hd+)S-hdK)S-heL7He,)S-hdK)S-heLi)(4GTr   c                     t        | dd      rt        d      || j                  v rt        | ||      }|| j                  |<   t        t
        |   ||       y )NrL   Fz%can't set attributes on a frozen enum)rQ   r   rN   r1   rR   rD   rU   )rW   r   r   r)   s      r   rU   z_EnumMeta.__setattr__p   sX    3e,CDD3(((Cs+C*-C!!$'i)$4r   c                     t        | dd      S )NrH   T)rQ   )rW   s    r   r;   z_EnumMeta.is_strictz   s    sL$//r   c                 D    | j                   t        fdD              S )Nc              3   Z   K   | ]"  }|   j                   |   j                  f $ y wr   )r   r7   ).0ies     r   	<genexpr>z/_EnumMeta.get_name_value_map.<locals>.<genexpr>   s&     7QqTYY!

+7s   (+)rN   dict)rW   re   s    @r   get_name_value_mapz_EnumMeta.get_name_value_map~   s    !!7Q777r   )	r*   r.   r/   rS   rU   rB   r;   rh   __classcell__)r)   s   @r   rD   rD   I   s'    $L5 0 08r   rD   c                       e Zd Zy)r   N)r*   r.   r/   r   r   r   r   r      s    r   r   EnumBaseN)__doc__rP   r   enumr1   r   rD   r   r   r   r   <module>rn      sP    @"VF "VF wv >78 78t	9Z&R0 	r   