
    _j5                        S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
JrJrJr  S SKJr  SSKJrJrJrJrJr  SSKJr  SSKJr   " S	 S
\5      r " S S\5      rg)    )annotationsN)DictAnyUnionOptional)Path   )CreateImportParametersCreateImportResponseImportListImportsResponseUpdateImport)WebsetsBaseClient)WebsetsAsyncBaseClientc                     ^  \ rS rSrSrU 4S jrSS.     SS jjrSS jrSSS.SS	 jjrSS
 jr	SS jr
SSS.SS jjrSrU =r$ )ImportsClient   zClient for managing Imports.c                $   > [         TU ]  U5        g Nsuper__init__selfclient	__class__s     R/home/rurouni/.local/lib/python3.13/site-packages/exa_py/websets/imports/client.pyr   ImportsClient.__init__            Ncsv_datac               J   UGb  [        U[        [        45      (       aI  [        R                  R                  U5      (       a%  [        USSS9 nUR                  5       nSSS5        O[        U5      n[        U[        5      (       a#  UR                  S5      nUR                  S5      nO[        USS5      n[        USS5      nUb  Uc  [        WR                  S5      5      n[        R                  " [        R                   " U5      5      n[#        U5      n	[%        S[        U	5      S-
  5      n
[        U[        5      (       a  UR'                  5       nUc  XqS'   Uc  XS'   O4UR)                  5       nUc  X{S'   Uc  XS'   [*        R,                  " U5      nU R/                  S	US
9n[0        R,                  " U5      nUc  U$ [2        R4                  " UR6                  WSS0S9nUR9                  5         U R                  UR:                  5      $ ! , (       d  f       GN= fa^  Create a new import to upload your data into Websets.

Imports can be used to:
- Enrich: Enhance your data with additional information using our AI-powered enrichment engine
- Search: Query your data using Websets' agentic search with natural language filters
- Exclude: Prevent duplicate or already known results from appearing in your searches

Args:
    params (CreateImportParameters): The parameters for creating an import.
    csv_data (Union[str, Path], optional): CSV data to upload. Can be raw CSV string or file path.
                                           When provided, size and count will be automatically calculated 
                                           if not specified in params.

Returns:
    CreateImportResponse: If csv_data is None (traditional usage with upload URL).
    Import: If csv_data is provided (uploaded and processing).
Nrzutf-8)encodingsizecountr      /v0/imports)datazContent-Typeztext/csv)r+   headers)
isinstancestrr   ospathisfileopenreaddictgetgetattrlenencodecsvreaderioStringIOlistmaxcopy
model_dumpr
   model_validaterequestr   requestsput
upload_urlraise_for_statusid)r   paramsr"   fcsv_contentcurrent_sizecurrent_countcalculated_size
csv_readerrowscalculated_countparams_dictresponseimport_responseupload_responses                  r   createImportsClient.create   s   . (S$K00RWW^^H5M5M(C':a"#&&(K ;: "(m&$''%zz&1 &

7 3&vvt< ' >#}'<"%k&8&8&A"B ZZK(@A
J'#&q#d)a-#8 fd++#[[]F#+)8v$,*:w"("3"3"5K#+.=F+$,/?G,3BB;OF<<F<;.==hG""",,&&#Z0

 	((*xx**++[ ;:s   H
H"c                T    U R                  SU 3SS9n[        R                  " U5      $ )uGet a specific import.

Args:
    import_id (str): The id of the Import.

Returns:
    Import: The retrieved import.
/v0/imports/GETmethodrB   r   rA   r   	import_idrR   s      r   r5   ImportsClient.gete   s.     <<,yk :5<I$$X..r    cursorlimitc                   UUS.R                  5        VVs0 s H  u  p4Uc  M
  X4_M     nnnU R                  SUSS9n[        R                  " U5      $ s  snnf )List all imports.

Args:
    cursor (str, optional): The cursor to paginate through the results.
    limit (int, optional): The number of results to return (1-200, default 25).

Returns:
    ListImportsResponse: List of imports with pagination info.
ra   r*   rZ   rH   r\   itemsrB   r   rA   r   rb   rc   kvrH   rR   s          r   r=   ImportsClient.listq   su     ! eg
  AD 	 
 <<fU<K"11(;;
s
   	AAc                V    U R                  SU 3USS9n[        R                  " U5      $ )Update an import configuration.

Args:
    import_id (str): The id of the Import.
    params (UpdateImport): The parameters for updating an import.

Returns:
    Import: The updated import.
rY   PATCHr+   r\   r]   r   r_   rH   rR   s       r   updateImportsClient.update   s1     <<,yk :PW<X$$X..r    c                T    U R                  SU 3SS9n[        R                  " U5      $ )nDelete an import.

Args:
    import_id (str): The id of the Import.

Returns:
    Import: The deleted import.
rY   DELETEr[   r]   r^   s      r   deleteImportsClient.delete   s.     <<,yk :8<L$$X..r         timeoutpoll_intervalc                   [         R                   " 5       n U R                  U5      nUR                  S;   a  U$ [         R                   " 5       U-
  U:  a  [        SU SU S35      e[         R                  " U5        Mi  )  Wait until an import is completed or failed.

Args:
    import_id (str): The id of the Import.
    timeout (int, optional): Maximum time to wait in seconds. Defaults to 1800 (30 minutes).
    poll_interval (int, optional): Time to wait between polls in seconds. Defaults to 5.
    
Returns:
    Import: The import once it's completed or failed.
    
Raises:
    TimeoutError: If the import does not complete within the timeout period.
	completedfailedImport  did not complete within  seconds)timer5   statusTimeoutErrorsleepr   r_   r|   r}   
start_time
import_objs         r   wait_until_completed"ImportsClient.wait_until_completed   sw     YY[
),J  $;;!!yy{Z''1"WYK7PQXPYYa#bccJJ}% r     rH   z-Union[Dict[str, Any], CreateImportParameters]r"   zOptional[Union[str, Path]]returnz#Union[CreateImportResponse, Import]r_   r.   r   r   rb   zOptional[str]rc   zOptional[int]r   r   r_   r.   rH   z#Union[Dict[str, Any], UpdateImport]r   r   r_   r.   r|   intr}   r   r   r   __name__
__module____qualname____firstlineno____doc__r   rU   r5   r=   rr   rw   r   __static_attributes____classcell__r   s   @r   r   r      se    &! 04	F,=F, -	F,
 
-F,P
/ /34 <*/
/ FJ`a & &r    r   c                     ^  \ rS rSrSrU 4S jrSS.     SS jjrSS jrSSS.SS	 jjrSS
 jr	SS jr
SSS.SS jjrSrU =r$ )AsyncImportsClient   z"Async client for managing Imports.c                $   > [         TU ]  U5        g r   r   r   s     r   r   AsyncImportsClient.__init__   r   r    Nr!   c                 #    UGb  [        U[        [        45      (       aI  [        R                  R                  U5      (       a%  [        USSS9 nUR                  5       nSSS5        O[        U5      n[        U[        5      (       a#  UR                  S5      nUR                  S5      nO[        USS5      n[        USS5      nUb  Uc  [        WR                  S5      5      n[        R                  " [        R                   " U5      5      n[#        U5      n	[%        S[        U	5      S-
  5      n
[        U[        5      (       a  UR'                  5       nUc  XqS'   Uc  XS'   O4UR)                  5       nUc  X{S'   Uc  XS'   [*        R,                  " U5      nU R/                  S	US
9I Sh  vN n[0        R,                  " U5      nUc  U$ [2        R4                  " 5        ISh  vN nUR7                  UR8                  WSS0S9I Sh  vN nUR;                  5         SSS5      ISh  vN   U R                  UR<                  5      I Sh  vN $ ! , (       d  f       GN= f N N N] N?! , ISh  vN  (       d  f       NT= f N87fr$   )r-   r.   r   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   r
   rA   rB   r   httpxAsyncClientrD   rE   rF   rG   )r   rH   r"   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   http_clientrT   s                   r   rU   AsyncImportsClient.create   s3    . (S$K00RWW^^H5M5M(C':a"#&&(K ;: "(m&$''%zz&1 &

7 3&vvt< ' >#}'<"%k&8&8&A"B ZZK(@A
J'#&q#d)a-#8 fd++#[[]F#+)8v$,*:w"("3"3"5K#+.=F+$,/?G,3BB;OFm&AA.==hG"" $$&&+$/OO** '4 %4 % O
 ,,. '& XXo00111_ ;:@ B ' '&&& 2s   AJI"EJ0I(18J)I**J-!I0I,I0#J.I./"JJ
J
I% 	J*J,I0.J0J6I97JJc                p   #    U R                  SU 3SS9I Sh  vN n[        R                  " U5      $  N7f)rX   rY   rZ   r[   Nr]   r^   s      r   r5   AsyncImportsClient.get
  s:      YK&@OO$$X.. P   646ra   c                  #    UUS.R                  5        VVs0 s H  u  p4Uc  M
  X4_M     nnnU R                  SUSS9I Sh  vN n[        R                  " U5      $ s  snnf  N 7f)re   ra   Nr*   rZ   rf   rg   ri   s          r   r=   AsyncImportsClient.list  s      ! eg
  AD 	 
 mF5QQ"11(;;
 Rs    A&	AAA&A$!A&c                r   #    U R                  SU 3USS9I Sh  vN n[        R                  " U5      $  N7f)rn   rY   ro   rp   Nr]   rq   s       r   rr   AsyncImportsClient.update+  s=      YK&@vV]^^$$X.. _s   757c                p   #    U R                  SU 3SS9I Sh  vN n[        R                  " U5      $  N7f)ru   rY   rv   r[   Nr]   r^   s      r   rw   AsyncImportsClient.delete8  s:      YK&@RR$$X.. Sr   ry   rz   r{   c               h  #    [         R                  " 5       R                  5       n U R                  U5      I Sh  vN nUR                  S;   a  U$ [         R                  " 5       R                  5       U-
  U:  a  [        SU SU S35      e[         R                  " U5      I Sh  vN   M   Nr N7f)r   Nr   r   r   r   )asyncioget_event_loopr   r5   r   r   r   r   s         r   r   'AsyncImportsClient.wait_until_completedD  s      ++-224
#xx	22J  $;;!!%%',,.;gE"WYK7PQXPYYa#bcc--... 2 /s"   9B2B.A+B2'B0(B20B2r   r   r   r   r   r   r   r   s   @r   r   r      sf    ,! 04	I2=I2 -	I2
 
-I2V
/ 59QU <*/
/ LPfg / /r    r   )
__future__r   r   r/   r9   r;   r   rC   r   typingr   r   r   r   pathlibr   typesr
   r   r   r   r   	core.baser   core.async_baser   r   r   r   r    r   <module>r      sW    "  	 
 	    - -   * 4_&% _&Db// b/r    