o
    -wi%                     @  s   d Z ddlmZ ddlZddlZddlZddlZddlm	Z	m
Z
mZ ddl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 e	rvdd	lmZ dd
lmZ ddlmZ ddlmZ ddlm Z  G dd deZ!G dd deZ"G dd dZ#dS )zArtifact saver.    )annotationsN)TYPE_CHECKING	AwaitableSequence)util)ArtifactManifest)B64MD5b64_to_hex_idmd5_file_b64)URIStr)Protocol)ArtifactManifestEntry)
FilePusher)Api)
ProgressFnc                   @     e Zd Zd
ddZd	S )SaveFnentryr   progress_callbackr   returnboolc                 C     d S N selfr   r   r   r   _/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/wandb/sdk/artifacts/artifact_saver.py__call__      zSaveFn.__call__N)r   r   r   r   r   r   __name__
__module____qualname__r   r   r   r   r   r          r   c                   @  r   )SaveFnAsyncr   r   r   r   r   Awaitable[bool]c                 C  r   r   r   r   r   r   r   r   !   r   zSaveFnAsync.__call__N)r   r   r   r   r   r%   r   r   r   r   r   r$       r#   r$   c                   @  sr   e Zd ZU ded< 	d.d/ddZ											d0d1d(d)Z											d0d1d*d+Zd2d,d-ZdS )3ArtifactSaverdict | None_server_artifactFapiInternalApidigeststrmanifest_jsondictfile_pusherr   is_user_createdr   r   Nonec                 C  s4   || _ || _|| _tj|| j d| _|| _d | _d S )N)r)   )_api_file_pusher_digestr   from_manifest_json	_manifest_is_user_createdr(   )r   r)   r+   r-   r/   r0   r   r   r   __init__*   s   
zArtifactSaver.__init__NTentityprojecttypename	client_idsequence_client_iddistributed_id
str | Nonefinalizemetadatattl_duration_seconds
int | NonedescriptionaliasesSequence[str] | Nonetagsuse_after_commitincrementalhistory_stepbase_idc                 C  s*   |  |||||||||	|
|||||||S r   )_save_internal)r   r9   r:   r;   r<   r=   r>   r?   rA   rB   rC   rE   rF   rH   rI   rJ   rK   rL   r   r   r   save<   s&   zArtifactSaver.savec                   s  g }|pg D ]
}| ||d qdd |pg D }	 jj||j|	|
|||j|||d\_}jd us:J jd  d u rI|rI|d jd dkr^|r[jj ||d jS jd d	krvjd d
krvtdjd d}drd}dnrd}djj	d d|d\}t
jjjddd  jj  fdd d fdd}tj }jj |||d z
|  W   n  w |r|rjj ||d jS ) N)artifactCollectionNamealiasc                 S  s   g | ]}d |iqS )tagNamer   ).0tagr   r   r   
<listcomp>|   s    z0ArtifactSaver._save_internal.<locals>.<listcomp>)
rB   rC   rF   rH   rE   r0   r?   r=   r>   rK   idstate	COMMITTED)artifact_entity_nameartifact_project_namePENDINGDELETEDzUnknown artifact state "{}"FULLzwandb_manifest.jsonINCREMENTALzwandb_manifest.incremental.jsonPATCHzwandb_manifest.patch.json F)base_artifact_idinclude_uploadr;   g?g{Gz?i  c                   s   j jj | |dS )N)r   )r6   storage_policy
store_file)r   r   )artifact_idartifact_manifest_idr   step_preparer   r   <lambda>   s    z.ArtifactSaver._save_internal.<locals>.<lambda>r   r1   c                    s     tjdddd} tj| j}tjj	
 | dd W d    n1 s)w   Y  t|}s6rAjj|d\}}njj| d\}}|d	 }|d
 }i }|D ]}|dd\}	}
|
||	< qYt|d}jj|||d W d    d S 1 sw   Y  d S )Nzw+z.jsonF)suffixdelete   )indent)r+   )r`   	uploadUrluploadHeaders:   rb)extra_headers)&_resolve_client_id_manifest_referencestempfileNamedTemporaryFileospathabspathr<   jsondumpr6   to_manifest_jsonr
   r2   update_artifact_manifestcreate_artifact_manifestsplitopenupload_file_retry)fprv   r+   _resp
upload_urlupload_headersrq   upload_headerkeyvalfp2)rd   re   rL   r?   rJ   manifest_filenamer   r   r   before_commit   s<   


"z3ArtifactSaver._save_internal.<locals>.before_commit)rA   r   result_futurer   r1   )appendr2   create_artifactr4   r7   r(   use_artifact	Exceptionformatr|   wandbfilesyncrf   StepPreparestartr3   store_manifest_filesr6   
concurrentfuturesFuturecommit_artifactresultshutdown)r   r9   r:   r;   r<   r=   r>   r?   rA   rB   rC   rE   rF   rH   rI   rJ   rK   rL   alias_specsrP   	tag_specslatestmanifest_typer   r   commit_resultr   )rd   re   rL   r?   rJ   r   r   rf   r   rM   d   s   

	

(	
zArtifactSaver._save_internalc                 C  s   | j jD ]?}| j j| }|jd urC|jdrCt|j}t|j}| j|}|d u r4t	d| t
dtt| d| |_qd S )Nzwandb-client-artifact:zCould not resolve client id zwandb-artifact:///)r6   entriesref
startswithr   host_from_pathuri_from_pathr2   _resolve_client_idRuntimeErrorr   r	   r   )r   
entry_pathr   r=   artifact_file_pathrd   r   r   r   rr   	  s   
z4ArtifactSaver._resolve_client_id_manifest_references)F)r)   r*   r+   r,   r-   r.   r/   r   r0   r   r   r1   )NTNNNNNFFNN)$r9   r,   r:   r,   r;   r,   r<   r,   r=   r,   r>   r,   r?   r@   rA   r   rB   r'   rC   rD   rE   r@   rF   rG   rH   rG   rI   r   rJ   r   rK   rD   rL   r@   r   r'   r   )r    r!   r"   __annotations__r8   rN   rM   rr   r   r   r   r   r&   '   s<   
 0 &r&   )$__doc__
__future__r   concurrent.futuresr   rx   ru   rs   typingr   r   r   r   wandb.filesync.step_preparer   %wandb.sdk.artifacts.artifact_manifestr   wandb.sdk.lib.hashutilr   r	   r
   wandb.sdk.lib.pathsr   r   +wandb.sdk.artifacts.artifact_manifest_entryr   wandb.sdk.internal.file_pusherr   wandb.sdk.internal.internal_apir   r*   wandb.sdk.internal.progressr   r   r$   r&   r   r   r   r   <module>   s,    