o
    ˳i5                     @  sh  d dl mZ d dlmZmZmZmZmZmZm	Z	 d dl
mZmZmZmZmZ d dlmZ d dlmZ d dlmZ ddlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z" dd	l#m$Z$m%Z%m&Z& dd
l'm(Z(m)Z) ddl*m+Z+ ee Z,G dd dZ-G dd dZ.G dd dZ/G dd dZ0G dd dee e-Z1G dd dee.Z2G dd de-ee Z3G dd dZ4dS )    )annotations)AnyGenericLiteralOptionalTypeVarUnionoverload)AsyncClient	BasicAuthHeadersQueryParamsResponse)ValidationError)override)URL   )APIResponseBaseFilterRequestBuilderBaseRPCRequestBuilderBaseSelectRequestBuilderCountMethodRequestConfigSingleAPIResponse
pre_delete
pre_insert
pre_select
pre_update
pre_upsert)APIErrorAPIErrorFromJSONgenerate_default_error_message)JSONReturnMethod)model_validate_jsonc                   @      e Zd Zd
ddZdddZd	S )AsyncQueryRequestBuilderrequest	ReqConfigc                 C  
   || _ d S Nr'   selfr'    r.   T/home/ubuntu/.local/lib/python3.10/site-packages/postgrest/_async/request_builder.py__init__       
z!AsyncQueryRequestBuilder.__init__returnr   c              
     sb   | j  I dH }z|jrt|W S tt|j}tt	| t
y0 } ztt|d}~ww )zExecute the query.

        .. tip::
            This is the last method called, after the query is built.

        Returns:
            :class:`APIResponse`

        Raises:
            :class:`APIError` If the API raised an error.
        N)r'   send
is_successr   from_http_request_responser$   r    contentr   dictr   r!   r-   rjson_objer.   r.   r/   execute#   s   z AsyncQueryRequestBuilder.executeNr'   r(   )r2   r   __name__
__module____qualname__r0   r<   r.   r.   r.   r/   r&          
r&   c                   @  r%   )AsyncSingleRequestBuilderr'   r(   c                 C  r)   r*   r+   r,   r.   r.   r/   r0   ;   r1   z"AsyncSingleRequestBuilder.__init__r2   r   c              
     sv   | j  I dH }zd|j  krdkrn nt|W S tt|j}tt	| t
y: } ztt|d}~ww )a1  Execute the query.

                .. tip::
                    This is the last method called, after the query is built.

                Returns:
                    :class:`SingleAPIResponse`
        na
                Raises:
                    :class:`APIError` If the API raised an error.
        N   i+  )r'   r3   status_coder   r5   r$   r    r6   r   r7   r   r!   r8   r.   r.   r/   r<   >   s   z!AsyncSingleRequestBuilder.executeNr=   )r2   r   r>   r.   r.   r.   r/   rC   :   rB   rC   c                   @  r%   )AsyncExplainRequestBuilderr'   r(   c                 C  r)   r*   r+   r,   r.   r.   r/   r0   X   r1   z#AsyncExplainRequestBuilder.__init__r2   strc              
     s^   | j  I d H }z|jr|jW S tt|j}tt| t	y. } ztt
|d }~ww r*   )r'   r3   r4   textr$   r    r6   r   r7   r   r!   r8   r.   r.   r/   r<   [   s   z"AsyncExplainRequestBuilder.executeNr=   )r2   rG   r>   r.   r.   r.   r/   rF   W   rB   rF   c                   @  r%   )AsyncMaybeSingleRequestBuilderr'   r(   c                 C  r)   r*   r+   r,   r.   r.   r/   r0   h   r1   z'AsyncMaybeSingleRequestBuilder.__init__r2   Optional[SingleAPIResponse]c              
     s|   d }zt | j I d H }W n! ty0 } z|jr&d|jv r&W Y d }~d S W Y d }~nd }~ww |s<tddddd|S )NzThe result contains 0 rowszMissing response204z"Please check traceback of the codezPostgrest couldn't retrieve response, please check traceback of the code. Please create an issue in `supabase-community/postgrest-py` if needed.)messagecodehintdetails)rC   r'   r<   r   rO   )r-   r9   r;   r.   r.   r/   r<   k   s$   z&AsyncMaybeSingleRequestBuilder.executeNr=   )r2   rJ   r>   r.   r.   r.   r/   rI   g   rB   rI   c                   @     e Zd ZdddZdS )	AsyncFilterRequestBuilderr'   r(   r2   Nonec                 C     t | | t| | d S r*   )r   r0   r&   r,   r.   r.   r/   r0         z"AsyncFilterRequestBuilder.__init__Nr'   r(   r2   rR   r?   r@   rA   r0   r.   r.   r.   r/   rQ   ~   s    rQ   c                   @  rP   )	AsyncRPCFilterRequestBuilderr'   r(   r2   rR   c                 C  rS   r*   )r   r0   rC   r,   r.   r.   r/   r0      rT   z%AsyncRPCFilterRequestBuilder.__init__NrU   rV   r.   r.   r.   r/   rW      s    rW   c                   @  s   e Zd Zd*ddZd+dd	Zd,ddZi fd-ddZd+ddZe						d.d/d"d#Z	e					d0d1d%d#Z							d.d2d(d#Z	d)S )3AsyncSelectRequestBuilderr'   r(   r2   rR   c                 C  rS   r*   )r   r0   r&   r,   r.   r.   r/   r0      rT   z"AsyncSelectRequestBuilder.__init__rC   c                 C     d| j jd< t| j S )zSpecify that the query will only return a single row in response.

        .. caution::
            The API will raise an error if the query returned more than one row.
        !application/vnd.pgrst.object+jsonAcceptr'   headersrC   r-   r.   r.   r/   single   s   
z AsyncSelectRequestBuilder.singlerI   c                 C  rY   )zRetrieves at most one row from the result. Result must be at most one row (e.g. using `eq` on a UNIQUE column), otherwise this will result in an error.rZ   r[   )r'   r]   rI   r^   r.   r.   r/   maybe_single      
z&AsyncSelectRequestBuilder.maybe_singlecolumnrG   queryoptionsdict[str, Any]r&   c                 C  s   | d}d}|dkrd}n|dkrd}n|dkrd}| d	r)d
| d	 dnd}| jj|| d| d| | j_t| jS )Ntype plainplphraseph
web_searchwconfig()fts.)getr'   paramsaddr&   )r-   rb   rc   rd   type_	type_partconfig_partr.   r.   r/   text_search   s   
 
z%AsyncSelectRequestBuilder.text_searchc                 C  rY   )zASpecify that the query must retrieve data as a single CSV string.ztext/csvr[   r\   r^   r.   r.   r/   csv   ra   zAsyncSelectRequestBuilder.csvFrH   analyzeboolverbosesettingsbufferswalformatLiteral['text']rF   c                 C     d S r*   r.   r-   r{   r}   r~   r   r   r   r.   r.   r/   explain   s   	z!AsyncSelectRequestBuilder.explainLiteral['json']c                C  r   r*   r.   r   r.   r.   r/   r      s   
Literal['text', 'json']6AsyncExplainRequestBuilder | AsyncSingleRequestBuilderc           	      C  sR   dd t   D }d|}d| d| | jjd< |dkr$t| jS t| jS )Nc                 S  s    g | ]\}}|d vr|r|qS ))r-   r   r.   ).0keyvaluer.   r.   r/   
<listcomp>   s
    z5AsyncSelectRequestBuilder.explain.<locals>.<listcomp>|zapplication/vnd.pgrst.plan+z
; options=r[   rH   )localsitemsjoinr'   r]   rF   rC   )	r-   r{   r}   r~   r   r   r   rd   options_strr.   r.   r/   r      s   	



NrU   )r2   rC   )r2   rI   )rb   rG   rc   rG   rd   re   r2   r&   )FFFFFrH   )r{   r|   r}   r|   r~   r|   r   r|   r   r|   r   r   r2   rF   )FFFFF)r{   r|   r}   r|   r~   r|   r   r|   r   r|   r   r   r2   rC   )r{   r|   r}   r|   r~   r|   r   r|   r   r|   r   r   r2   r   )
r?   r@   rA   r0   r_   r`   ry   rz   r	   r   r.   r.   r.   r/   rX      s:    


	

rX   c                   @  s   e Zd Zd1ddZdddd2ddZdejdddd3d#d$Zdejdd%dd&d4d)d*Zdejd+d5d-d.Z	dejd+d6d/d0Z
dS )7AsyncRequestBuildersessionr
   pathr   r]   r   authBasicAuth | Noner2   rR   c                 C  s   || _ || _|| _|| _d S r*   )r   r   r]   r   )r-   r   r   r]   r   r.   r.   r/   r0      s   
zAsyncRequestBuilder.__init__NcountheadcolumnsrG   r   Optional[CountMethod]r   Optional[bool]rX   c          	   	   G  sH   t |||d\}}}}|| j t| j| j| j||||d}t|S )zRun a SELECT query.

        Args:
            *columns: The names of the columns to fetch.
            count: The method to use to get the count of rows returned.
        Returns:
            :class:`AsyncSelectRequestBuilder`
        r   r   r   r   rt   http_methodr]   json)r   updater]   r   r   r   r   rX   )	r-   r   r   r   methodrt   r]   r   r'   r.   r.   r/   select   s   	zAsyncRequestBuilder.selectFTr   	returningupsertdefault_to_nullr   r"   r   r#   r   r|   r   r&   c          
   	   C  sJ   t |||||d\}}}}|| j t| j| j| j||||d}	t|	S )a  Run an INSERT query.

        Args:
            json: The row to be inserted.
            count: The method to use to get the count of rows returned.
            returning: Either 'minimal' or 'representation'
            upsert: Whether the query should be an upsert.
            default_to_null: Make missing fields default to `null`.
                Otherwise, use the default value for the column.
                Only applies for bulk inserts.
        Returns:
            :class:`AsyncQueryRequestBuilder`
        r   r   )r   r   r]   r   r   r   r   r&   )
r-   r   r   r   r   r   r   rt   r]   r'   r.   r.   r/   insert  s$   	zAsyncRequestBuilder.insertrg   r   r   ignore_duplicateson_conflictr   r   r   c             	   C  sL   t ||||||d\}}}	}|	| j t| j| j| j|||	|d}
t|
S )a   Run an upsert (INSERT ... ON CONFLICT DO UPDATE) query.

        Args:
            json: The row to be inserted.
            count: The method to use to get the count of rows returned.
            returning: Either 'minimal' or 'representation'
            ignore_duplicates: Whether duplicate rows should be ignored.
            on_conflict: Specified columns to be made to work with UNIQUE constraint.
            default_to_null: Make missing fields default to `null`. Otherwise, use the
                default value for the column. This only applies when inserting new rows,
                not when merging with existing rows under `ignoreDuplicates: false`.
                This also only applies when doing bulk upserts.
        Returns:
            :class:`AsyncQueryRequestBuilder`
        r   r   )r   r   r]   r   r   r   r   r&   )r-   r   r   r   r   r   r   r   rt   r]   r'   r.   r.   r/   r   4  s&   	zAsyncRequestBuilder.upsertr   r   rQ   c             	   C  sF   t |||d\}}}}|| j t| j| j| j||||d}t|S )a  Run an UPDATE query.

        Args:
            json: The updated fields.
            count: The method to use to get the count of rows returned.
            returning: Either 'minimal' or 'representation'
        Returns:
            :class:`AsyncFilterRequestBuilder`
        r   r   )r   r   r]   r   r   r   r   rQ   )r-   r   r   r   r   rt   r]   r'   r.   r.   r/   r   a  s    	zAsyncRequestBuilder.updatec             	   C  sD   t ||d\}}}}|| j t| j| j| j||||d}t|S )zRun a DELETE query.

        Args:
            count: The method to use to get the count of rows returned.
            returning: Either 'minimal' or 'representation'
        Returns:
            :class:`AsyncFilterRequestBuilder`
        r   r   )r   r   r]   r   r   r   r   rQ   )r-   r   r   r   rt   r]   r   r'   r.   r.   r/   delete  s   	zAsyncRequestBuilder.delete)
r   r
   r   r   r]   r   r   r   r2   rR   )r   rG   r   r   r   r   r2   rX   )r   r"   r   r   r   r#   r   r|   r   r|   r2   r&   )r   r"   r   r   r   r#   r   r|   r   rG   r   r|   r2   r&   )r   r"   r   r   r   r#   r2   rQ   )r   r   r   r#   r2   rQ   )r?   r@   rA   r0   r   r#   representationr   r   r   r   r.   r.   r.   r/   r      s,    
-1$r   N)5
__future__r   typingr   r   r   r   r   r   r	   httpxr
   r   r   r   r   pydanticr   typing_extensionsr   yarlr   base_request_builderr   r   r   r   r   r   r   r   r   r   r   r   
exceptionsr   r    r!   typesr"   r#   utilsr$   r(   r&   rC   rF   rI   rQ   rW   rX   r   r.   r.   r.   r/   <module>   s.    $8

[