
    ev                         d Z ddlZddlZddlZddlmZ ddlZddlmZ ddl	m
Z
 ddlmZ  G d de
      Z G d	 d
e
      Z G d de
      Z G d de
      Z G d de
      Zy)zJinja2 extensions.    Nchoice)nodes)	Extension)slugifyc                   "     e Zd ZdZ fdZ xZS )JsonifyExtensionz4Jinja2 extension to convert a Python object to JSON.c                 H    t         |   |       d }||j                  d<   y)z4Initialize the extension with the given environment.c                 2    t        j                  | dd      S )NT   )	sort_keysindent)jsondumps)objs    7lib/python3.12/site-packages/cookiecutter/extensions.pyjsonifyz*JsonifyExtension.__init__.<locals>.jsonify   s    ::cT!<<    r   Nsuper__init__filters)selfenvironmentr   	__class__s      r   r   zJsonifyExtension.__init__   s'    %	= *1I&r   __name__
__module____qualname____doc__r   __classcell__r   s   @r   r	   r	      s    >1 1r   r	   c                   "     e Zd ZdZ fdZ xZS )RandomStringExtensionz+Jinja2 extension to create a random string.c                 d    t         |   |       dd}|j                  j                  |       y)zJinja2 Extension Constructor.c                     |r0dj                  t        j                  t        j                  f      nt        j                  dj                  fdt	        |       D              S )N c              3   4   K   | ]  }t                y wNr   ).0_corpuss     r   	<genexpr>zNRandomStringExtension.__init__.<locals>.random_ascii_string.<locals>.<genexpr>'   s     Aa6&>As   )joinstringascii_letterspunctuationrange)lengthr1   r,   s     @r   random_ascii_stringz;RandomStringExtension.__init__.<locals>.random_ascii_string"   sI    &"6"68J8J!KL--77A5=AAAr   )r4   N)Fr   r   globalsupdate)r   r   r4   r   s      r   r   zRandomStringExtension.__init__   s0    %	B 	""7J"Kr   r   r"   s   @r   r$   r$      s    5L Lr   r$   c                   "     e Zd ZdZ fdZ xZS )SlugifyExtensionz#Jinja2 Extension to slugify string.c                 H    t         |   |       d }||j                  d<   y)Jinja2 Extension constructor.c                     t        | fi |S )zSlugifies the value.)	pyslugify)valuekwargss     r   r   z*SlugifyExtension.__init__.<locals>.slugify3   s    U-f--r   r   Nr   )r   r   r   r   s      r   r   zSlugifyExtension.__init__/   s'    %	. *1I&r   r   r"   s   @r   r9   r9   ,   s    -1 1r   r9   c                   "     e Zd ZdZ fdZ xZS )UUIDExtensionz*Jinja2 Extension to generate uuid4 string.c                 b    t         |   |       d }|j                  j                  |       y)r;   c                  <    t        t        j                               S )zGenerate UUID4.)struuiduuid4 r   r   rF   z%UUIDExtension.__init__.<locals>.uuid4A   s    tzz|$$r   )rF   Nr5   )r   r   rF   r   s      r   r   zUUIDExtension.__init__=   s.    %	% 	"""/r   r   r"   s   @r   rA   rA   :   s    40 0r   rA   c                   :     e Zd ZdZdhZ fdZd Zd Zd Z xZ	S )TimeExtensionz%Jinja2 Extension for dates and times.nowc                 H    t         |   |       |j                  d       y)r;   z%Y-%m-%d)datetime_formatN)r   r   extend)r   r   r   s     r   r   zTimeExtension.__init__M   s!    %:6r   c                 T   t        j                  |      }i }|j                  d      D ]C  }|j                  d      \  }}	t        ||	j	                         z         ||j	                         <   E  |j
                  di |}|| j                  j                  }|j                  |      S )N,=rG   )	arrowrJ   splitfloatstripshiftr   rL   strftime)
r   timezoneoperatoroffsetrL   dshift_paramsparamintervalr>   s
             r   	_datetimezTimeExtension._datetimeS   s    IIh \\#& 	ME#kk#.OHe-28ekkm3K-LL)*	M AGG#l#""..>>Ozz/**r   c                 z    || j                   j                  }t        j                  |      j	                  |      S r)   )r   rL   rQ   rJ   rV   )r   rW   rL   s      r   _nowzTimeExtension._nowa   s3    ""..>>Oyy"++O<<r   c                    t        |j                        j                  }|j                         }|j                  j	                  d      r|j                         }nt        j                  d      }t        |t
        j                        r@| j                  d|j                  t        j                  d      |j                  |g|      }npt        |t
        j                        r@| j                  d|j                  t        j                  d      |j                  |g|      }n| j                  d||g|      }t        j                  |g|      S )z/Parse datetime template and add datetime value.commaNr^   +)lineno-r`   )nextstreamrd   parse_expressionskip_ifr   Const
isinstanceAddcall_methodleftrightSubOutput)r   parserrd   noderL   rm   s         r   parsezTimeExtension.parsef   s   fmm$++&&(==  )$557O#kk$/OdEII&**EKK,djj/J + K
 eii(**EKK,djj/J + K **' + K
 ||[M&99r   )
r   r   r   r    tagsr   r^   r`   rt   r!   r"   s   @r   rI   rI   H   s!    /7D7+=
:r   rI   )r    r   r/   rE   secretsr   rQ   jinja2r   
jinja2.extr   r   r=   r	   r$   r9   rA   rI   rG   r   r   <module>ry      s^             (
1y 
1LI L"1y 10I 0;:I ;:r   