
    ZTh                         d dl Z d dlmZ d dlmZ d dlmZmZmZmZ d dl	m
Z
 d dl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  G d de      Z G d de      Z G d de      Zy)    N)datetime)Enum)	GeneratorListOptionalUnion)urljoin)	BaseModel
ConfigDictfield_validator)to_camel)PydanticCustomError)Self)SiftRestConfig_RestServicec                   L    e Zd ZdZdZdZdZdZede	de
e   fd       Zde	fd	Zy
)DataImportStatusTypezStatus of the data import.DATA_IMPORT_STATUS_SUCCEEDEDDATA_IMPORT_STATUS_PENDINGDATA_IMPORT_STATUS_IN_PROGRESSDATA_IMPORT_STATUS_FAILEDvalreturnc                 2    	  | |      S # t         $ r Y y w xY wN)
ValueError)clsr   s     _/home/www/backend.miabetepe.com/venv/lib/python3.12/site-packages/sift_py/data_import/status.pyfrom_strzDataImportStatusType.from_str   s"    	s8O 		s   
 	c                     | j                   S r   )value)selfs    r   as_human_strz!DataImportStatusType.as_human_str   s    zz    N)__name__
__module____qualname____doc__	SUCCEEDEDPENDINGIN_PROGRESSFAILEDclassmethodstrr   r   r   r#    r$   r   r   r      sI    $.I*G2K(F3 8D>  c r$   r   c                       e Zd ZU dZ eed      Zeed<   e	ed<   e	ed<   dZ
eed<   eeef   ed	<   dZeed
<   dZee   ed<   dZee   ed<    ed	d      edeeef   defd              Zy)
DataImportz#Metadata regarding the data import.T)alias_generatorpopulate_by_namedata_import_idcreated_datemodified_date 
source_urlstatuserror_messageN
csv_configparquet_configbefore)moderawr   c                     t        |t              r|S t        |t              rt        j                  |      }||S t	        dd| d      )Ninvalid_data_import_errorzInvalid data import status: .)
isinstancer   r.   r   r   )r   r?   r!   s      r   convert_statuszDataImport.convert_status0   sU     c/0JS!(11#6E !'+GuA)N
 	
r$   )r%   r&   r'   r(   r   r   model_configr.   __annotations__r   r8   r   r   r:   r;   r   dictr<   r   r-   rD   r/   r$   r   r1   r1   "   s    -hNLJ#++,,M3!%J%%)NHTN)XH-

s,@'@!A 

FZ 

  .

r$   r1   c                        e Zd ZU dZdZee   ed<   eed<   dedef fdZ	de
fd	Zdd
edefdZdeeddf   fdZdd
edefdZdee   fdZ xZS )DataImportServicezN
    Service used to retrieve information about a particular data import.
    z/api/v1/data-imports_data_import_ids_status_urirestconfr4   c                     t         |   |       |g| _        t        | j                  | j
                        | _        y )N)	rest_conf)super__init__rJ   r	   	_base_uriSTATUS_PATHrK   )r"   rL   r4   	__class__s      r   rP   zDataImportService.__init__I   s7    8,!/ 0"4>>43C3CDr$   otherc                 N    | j                   j                  |j                          y)zR
        Add an existing data import service to track a batch data import
        N)rJ   extend)r"   rT   s     r   rV   zDataImportService.extendN   s     	$$U%;%;<r$   idxr   c                     | j                   j                  | j                   d| j                  |          }|j	                          |j                         j                  d      }t        di |}|S )z
        Returns information about the data import. Provides the first data import if multiple provided through `extend` and `idx` not passed

        - `idx`: Optional idx of the desired DataImport to access
        /)url
dataImportr/   )_sessiongetrK   rJ   raise_for_statusjsonr1   )r"   rW   responsedatadata_imports        r   get_data_importz!DataImportService.get_data_importT   su     ==$$##$Ad&;&;C&@%AB % 
 	!!#}}""<0 (4(r$   Nc              #   z   K   t        t        | j                              D ]  }| j                  |        y w)NrW   )rangelenrJ   rc   r"   rW   s     r   get_data_importsz"DataImportService.get_data_importsb   s9     T2234 	0C&&3&//	0s   9;c                 8   d}	 | j                  |      }|j                  }|t        j                  t        j                  fv r|S |t        j
                  t        j                  fv rnt        d|       t        j                  |       t        |dz  d      })z
        Blocks until the data import is completed. Check the status to determine
        if the import was successful or not.
        Waits on only the first data import if multiple provided through `add_data_import_id` and `idx` not passed
           re   zUnknown status:    <   )rc   r9   r   r)   r,   r*   r+   	Exceptiontimesleepmin)r"   rW   polling_intervalrb   r9   s        r   wait_until_completez%DataImportService.wait_until_completef   s     ..3.7K+6+=+=F$..$++  #"$,,$00  "26( ;<<JJ'("#3a#7<! r$   c                     t        t        | j                              D cg c]  }| j                  |       c}S c c}w )z=
        Blocks until all data imports are complete.
        re   )rf   rg   rJ   rs   rh   s     r   wait_until_all_completez)DataImportService.wait_until_all_complete   s7     >C3tG\G\C]=^_c((S(1___s   =)r   )r%   r&   r'   r(   rR   r   r.   rF   r   rP   r   rV   intr1   rc   r   ri   rs   ru   __classcell__)rS   s   @r   rI   rI   ?   s     )K3iE E E
=D =3 z 0)Jd,B"C 0=s =: =2`j)9 `r$   rI   )ro   r   enumr   typingr   r   r   r   urllib.parser	   pydanticr
   r   r   pydantic.alias_generatorsr   pydantic_corer   typing_extensionsr   sift_py.restr   r   r   r1   rI   r/   r$   r   <module>r      sQ       3 3   ; ; . - " 54 &
 
:D` D`r$   