o
    /h6                     @  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)
SyncClientget_origin_and_cast_ReturnTc                   @      e Zd ZdddZdddZdS )SyncQueryRequestBuildersessionr   pathstrhttp_methodheadersr	   paramsr
   jsonUnion[dict, list]returnNonec                 C  (   || _ || _|| _|| _|| _|| _d S Nr    r!   r#   r$   r%   r&   selfr    r!   r#   r$   r%   r&    r/   X/var/www/html/govbot/env/lib/python3.10/site-packages/postgrest/_sync/request_builder.py__init__      	
z SyncQueryRequestBuilder.__init__APIResponse[_ReturnT]c              
   C  s   | j j| j| j| j| j| jd}z=|jrH| jdkr@|j}| j	ddkr'|W S | j	dr@d| j	dv r@d| j	dvr@|W S t
t |W S t|  ty` } zt| |d}~w tyl   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$   HEADAccepttext/csvzapplication/vnd.pgrst.planz+jsonN)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.   s6   
zSyncQueryRequestBuilder.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   )SyncSingleRequestBuilderr    r   r!   r"   r#   r$   r	   r%   r
   r&   dictr(   r)   c                 C  r*   r+   r,   r-   r/   r/   r0   r1   V   r2   z!SyncSingleRequestBuilder.__init__SingleAPIResponse[_ReturnT]c              
   C  s   | j j| j| j| j| j| jd}zd|j  krdkr&n ntt	 
|W S t|  ty> } zt| |d}~w tyJ   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      i+  N)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 SyncSingleRequestBuilder.executeNr    r   r!   r"   r#   r"   r$   r	   r%   r
   r&   rG   r(   r)   )r(   rH   rA   r/   r/   r/   r0   rF   U   rE   rF   c                   @  s   e Zd ZdddZdS )SyncMaybeSingleRequestBuilderr(   %Optional[SingleAPIResponse[_ReturnT]]c              
   C  st   d }z	t t | }W n! ty, } z|jr"d|jv r"W Y d }~d S W Y d }~nd }~ww |s8t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)rF   r   r@   r   rS   rK   r/   r/   r0   r@      s"   z%SyncMaybeSingleRequestBuilder.executeN)r(   rN   )rB   rC   rD   r@   r/   r/   r/   r0   rM          rM   c                   @     e Zd ZdddZdS )SyncFilterRequestBuilderr    r   r!   r"   r#   r$   r	   r%   r
   r&   rG   r(   r)   c              	   C  :   t tt | ||| t tt | |||||| d S r+   )r   r   r   r1   r   r-   r/   r/   r0   r1         	z!SyncFilterRequestBuilder.__init__NrL   rB   rC   rD   r1   r/   r/   r/   r0   rV      rT   rV   c                   @  rU   )SyncRPCFilterRequestBuilderr    r   r!   r"   r#   r$   r	   r%   r
   r&   rG   r(   r)   c              	   C  rW   r+   )r   r   r   r1   rF   r-   r/   r/   r0   r1      rX   z$SyncRPCFilterRequestBuilder.__init__NrL   rY   r/   r/   r/   r0   rZ      s    rZ   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 )&SyncSelectRequestBuilderr    r   r!   r"   r#   r$   r	   r%   r
   r&   rG   r(   r)   c              	   C  rW   r+   )r   r   r   r1   r   r-   r/   r/   r0   r1      rX   z!SyncSelectRequestBuilder.__init__"SyncSingleRequestBuilder[_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$   rF   r   r#   r&   r%   r!   r    r.   r/   r/   r0   single   s   
zSyncSelectRequestBuilder.single'SyncMaybeSingleRequestBuilder[_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$   rM   r   r#   r&   r%   r!   r    r`   r/   r/   r0   maybe_single      
z%SyncSelectRequestBuilder.maybe_singlecolumnqueryoptionsdict[str, Any]"SyncFilterRequestBuilder[_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.   re   rf   rg   type_	type_partconfig_partr/   r/   r0   text_search   s$   
  z$SyncSelectRequestBuilder.text_searchSyncSingleRequestBuilder[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$   rF   r"   r    r!   r#   r%   r&   r`   r/   r/   r0   csv  rd   zSyncSelectRequestBuilder.csvNrL   )r(   r\   )r(   rb   )re   r"   rf   r"   rg   rh   r(   ri   )r(   r|   )rB   rC   rD   r1   ra   rc   r{   r}   r/   r/   r/   r0   r[      s    


r[   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SyncRequestBuilderr    r   r!   r"   r(   r)   c                 C  s   || _ || _d S r+   )r    r!   )r.   r    r!   r/   r/   r0   r1     s   
zSyncRequestBuilder.__init__N)countcolumnsr   Optional[CountMethod]"SyncSelectRequestBuilder[_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:`SyncSelectRequestBuilder`
        r   )r   r[   r   r    r!   )r.   r   r   methodr%   r$   r&   r/   r/   r0   select  s   zSyncRequestBuilder.selectFTr   	returningupsertdefault_to_nullr&   r'   r   r   r   boolr   !SyncQueryRequestBuilder[_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:`SyncQueryRequestBuilder`
        r   )r   r   r   r    r!   )	r.   r&   r   r   r   r   r   r%   r$   r/   r/   r0   insert+  s   zSyncRequestBuilder.insertrk   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:`SyncQueryRequestBuilder`
        r   )r   r   r   r    r!   )
r.   r&   r   r   r   r   r   r   r%   r$   r/   r/   r0   r   L  s   zSyncRequestBuilder.upsertr   r   rG   ri   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:`SyncFilterRequestBuilder`
        r   )r   rV   r   r    r!   )r.   r&   r   r   r   r%   r$   r/   r/   r0   updateq  s   zSyncRequestBuilder.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:`SyncFilterRequestBuilder`
        r   )r   rV   r   r    r!   )r.   r   r   r   r%   r$   r&   r/   r/   r0   delete  s   zSyncRequestBuilder.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&   rG   r   r   r   r   r(   ri   )r   r   r   r   r(   ri   )rB   rC   rD   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   rF   rM   rV   rZ   r[   r~   r/   r/   r/   r0   <module>   s&    481
Q