o
    <i<                     @   s  d dl Z d dlmZ d dlmZ d dlmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZmZmZ d dlmZmZmZ d d	lmZmZmZ d d
lmZ d dlmZmZ d dlmZ defddZe  e!dej!dej"dej!de#ddgddej!dej#g ddddddde!de!d e!d!ej$d"e	d#e%dB d$e&d%e%d&e%d'e%dB d(e%dB d)e%dB ddfd*d+Z'd"e	de(eef fd,d-Z)e'* ej$ej+d.dd/e d"e	d.e%dB ddfd0d1Z,e'* ej!d2e#g d3d4de+d5ej$e d"e	d6ed7 d5e%ddfd8d9Z-e'* e+d5ej!d:d;d<ej$e d"e	d5e%d=e&ddfd>d?Z.e'* e+d5ej$e d"e	d5e%ddfd@dAZ/e'* e+d5ej$e d"e	d5e%ddfdBdCZ0e'* e+d5ej$e d"e	d5e%ddfdDdEZ1e'* e+d5ej$e d"e	d5e%ddfdFdGZ2e'* ej$e d"e	ddfdHdIZ3e'  dqdJdKZ4e4* e+d5ej$e d"e	d5e%ddfdLdMZ5e'  dqdNdOZ6e6* e+d5ej$e d"e	d5e%ddfdPdQZ7e6* e+d5ej$e d"e	d5e%ddfdRdMZ5e'* e+dSe+dTej$e d"e	dSe%dTe%ddfdUdVZ8e'  dqdWdXZ9e9  dqdYdZZ:e:*dMe+d5ej+d[dd/ej$e d"e	d5e%d[e%ddfd\d]Z;e:*dQe+d5ej+d[dd/ej$e d"e	d5e%d[e%ddfd^d_Z<e9  dqd`daZ=e=* e+d5e+d[e+dbej$e d"e	d5e%d[e%dbe%ddf
dcdMZ5e=* e+d5e+d[e+dbej$e d"e	d5e%d[e%dbe%ddf
dddQZ7e9  dqdedfZ>e>* e+d5e+d[ej$e d"e	d5e%d[e%ddfdgdMZ5e>* e+d5e+d[ej$e d"e	d5e%d[e%ddfdhdQZ7e'* e+d5ej!didd/ej!dej"dej$e d"e	d5e%dje%d$e&ddf
dkdlZ?dmedne@e%e%f de@e%e%f fdodpZAdS )r    NCallable)wraps)AnyLiteral)Context)__version__)URICatalogload_catalog)ConsoleOutput
JsonOutputOutput)NoSuchNamespaceErrorNoSuchPropertyExceptionNoSuchTableError)TableProperties)SnapshotRefSnapshotRefType)property_as_intreturnc                  C   s   dt dt fdd} | S )Nfuncr   c                    s"   t  dtdtf fdd}|S )Nargskwargsc               
      sd   z | i |W S  t y1 } ztjdd}t|\}}|| |d W Y d }~d S d }~ww )NT)silent   )	Exceptionclickget_current_context_catalog_and_output	exceptionexit)r   r   ectx_outputr    R/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/pyiceberg/cli/console.pywrapper(   s   
z3catch_exception.<locals>.decorator.<locals>.wrapper)r   r   )r   r)   r'   r&   r(   	decorator'   s   	z"catch_exception.<locals>.decoratorr   )r*   r'   r'   r(   catch_exception&   s   r+   z	--catalogz	--verbose)typez--outputtextjson)r,   defaultz--log-level)DEBUGINFOWARNINGERRORCRITICALF)case_sensitiver2   PYICEBERG_LOG_LEVELzSet the logging level)r,   r/   envvarhelpz--ugiz--uriz--credentialr#   catalogverboser%   	log_levelugiuri
credentialc           
   
   C   s  t jtt | dd i }|r||d< |r||t< |r ||d< | t |dkr2t|d| jd< nt	|d| jd< zt
|fi || jd< W n tyf }	 z| jd |	 | d	 W Y d }	~	nd }	~	ww t| jd ts| jd td
 | d	 d S d S )Nz.%(asctime)s:%(levelname)s:%(name)s:%(message)s)levelformatr<   r>   r-   )r:   r%   r9   r   z[Could not determine catalog type from uri. REST (http/https) and Hive (thrift) is supported)loggingbasicConfiggetattrupperr	   ensure_objectdictr   objr   r   r   r    r!   
isinstancer
   
ValueError)
r#   r9   r:   r%   r;   r<   r=   r>   
propertiesr"   r'   r'   r(   run7   s8   

rK   c                 C   s   | j d | j d fS )zSmall helper to set the types.r9   r%   )rG   r#   r'   r'   r(   r   p   s   r   parent)requiredc                 C   s>   t | \}}g }|r||}|s||pd}|| dS )zList tables or namespaces.r'   N)r   list_tableslist_namespacesidentifiers)r#   rM   r9   r%   rQ   r'   r'   r(   listu   s   
rR   z--entity)any	namespacetablerS   
identifierentity)namerT   rU   c              
   C   s  t | \}}t|}d}|dv rDt|dkrDz||}|| d}W n tyC } z|dks7t|dkr9|W Y d}~nd}~ww d}	|dv rwt|dkrwz||}
||
 d}	W n t	yv } z|dkrl|W Y d}~nd}~ww |du r|	du rt	d	| dS dS )
z Describe a namespace or a table.F>   rS   rT   r   TrS   r   N>   rS   rU   z#Table or namespace does not exist: )
r   r
   identifier_to_tuplelenload_namespace_propertiesdescribe_propertiesr   
load_tabledescribe_tabler   )r#   rW   rV   r9   r%   identifier_tupleis_namespacenamespace_propertiesexcis_tablecatalog_tabler'   r'   r(   describe   s:   




re   z	--historyT)is_flaghistoryc                 C   s&   t | \}}||}||| dS )z List all the files of the table.N)r   r]   files)r#   rV   rg   r9   r%   rd   r'   r'   r(   rh      s   
rh   c                 C   (   t | \}}||}||  dS )zGet the schema of the table.N)r   r]   schemar#   rV   r9   r%   rU   r'   r'   r(   rj         
rj   c                 C   ri   )z'Return the partition spec of the table.N)r   r]   specrk   r'   r'   r(   rm      rl   rm   c                 C   s(   t | \}}||j}||j dS )zReturn the UUID of the table.N)r   r]   metadatauuid
table_uuid)r#   rV   r9   r%   rn   r'   r'   r(   ro      s   ro   c                 C   s(   t | \}}||}||  dS )z!Return the location of the table.N)r   r]   r-   locationrk   r'   r'   r(   rq      rl   rq   c                 C   s   | j d t dS )zPrint pyiceberg version.r%   N)rG   versionr   rL   r'   r'   r(   rr      s   rr   c                   C      dS )z Operation to create a namespace.Nr'   r'   r'   r'   r(   create       rt   c                 C   *   t | \}}|| |d|  dS )zCreate a namespace.zCreated namespace: N)r   create_namespacer-   r#   rV   r9   r%   r'   r'   r(   rT         
rT   c                   C   rs   )z(Operations to drop a namespace or table.Nr'   r'   r'   r'   r(   drop   ru   rz   c                 C   rv   )zDrop a table.zDropped table: N)r   
drop_tabler-   rx   r'   r'   r(   rU      ry   rU   c                 C   rv   )zDrop a namespace.zDropped namespace: N)r   drop_namespacer-   rx   r'   r'   r(   rT     ry   from_identifierto_identifierc                 C   s2   t | \}}||| |d| d|  dS )zRename a table.zRenamed table from z to N)r   rename_tabler-   )r#   r}   r~   r9   r%   r'   r'   r(   rename  s   r   c                   C   rs   )z Properties on tables/namespaces.Nr'   r'   r'   r'   r(   rJ   %  ru   rJ   c                   C   rs   )z&Fetch properties on tables/namespaces.Nr'   r'   r'   r'   r(   get*  ru   r   property_namec                 C   sb   t | \}}t|}||}|r*|| }r || dS td| d| || dS )z Fetch properties on a namespace.Could not find property z on namespace N)r   r
   rY   r[   r   r-   r   r\   )r#   rV   r   r9   r%   r_   ra   property_valuer'   r'   r(   get_namespace/  s   

r   c                 C   sh   t | \}}t|}||j}|r,|j| }r"|| dS td| d| |	|j dS )zFetch properties on a table.r   z
 on table N)
r   r
   rY   r]   rn   rJ   r   r-   r   r\   )r#   rV   r   r9   r%   r_   rn   r   r'   r'   r(   	get_tableD  s   
r   c                   C   rs   )z$Set a property on tables/namespaces.Nr'   r'   r'   r'   r(   setY  ru   r   r   c                 C   s8   t | \}}|j|||id |d| d|  dS )zSet a property on a namespace.)updateszUpdated  on N)r   update_namespace_propertiesr-   )r#   rV   r   r   r9   r%   r'   r'   r(   rT   ^  s   c           	      C   sv   t | \}}t|}||}| }|||i W d   n1 s&w   Y  |d| d| d|  dS )zSet a property on a table.NzSet =r   )r   r
   rY   r]   transactionset_propertiesr-   )	r#   rV   r   r   r9   r%   r_   rU   txr'   r'   r(   rU   l  s   


 c                   C   rs   )z)Remove a property from tables/namespaces.Nr'   r'   r'   r'   r(   remove}  ru   r   c                 C   sV   t | \}}|j||hd}|j|gkr!|d| d|  dS td| d| )z#Remove a property from a namespace.)removals	Property  removed from  does not exist on N)r   r   removedr-   r   )r#   rV   r   r9   r%   resultr'   r'   r(   rT     s
   c                 C   s   t | \}}||}||jjv r7| }|| W d   n1 s%w   Y  |d| d|  dS td| d| )zRemove a property from a table.Nr   r   r   )r   r]   rn   rJ   r   remove_propertiesr-   r   )r#   rV   r   r9   r%   rU   r   r'   r'   r(   rU     s   

z--typer,   c                    sn   t | \}}||   }r$ tjtjhvr$td  fdd| D }|	| dS )z(List all the refs in the provided table.z(Type must be either branch or tag, got: c                    s2   g | ]\}}r|j kr||j t| jfqS r'   )snapshot_ref_type_retention_propertiesrJ   ).0ref_namerefrU   r,   r'   r(   
<listcomp>  s    
zlist_refs.<locals>.<listcomp>N)
r   r]   refslowerr   BRANCHTAGrI   itemsdescribe_refs)r#   rV   r,   r:   r9   r%   r   relevant_refsr'   r   r(   	list_refs  s   
r   r   table_propertiesc                 C   s   i }| j tjkr5t|tjtj}t|tjtj}| j	r t
| j	nt
||d< | jr.t
| jnt
||d< nd|d< d|d< | jrEt
| jnd|d< |S )Nmin_snapshots_to_keepmax_snapshot_age_mszN/Aforevermax_ref_age_ms)r   r   r   r   r   MIN_SNAPSHOTS_TO_KEEPMIN_SNAPSHOTS_TO_KEEP_DEFAULTMAX_SNAPSHOT_AGE_MSMAX_SNAPSHOT_AGE_MS_DEFAULTr   strr   r   )r   r   retention_propertiesdefault_min_snapshots_to_keepdefault_max_snapshot_age_msr'   r'   r(   r     s(   r   )r   N)BrA   collections.abcr   	functoolsr   typingr   r   r   r   	pyicebergr   pyiceberg.catalogr	   r
   r   pyiceberg.cli.outputr   r   r   pyiceberg.exceptionsr   r   r   pyiceberg.tabler   pyiceberg.table.refsr   r   pyiceberg.utils.propertiesr   r+   groupoptionBOOLChoicepass_contextr   boolrK   tupler   commandargumentrR   re   rh   rj   rm   ro   rq   rr   rt   rT   rz   rU   r   rJ   r   r   r   r   r   r   rF   r   r'   r'   r'   r(   <module>   sR  	*"($$$$**$$**