o
    ˷e                     @   sR   d dl Z e eZg dZG dd deZdddZddd	Zd
d Z	dd Z
dS )    N)seqToKVkvToSeqdictToKVkvToDictc                   @   s   e Zd ZdS )KVFormErrorN)__name__
__module____qualname__ r
   r
   D/var/www/ideatree/venv/lib/python3.10/site-packages/openid/kvform.pyr      s    r   Fc                    s&   fdd}g } D ]\}}t |tr|d}nt |ts)|d|  t|}d|v r4td|f d|v r?td|f | |krL|d	|f  t |trW|d}nt |tsg|d
|f  t|}d|v rrtd|f | |kr|d|f  ||d | d  qd|dS )a  Represent a sequence of pairs of strings as newline-terminated
    key:value pairs. The pairs are generated in the order given.

    @param seq: The pairs
    @type seq: [(str, (unicode|str))]

    @return: A string representation of the sequence
    @rtype: bytes
    c                    &   d|  f }rt |t| d S )NzseqToKV warning: %s: %rr   loggerwarningmsg	formattedseqstrictr
   r   err      zseqToKV.<locals>.errutf-8zConverting key to string: %r
z3Invalid input for seqToKV: key contains newline: %r:z1Invalid input for seqToKV: key contains colon: %rz*Key has whitespace at beginning or end: %rzConverting value to string: %rz5Invalid input for seqToKV: value contains newline: %rz,Value has whitespace at beginning or end: %r )	
isinstancebytesdecodestrr   stripappendjoinencode)r   r   r   lineskvr
   r   r   r      sB   



r   c                    s   fdd}t  tr d  d}|d r|d n|d= g }d}|D ]V}|d7 }| s3q(|d	d}t|d
krx|\}}	| }
|
|krUd}||||f  |
s^|d|f  |	 }||	krpd}||||	f  ||
|f q(|d|  q(|S )z

    After one parse, seqToKV and kvToSeq are inverses, with no warnings::

        seq = kvToSeq(s)
        seqToKV(kvToSeq(seq)) == seq

    @return str
    c                    r   )NzkvToSeq warning: %s: %rr   r   datar   r
   r   r   O   r   zkvToSeq.<locals>.errr   r   zDoes not end in a newliner      r      z=In line %d, ignoring leading or trailing whitespace in key %rzIn line %d, got empty keyz?In line %d, ignoring leading or trailing whitespace in value %rz Line %d does not contain a colon)r   r   r   splitr    lenr!   )r(   r   r   r$   pairsline_numlinepairr%   r&   k_sfmtv_sr
   r'   r   r   D   s:   



r   c                 C   s   t t|  S N)r   sorteditems)dr
   r
   r   r      s   r   c                 C   s   t t| S r5   )dictr   )sr
   r
   r   r      s   r   )F)logging	getLoggerr   r   __all__
ValueErrorr   r   r   r   r   r
   r
   r
   r   <module>   s    


8=