o
    l>j                     @  s
  U d Z ddlmZ ddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ dZdZdZdZdZded< G dd dee	Zd7ddZddd8ddZd9d"d#Zd:d&d'Z d;d.d/Z!d<d1d2Z"d9d3d4Z#d=d5d6Z$dS )>z(Shared output helpers for the Typer CLI.    )annotationsN)asdictis_dataclass)datetime)Enum)Path)SimpleNamespace)AnyIterable)Console)Tablezbold bright_cyanzbold bright_white ztuple[str, ...]TABLE_ROW_STYLESc                   @  s   e Zd ZdZdZdZdS )OutputFormatzSupported output formats.textjsonN)__name__
__module____qualname____doc__TEXTJSONr   r   r   H/home/thesage/.local/lib/python3.10/site-packages/pyicloud/cli/output.pyr      s    r   valuer	   returnc                 C  s   t | tr	|  S t | trt| S t| rt| S t | tr#t| S t	| dr=z| j
ddW S  ty<   | 
  Y S w t	| drE| jS t	| drSt | jtrS| jS t | tr\t| S t | trg| jddS t| S )z8Serialize common CLI values to JSON-friendly structures.
model_dumpr   )moderaw_datadatareplace)errors)
isinstancer   	isoformatr   strr   r   r   varshasattrr   	TypeErrorr   r   dictsetsortedbytesdecode)r   r   r   r   json_default   s.   






r,   indentpayloadr.   
int | Noner#   c                C  s   t j| td||dudS )zRender a payload as JSON.FN)defaultensure_asciir.   	sort_keys)r   dumpsr,   )r/   r.   r   r   r   to_json_string9   s   r5   consoler   Nonec                 C  s   | j t|d dS )zWrite a JSON payload to stdout.r   N
print_jsonr5   r6   r/   r   r   r   
write_jsonE   s   r<   pathr   c                 C  s.   | j jddd | jt|ddd dd dS )	zWrite JSON to disk.T)parentsexist_ok   r-   
zutf-8)encodingN)parentmkdir
write_textr5   )r=   r/   r   r   r   write_json_fileK   s   rF   titlecolumns	list[str]rowsIterable[Iterable[Any]]r   c                 C  sL   t | tttttd}|D ]}|| q|D ]}|jdd |D   q|S )zBuild a simple rich table.rG   title_styleheader_styleborder_style
row_stylesc                 S  s    g | ]}|d u r
dnt |qS )N )r#   ).0itemr   r   r   
<listcomp>a   s     z!console_table.<locals>.<listcomp>)r   TABLE_TITLE_STYLETABLE_HEADER_STYLETABLE_BORDER_STYLElistr   
add_columnadd_row)rG   rH   rJ   tablecolumnrowr   r   r   console_tableR   s   r^   Iterable[tuple[str, Any]]c                 C  s\   t | tttttd}|jdtd |d |D ]\}}|||du r&dnt	| q|S )z#Build a two-column key/value table.rL   Field)styleValueNrQ   )
r   rU   rV   rW   rX   r   rY   TABLE_KEY_STYLErZ   r#   )rG   rJ   r[   keyr   r   r   r   console_kv_tablee   s   
re   c                 C  s   | j t|ddd dS )z(Pretty-print a JSON object in text mode.r@   r-   r8   Nr9   r;   r   r   r   print_json_textv   s   rf   c                 C  s   | sdS | }t | tr.|  }|sdS |ds|S zt|}W n tjy-   | Y S w t |trb|d}|dpA|d}|rR|rR|dkrR| d| dS |rXt|S |r^t|S t	|S t|S )	zBReturn a compact human-friendly representation of reminder colors.rQ   {daHexStringckSymbolicColorNamedaSymbolicColorNamecustomz ())
r!   r#   strip
startswithr   loadsJSONDecodeErrorr'   getr5   )r   r/   stripped	hex_valuesymbolicr   r   r   format_color_value|   s6   



ru   )r   r	   r   r	   )r/   r	   r.   r0   r   r#   )r6   r   r/   r	   r   r7   )r=   r   r/   r	   r   r7   )rG   r#   rH   rI   rJ   rK   r   r   )rG   r#   rJ   r_   r   r   )r   r	   r   r#   )%r   
__future__r   r   dataclassesr   r   r   enumr   pathlibr   typesr   typingr	   r
   rich.consoler   
rich.tabler   rU   rV   rW   rc   r   __annotations__r#   r   r,   r5   r<   rF   r^   re   rf   ru   r   r   r   r   <module>   s2    





