o
    gu
                     @   s   d Z ddlZddlmZmZmZ ddlmZ ddlm	Z	m
Z
 edddd	d
ddddZedddZG dd deZdede	de	defddZde	defddZdede
eef defddZdS ) z6 Formatting helpers that perform quoting and escaping     N)datedatetimetimezone)	Formatter)AnyUnionz\\z\'z\"z\nz\rz\tz\bz\f)\'"
	z\%z\_)%_c                       s.   e Zd ZdZdededef fddZ  ZS )SoqlFormatterz? Custom formatter to apply quoting or the :literal format spec valueformat_specreturnc                    sB   |st |S |dkr|S |dkrt|ttS t ||S )Nliterallike)quote_soql_valuestr	translatesoql_escapessoql_like_escapessuperformat_field)selfr   r   	__class__ Q/home/ubuntu/webapp/venv/lib/python3.10/site-packages/simple_salesforce/format.pyr      s   zSoqlFormatter.format_field)__name__
__module____qualname____doc__r   r   r   __classcell__r"   r"   r    r#   r      s    "r   queryargskwargsr   c                 O   s   t  | ||S )z4 Insert values quoted for SOQL into a format string )r   vformat)r)   r*   r+   r"   r"   r#   format_soql+   s   r-   r   c                 C   s   t | trd| t d S | du rdS | du rdS | du r dS t | ttfr+t| S t | tttfrCdd	 | D }d
d	| d S t | t
rY| jdd} | jtjd} |  S t | trb|  S td)z] Quote/escape either an individual value or a list of values
    for a SOQL value expression r	   TtrueFfalseNnullc                 S   s   g | ]}t |qS r"   )r   ).0memberr"   r"   r#   
<listcomp>?   s    z$quote_soql_value.<locals>.<listcomp>(,)r   )microsecond)tzzunquotable value type)
isinstancer   r   r   intfloatlistsettuplejoinr   replace
astimezoner   utc	isoformatr   
ValueError)r   quoted_itemsr"   r"   r#   r   1   s(   


r   fieldc                 C   s   | d t jj|dd S )z= Create an external ID string for use with get() or upsert() / )safe)urllibparsequote)rF   r   r"   r"   r#   format_external_idL   s   rM   )r'   urllib.parserJ   r   r   r   stringr   typingr   r   r   	maketransr   r   r   r-   r   bytesrM   r"   r"   r"   r#   <module>   s.    "