o
    xi%                     @  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
 ddl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rzd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)	AwaitableSequence)TYPE_CHECKING)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   V/home/ubuntu/.local/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  s:   || _ || _|| _t|| _| j | jj_ || _d | _d S r   )	_api_file_pusher_digestr   from_manifest_json	_manifeststorage_policy_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   r:   r;   r<   r=   r>   r?   r@   rB   rC   rD   rF   rG   rI   rJ   rK   rL   rM   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>)
rC   rD   rG   rI   rF   r0   r@   r>   r?   rL   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   r7   
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+   )ra   	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   rM   r@   rK   manifest_filenamer   r   r   before_commit   s<   


"z3ArtifactSaver._save_internal.<locals>.before_commit)rB   r   result_futurer   r1   )appendr2   create_artifactr4   r8   r(   use_artifact	Exceptionformatr|   wandbfilesyncrf   StepPreparestartr3   store_manifest_filesr6   
concurrentfuturesFuturecommit_artifactresultshutdown)r   r:   r;   r<   r=   r>   r?   r@   rB   rC   rD   rF   rG   rI   rJ   rK   rL   rM   alias_specsrQ   	tag_specslatestmanifest_typer   r   commit_resultr   )rd   re   rM   r@   rK   r   r   rf   r   rN   c   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)$r:   r,   r;   r,   r<   r,   r=   r,   r>   r,   r?   r,   r@   rA   rB   r   rC   r'   rD   rE   rF   rA   rG   rH   rI   rH   rJ   r   rK   r   rL   rE   rM   rA   r   r'   r   )r    r!   r"   __annotations__r9   rO   rN   rr   r   r   r   r   r&   (   s<   
 0 &r&   )%__doc__
__future__r   concurrent.futuresr   rx   ru   rs   collections.abcr   r   typingr   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.    