o
    /hC7                     @  sZ  d dl mZ d dlmZ d dlmZmZmZmZm	Z	 d dl
mZ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 ddlmZmZ dd	lmZ dd
l m!Z!m"Z" edZ#G dd dee# Z$G dd dee# Z%G dd de%e# Z&G dd dee# e$e# Z'G dd dee# e%e# Z(G dd dee# e$e# Z)G dd dee# Z*dS )    )annotations)JSONDecodeError)AnyGenericOptionalTypeVarUnion)HeadersQueryParams)ValidationError   )APIResponseBaseFilterRequestBuilderBaseRPCRequestBuilderBaseSelectRequestBuilderCountMethodSingleAPIResponse
pre_delete
pre_insert
pre_select
pre_update
pre_upsert)APIErrorgenerate_default_error_message)ReturnMethod)AsyncClientget_origin_and_cast_ReturnTc                   @      e Zd ZdddZdddZdS )AsyncQueryRequestBuildersessionr   pathstrhttp_methodheadersr	   paramsr
   jsondictreturnNonec                 C  (   || _ || _|| _|| _|| _|| _d S Nr    r!   r#   r$   r%   r&   selfr    r!   r#   r$   r%   r&    r/   Y/var/www/html/govbot/env/lib/python3.10/site-packages/postgrest/_async/request_builder.py__init__      	
z!AsyncQueryRequestBuilder.__init__APIResponse[_ReturnT]c              
     s   | j j| j| j| j| j| jdI dH }z=|jrL| jdkrD|j}| j	ddkr+|W S | j	drDd| j	dv rDd| j	dvrD|W S t
t |W S t|  tyd } zt| |d}~w typ   tt|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.
        r&   r%   r$   NHEADAccepttext/csvzapplication/vnd.pgrst.planz+json)r    requestr#   r!   r&   r%   r$   
is_successtextgetr   r   from_http_request_responser   r   r   r   )r.   rbodyer/   r/   r0   execute.   s8   
z AsyncQueryRequestBuilder.executeNr    r   r!   r"   r#   r"   r$   r	   r%   r
   r&   r'   r(   r)   )r(   r3   __name__
__module____qualname__r1   r@   r/   r/   r/   r0   r          
r   c                   @  r   )AsyncSingleRequestBuilderr    r   r!   r"   r#   r$   r	   r%   r
   r&   r'   r(   r)   c                 C  r*   r+   r,   r-   r/   r/   r0   r1   V   r2   z"AsyncSingleRequestBuilder.__init__SingleAPIResponse[_ReturnT]c              
     s   | j j| j| j| j| j| jdI dH }zd|j  kr dkr*n ntt	 
|W S t|  tyB } zt| |d}~w tyN   tt|w )zExecute the query.

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

        Returns:
            :class:`SingleAPIResponse`

        Raises:
            :class:`APIError` If the API raised an error.
        r4   N   i+  )r    r8   r#   r!   r&   r%   r$   status_coder   r   r<   r   r   r   r   r.   r=   r?   r/   r/   r0   r@   f   s$   z!AsyncSingleRequestBuilder.executeNrA   )r(   rH   rB   r/   r/   r/   r0   rG   U   rF   rG   c                   @  s   e Zd ZdddZdS )AsyncMaybeSingleRequestBuilderr(   %Optional[SingleAPIResponse[_ReturnT]]c              
     s|   d }zt t | 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)rG   r   r@   r   rR   rK   r/   r/   r0   r@      s$   z&AsyncMaybeSingleRequestBuilder.executeN)r(   rM   )rC   rD   rE   r@   r/   r/   r/   r0   rL          rL   c                   @     e Zd ZdddZdS )AsyncFilterRequestBuilderr    r   r!   r"   r#   r$   r	   r%   r
   r&   r'   r(   r)   c              	   C  :   t tt | ||| t tt | |||||| d S r+   )r   r   r   r1   r   r-   r/   r/   r0   r1         	z"AsyncFilterRequestBuilder.__init__NrA   rC   rD   rE   r1   r/   r/   r/   r0   rU      rS   rU   c                   @  rT   )AsyncRPCFilterRequestBuilderr    r   r!   r"   r#   r$   r	   r%   r
   r&   r'   r(   r)   c              	   C  rV   r+   )r   r   r   r1   rG   r-   r/   r/   r0   r1      rW   z%AsyncRPCFilterRequestBuilder.__init__NrA   rX   r/   r/   r/   r0   rY      s    rY   c                   @  sB   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d S )&AsyncSelectRequestBuilderr    r   r!   r"   r#   r$   r	   r%   r
   r&   r'   r(   r)   c              	   C  rV   r+   )r   r   r   r1   r   r-   r/   r/   r0   r1      rW   z"AsyncSelectRequestBuilder.__init__#AsyncSingleRequestBuilder[_ReturnT]c                 C  .   d| j d< tt | j | j| j| j| j| jd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+jsonr6   r$   r#   r&   r%   r!   r    )r$   rG   r   r#   r&   r%   r!   r    r.   r/   r/   r0   single   s   
z AsyncSelectRequestBuilder.single(AsyncMaybeSingleRequestBuilder[_ReturnT]c                 C  r\   )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.r]   r6   r^   )r$   rL   r   r#   r&   r%   r!   r    r_   r/   r/   r0   maybe_single      
z&AsyncSelectRequestBuilder.maybe_singlecolumnqueryoptionsdict[str, Any]#AsyncFilterRequestBuilder[_ReturnT]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|| d| d| | _tt | j| j| j| j| j| j	dS )Ntype plainplphraseph
web_searchwconfig()fts.r^   )
r;   r%   addr   r   r$   r#   r&   r!   r    )r.   rd   re   rf   type_	type_partconfig_partr/   r/   r0   text_search   s$   
  z%AsyncSelectRequestBuilder.text_searchAsyncSingleRequestBuilder[str]c                 C  s.   d| j d< tt | j| j| j| j | j| jdS )zASpecify that the query must retrieve data as a single CSV string.r7   r6   r,   )r$   rG   r"   r    r!   r#   r%   r&   r_   r/   r/   r0   csv  rc   zAsyncSelectRequestBuilder.csvNrA   )r(   r[   )r(   ra   )rd   r"   re   r"   rf   rg   r(   rh   )r(   r{   )rC   rD   rE   r1   r`   rb   rz   r|   r/   r/   r/   r0   rZ      s    


rZ   c                   @  s   e Zd Zd+ddZd	d
d,ddZd	ejdddd-ddZd	ejddddd.d"d#Zd	ejd$d/d'd(Z	d	ejd$d0d)d*Z
d	S )1AsyncRequestBuilderr    r   r!   r"   r(   r)   c                 C  s   || _ || _d S r+   )r    r!   )r.   r    r!   r/   r/   r0   r1     s   
zAsyncRequestBuilder.__init__N)countcolumnsr~   Optional[CountMethod]#AsyncSelectRequestBuilder[_ReturnT]c                G  s0   t |d|i\}}}}tt | j| j||||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   rZ   r   r    r!   )r.   r~   r   methodr%   r$   r&   r/   r/   r0   select  s   zAsyncRequestBuilder.selectFTr~   	returningupsertdefault_to_nullr&   Union[dict, list]r   r   r   boolr   "AsyncQueryRequestBuilder[_ReturnT]c          	      C  s4   t |||||d\}}}}tt | j| j||||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/   r0   insert+  s   zAsyncRequestBuilder.insertrj   r~   r   ignore_duplicateson_conflictr   r   r   c          
      C  s6   t ||||||d\}}}	}tt | j| j||	||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/   r0   r   L  s   zAsyncRequestBuilder.upsertr~   r   r'   rh   c                C  s0   t |||d\}}}}tt | j| j||||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   rU   r   r    r!   )r.   r&   r~   r   r   r%   r$   r/   r/   r0   updateq  s   zAsyncRequestBuilder.updatec                C  s.   t ||d\}}}}tt | j| j||||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   rU   r   r    r!   )r.   r~   r   r   r%   r$   r&   r/   r/   r0   delete  s   zAsyncRequestBuilder.delete)r    r   r!   r"   r(   r)   )r   r"   r~   r   r(   r   )r&   r   r~   r   r   r   r   r   r   r   r(   r   )r&   r   r~   r   r   r   r   r   r   r"   r   r   r(   r   )r&   r'   r~   r   r   r   r(   rh   )r~   r   r   r   r(   rh   )rC   rD   rE   r1   r   r   representationr   r   r   r   r/   r/   r/   r0   r}     s*    
%)r}   N)+
__future__r   r&   r   typingr   r   r   r   r   httpxr	   r
   pydanticr   base_request_builderr   r   r   r   r   r   r   r   r   r   r   
exceptionsr   r   typesr   utilsr   r   r   r   rG   rL   rU   rY   rZ   r}   r/   r/   r/   r0   <module>   s&    481
Q