
    ,OfH?                        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Z	d dl
Z	d dlmZmZmZmZmZ d dlmZ dd	lmZ  G d
 de      Zy)    )annotations)datetime)basename)AnyBinaryION)	AttributeCompletableGithubObjectNotSetOptis_optional)PaginatedList   )Constsc                     e Zd ZdZddZddZedd       Zedd       Zedd       Z	edd       Z
edd       Zed d	       Zed d
       Zed!d       Zed"d       Zed"d       Zedd       Zedd       Zedd       Zedd       Zedd       Zed#d       ZddZddeeeef	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d$dZdeef	 	 	 	 	 	 	 	 	 d%dZedf	 	 	 	 	 	 	 	 	 	 	 d&dZd'dZd(dZy))
GitReleasez
    This class represents GitReleases.

    The reference can be found here
    https://docs.github.com/en/rest/reference/repos#releases

    c                z   t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _	        t         | _
        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        y N)r
   _id_body_title	_tag_name_target_commitish_draft_prerelease_generate_release_notes_author_url_upload_url	_html_url_created_at_published_at_tarball_url_zipball_url_assetsselfs    1lib/python3.12/site-packages/github/GitRelease.py_initAttributeszGitRelease._initAttributesQ   s    #)%+
&,)/17'-,28>$>D$*	+1)/0628,2,2PV    c                P    | j                  d| j                  j                  i      S )Ntitle)get__repr__r   valuer%   s    r'   __repr__zGitRelease.__repr__d   s"    $++*;*; <==r)   c                d    | j                  | j                         | j                  j                  S r   )_completeIfNotSetr   r-   r%   s    r'   idzGitRelease.idg   s"    txx(xx~~r)   c                d    | j                  | j                         | j                  j                  S r   )r0   r   r-   r%   s    r'   bodyzGitRelease.bodyl   s$    tzz*zzr)   c                d    | j                  | j                         | j                  j                  S r   )r0   r   r-   r%   s    r'   r+   zGitRelease.titleq   $    t{{+{{   r)   c                d    | j                  | j                         | j                  j                  S r   )r0   r   r-   r%   s    r'   tag_namezGitRelease.tag_namev   $    t~~.~~###r)   c                d    | j                  | j                         | j                  j                  S r   )r0   r   r-   r%   s    r'   target_commitishzGitRelease.target_commitish{   s(    t556%%+++r)   c                d    | j                  | j                         | j                  j                  S r   )r0   r   r-   r%   s    r'   draftzGitRelease.draft   r5   r)   c                d    | j                  | j                         | j                  j                  S r   )r0   r   r-   r%   s    r'   
prereleasezGitRelease.prerelease   (    t//0%%%r)   c                d    | j                  | j                         | j                  j                  S r   )r0   r   r-   r%   s    r'   authorzGitRelease.author   $    t||,||!!!r)   c                d    | j                  | j                         | j                  j                  S r   )r0   r    r-   r%   s    r'   
created_atzGitRelease.created_at   r?   r)   c                d    | j                  | j                         | j                  j                  S r   )r0   r!   r-   r%   s    r'   published_atzGitRelease.published_at   s(    t112!!'''r)   c                d    | j                  | j                         | j                  j                  S r   )r0   r   r-   r%   s    r'   urlzGitRelease.url   s"    tyy)yyr)   c                d    | j                  | j                         | j                  j                  S r   )r0   r   r-   r%   s    r'   
upload_urlzGitRelease.upload_url   r?   r)   c                d    | j                  | j                         | j                  j                  S r   )r0   r   r-   r%   s    r'   html_urlzGitRelease.html_url   r8   r)   c                d    | j                  | j                         | j                  j                  S r   )r0   r"   r-   r%   s    r'   tarball_urlzGitRelease.tarball_url   (    t001  &&&r)   c                d    | j                  | j                         | j                  j                  S r   )r0   r#   r-   r%   s    r'   zipball_urlzGitRelease.zipball_url   rO   r)   c                d    | j                  | j                         | j                  j                  S r   )r0   r$   r-   r%   s    r'   assetszGitRelease.assets   rB   r)   c                V    | j                   j                  d| j                        \  }}y)z
        :calls: `DELETE /repos/{owner}/{repo}/releases/{release_id} <https://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#delete-a-release>`_
        DELETEN)
_requesterrequestJsonAndCheckrH   )r&   headersdatas      r'   delete_releasezGitRelease.delete_release   s"     ;;HdhhOr)   Fc	                   t        |t              sJ |       t        |t              sJ |       t        |t              sJ |       t        |t              sJ |       t        |t              sJ d       t        |t              sJ d       |dddt        fv sJ |       t        |t              sJ |       |t        u r| j
                  }|||||d}	|t        ur||	d<   |t        ur||	d<   |t        ur||	d	<   | j                  j                  d
| j                  |	      \  }
}t        j                  j                  | j                  |
|d      S )z
        :calls: `PATCH /repos/{owner}/{repo}/releases/{release_id} <https://docs.github.com/en/rest/releases/releases?apiVersion=2022-11-28#update-a-release>`_
        z%tag_name must be a str/unicode objectz-target_commitish must be a str/unicode objecttruefalselegacy)r7   namer3   r<   r>   r:   make_latestdiscussion_category_namePATCH)inputT	completed)
isinstancestrboolr   r
   r7   rV   rW   rH   githubr   )r&   r_   messager<   r>   r7   r:   r`   ra   post_parametersrX   rY   s               r'   update_releasezGitRelease.update_release   sb    $$*d*$'3'00'%&--&*d+7Z7+8S)R+RR)+S1b3bb1vw&AAN;NA3S9S;SS9v}}H $
 6)2BO./f$-8OM*#61:RO67;;GTXXUd;e  ++DOOWdVZ+[[r)    c                   t        |t              sJ |       t        |t              sJ |       |t        u st        |t              sJ |       d|i}|t        u rt        |      |d<   n||d<   i }|t        ur||d<   | j                  j                  d| j                  j                  d      d   |||      \  }}t        j                  j                  | j                  ||d	      S )
z
        :calls: `POST https://<upload_url>/repos/{owner}/{repo}/releases/{release_id}/assets <https://docs.github.com/en/rest/releases/assets?apiVersion=2022-11-28#upload-a-release-assett>`_
        labelr_   Content-TypePOST{?r   )
parametersrX   rc   Trd   )
rf   rg   r
   r   rV   requestBlobAndCheckrJ   splitri   GitReleaseAsset)	r&   pathro   content_typer_   rk   rX   resp_headersrY   s	            r'   upload_assetzGitRelease.upload_asset   s     $$*d*$%%,u,%v~D#!6<<6+2E*:6>&.tnOF#&*OF#"$v%&2GN#!__@@OO!!$'*& A 
d %%55doo|UYei5jjr)   c                   t        |t              sJ |       t        |t              sJ |       t        |t              sJ |       ||d}|t        ur|nt        j
                  }|t        |      d}| j                  j                  d| j                  j                  d      d   |||      \  }}	t        j                  j                  | j                  ||	d      S )	a  
        Uploads an asset.

        Unlike ``upload_asset()`` this method allows you to pass in a file-like object to upload.
        Note that this method is more strict and requires you to specify the ``name``, since there's no file name to infer these from.
        :calls: `POST https://<upload_url>/repos/{owner}/{repo}/releases/{release_id}/assets <https://docs.github.com/en/rest/reference/repos#upload-a-release-asset>`_
        :param file_like: binary file-like object, such as those returned by ``open("file_name", "rb")``. At the very minimum, this object must implement ``read()``.
        :param file_size: int, size in bytes of ``file_like``

        )ro   r_   )rp   zContent-Lengthrq   rr   r   )rs   rX   	file_likeTrd   )rf   rg   intr
   r   defaultMediaTyperV   requestMemoryBlobAndCheckrJ   ru   ri   rv   )
r&   r|   	file_sizer_   rx   ro   rk   rX   ry   rY   s
             r'   upload_asset_from_memoryz#GitRelease.upload_asset_from_memory  s    $ $$*d*$)S)494)%%,u,%$)48'36'A|vG^G^#/3y>R!__FFOO!!$'*& G 
d %%55doo|UYei5jjr)   c                    t         j                  j                  t         j                  j                  | j                  | j                   dd      S )z
        :calls: `GET /repos/{owner}/{repo}/releases/{release_id}/assets <https://docs.github.com/en/rest/releases/assets?apiVersion=2022-11-28#get-a-release-asset>`_
        z/assetsN)ri   r   rv   rV   rH   r%   s    r'   
get_assetszGitRelease.get_assets&  sD     ##11""22OOxxj 	
 	
r)   c                D   d|v r| j                  |d         | _        d|v r| j                  |d         | _        d|v r| j                  |d         | _        d|v r| j                  |d         | _        d|v r| j                  |d         | _        d|v r| j                  |d         | _        d|v r| j                  |d         | _	        d|v r| j                  |d         | _
        d	|v r2| j                  t        j                  j                  |d	         | _        d
|v r| j                  |d
         | _        d|v r| j                  |d         | _        d|v r| j                  |d         | _        d|v r| j%                  |d         | _        d|v r| j%                  |d         | _        d|v r| j                  |d         | _        d|v r| j                  |d         | _        d|v r3| j/                  t        j0                  j0                  |d         | _        y y )Nr1   r3   r_   r7   r:   r<   r>   generate_release_notesrA   rH   rJ   rL   rD   rF   rN   rQ   rS   )_makeIntAttributer   _makeStringAttributer   r   r   r   _makeBoolAttributer   r   r   _makeClassAttributeri   	NamedUserr   r   r   r   _makeDatetimeAttributer    r!   r"   r#   _makeListOfClassesAttributerv   r$   )r&   
attributess     r'   _useAttributeszGitRelease._useAttributes1  sA   :--j.>?DHZ22:f3EFDJZ33Jv4FGDK#!66z*7MNDN+%)%>%>zJ\?]%^D"j 11*W2EFDK:%#66z,7OPD#z1+/+B+B:NfCg+hD(z!33F4D4D4N4NPZ[cPdeDLJ11*U2CDDI:%#88L9QRD#!66z*7MNDN:%#:::l;STDZ'!%!<!<Z=W!XDJ& $ 9 9*]:S TDJ& $ 9 9*]:S TDz!;;&&66
88LDL "r)   N)returnNone)r   rg   )r   r}   )r   rh   )r   zgithub.NamedUser.NamedUser)r   r   )r   z,list[github.GitReleaseAsset.GitReleaseAsset])r_   rg   rj   rg   r<   rh   r>   rh   r7   Opt[str]r:   r   r`   r   ra   r   r   r   )
rw   rg   ro   rg   rx   r   r_   r   r   &github.GitReleaseAsset.GitReleaseAsset)r|   r   r   r}   r_   rg   rx   r   ro   rg   r   r   )r   z5PaginatedList[github.GitReleaseAsset.GitReleaseAsset])r   zdict[str, Any]r   r   )__name__
__module____qualname____doc__r(   r.   propertyr1   r3   r+   r7   r:   r<   r>   rA   rD   rF   rH   rJ   rL   rN   rQ   rS   rZ   r
   rl   rz   r   r   r    r)   r'   r   r   H   sk   W&>       ! ! $ $ , , ! ! & & " " & & ( (   & & $ $ ' ' ' ' " "P  #%+ &-3)\)\ )\ 	)\
 )\ )\ #)\ )\ #+)\ 
)\X ')6\bkk #k8@kQYk	/k@ "(!k!k !k 	!k
 !k !k 
0!kF	
$r)   r   )
__future__r   r   os.pathr   typingr   r   github.GitReleaseAssetri   github.NamedUsergithub.GithubObjectr   r	   r
   r   r   github.PaginatedListr   rm   r   r   r   r)   r'   <module>r      s5   t #       \ \ . M( Mr)   