
    ,Ofh                    ^   d dl mZ d dlZd dlmZ d dlmZmZ d dlZ	d dl
Z	d dlZ	d dlZ	d dlZ	d dlZ	d dlZ	d dlZ	d dlZ	d dlZ	d dlZ	d dl	mZ d dlmZmZmZmZmZmZmZmZ d dlmZ er<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# 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(  G d de      Z)y)    )annotationsN)datetime)TYPE_CHECKINGAny)Consts)	AttributeCompletableGithubObjectNotSetOpt
is_definedis_optionalis_optional_listis_undefined)PaginatedList)IssueComment)
IssueEvent)IssuePullRequest)Label)	Milestone)	NamedUser)PullRequest)Reaction)
Repository)TimelineEventc                     e Zd ZdZd4dZd5dZed6d       Zed7d       Zed5d       Z	ed8d       Z
ed6d       Zed9d	       Zed5d
       Zed8d       Zed5d       Zed5d       Zed9d       Zed:d       Zed5d       Zed;d       Zed9d       Zed<d       Zed=d       Zed5d       Zed>d       Zed5d       Zed8d       Zed5d       Zed?d       Zed@d       Zed>d       ZedAd       Z dBdZ!dCdZ"dDd Z#dEd!Z$d4d"Z%e&e&e&e&e&e&e&e&f	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dFd#Z'dGd$Z(d4d%Z)dHd&Z*e&fdId'Z+dJd(Z,dKd)Z-dCd*Z.dLd+Z/dDd,Z0dMd-Z1dNd.Z2dOd/Z3dPd0Z4ed9d1       Z5dQd2Z6y3)RIssuez
    This class represents Issues.

    The reference can be found here
    https://docs.github.com/en/rest/reference/issues

    c                @   t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _	        t         | _
        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        t         | _        y N)r
   _id_active_lock_reason	_assignee
_assignees_body
_closed_at
_closed_by	_comments_comments_url_created_at_events_url	_html_url_labels_labels_url_locked
_milestone_number_pull_request_repository_state_state_reason_title_updated_at_url_user
_reactionsselfs    ,lib/python3.12/site-packages/github/Issue.py_initAttributeszIssue._initAttributesp   s    #):@ 6<6<%+
/506)/-306+1)//5+1(.06'-:@28&,4:&,06$*	+1
+1    c                z    | j                  | j                  j                  | j                  j                  d      S )N)numbertitle)get__repr__r/   valuer4   r9   s    r;   __repr__zIssue.__repr__   s,    4<<+=+=HYHY Z[[r=   c                d    | j                  | j                         | j                  j                  S r   )_completeIfNotSetr!   rB   r9   s    r;   assigneezIssue.assignee   $    t~~.~~###r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r"   rB   r9   s    r;   	assigneeszIssue.assignees   $    t/$$$r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r#   rB   r9   s    r;   bodyz
Issue.body   $    tzz*zzr=   c                d    | j                  | j                         | j                  j                  S r   )rE   r$   rB   r9   s    r;   	closed_atzIssue.closed_at   rJ   r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r%   rB   r9   s    r;   	closed_byzIssue.closed_by   rJ   r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r&   rB   r9   s    r;   commentszIssue.comments   rG   r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r'   rB   r9   s    r;   comments_urlzIssue.comments_url   (    t112!!'''r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r(   rB   r9   s    r;   
created_atzIssue.created_at   (    t//0%%%r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r)   rB   r9   s    r;   
events_urlzIssue.events_url   rY   r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r*   rB   r9   s    r;   html_urlzIssue.html_url   rG   r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r   rB   r9   s    r;   idzIssue.id   s"    txx(xx~~r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r+   rB   r9   s    r;   labelszIssue.labels   $    t||,||!!!r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r,   rB   r9   s    r;   
labels_urlzIssue.labels_url   rY   r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r.   rB   r9   s    r;   	milestonezIssue.milestone   rJ   r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r/   rB   r9   s    r;   r?   zIssue.number   rb   r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r0   rB   r9   s    r;   pull_requestzIssue.pull_request   rV   r=   c                   | j                  | j                         t        | j                        rdj                  | j                  j                  d      d d       }t        j                  j                  t        j                  j                  | j                  | j                  d|id            | _        | j                  j                  S )N/urlF	completed)rE   r1   r   joinrm   splitgithubGithubObject_ValuedAttributer   
_requester_headersrB   )r:   repo_urls     r;   
repositoryzIssue.repository   s    t//0(()xxs 3CR 89H%22CC!!,,T__dmmeU]M^jo,p D %%%r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r2   rB   r9   s    r;   statezIssue.state   $    t{{+{{   r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r3   rB   r9   s    r;   state_reasonzIssue.state_reason   rV   r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r4   rB   r9   s    r;   r@   zIssue.title   r{   r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r5   rB   r9   s    r;   
updated_atzIssue.updated_at   rY   r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r6   rB   r9   s    r;   rm   z	Issue.url   s"    tyy)yyr=   c                d    | j                  | j                         | j                  j                  S r   )rE   r7   rB   r9   s    r;   userz
Issue.user  rM   r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r-   rB   r9   s    r;   lockedzIssue.locked  rb   r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r    rB   r9   s    r;   active_lock_reasonzIssue.active_lock_reason  s(    t778''---r=   c                d    | j                  | j                         | j                  j                  S r   )rE   r8   rB   r9   s    r;   	reactionszIssue.reactions  rJ   r=   c           	         | j                   j                  ddj                  | j                  j	                  dd                  \  }}t
        j                  j                  | j                   ||d      S )zw
        :calls: `GET /repos/{owner}/{repo}/pulls/{number} <https://docs.github.com/en/rest/reference/pulls>`_
        GETz/pulls/z/issues/   Trn   )ru   requestJsonAndCheckrp   rm   rsplitrr   r   r:   headersdatas      r;   as_pull_requestzIssue.as_pull_request  sb     ;;E9>>RVRZRZRaRablnoRpCqr!!--doowX\-]]r=   c                B   t        d |D              sJ |       d|D cg c]4  }t        |t        j                  j                        r|j                  n|6 c}i}| j
                  j                  d| j                   d|      \  }}| j                  |       yc c}w )z
        :calls: `POST /repos/{owner}/{repo}/issues/{number}/assignees <https://docs.github.com/en/rest/reference/issues#assignees>`_
        c              3  p   K   | ].  }t        |t        j                  j                  t        f       0 y wr   
isinstancerr   r   str.0elements     r;   	<genexpr>z)Issue.add_to_assignees.<locals>.<genexpr>"  (     cg:g(8(8(B(BC'HIc   46rI   POST
/assigneesinputN	allr   rr   r   loginru   r   rm   _useAttributesr:   rI   rF   post_parametersr   r   s         r;   add_to_assigneeszIssue.add_to_assignees  s     cYbccnennc ) #-Xv7G7G7Q7Q"RX``
 ;;FtxxjPZD[cr;sD!   9Bc                   t        d |D              sJ |       |D cg c]4  }t        |t        j                  j                        r|j                  n|6 }}| j
                  j                  d| j                   d|      \  }}yc c}w )z
        :calls: `POST /repos/{owner}/{repo}/issues/{number}/labels <https://docs.github.com/en/rest/reference/issues#labels>`_
        c              3  p   K   | ].  }t        |t        j                  j                  t        f       0 y wr   r   rr   r   r   r   s     r;   r   z&Issue.add_to_labels.<locals>.<genexpr>0  &     Xg:g(:(:C'@AXr   r   /labelsr   Nr   r   rr   r   nameru   r   rm   r:   ra   labelr   r   r   s         r;   add_to_labelszIssue.add_to_labels,  s     XQWXX`Z``Xgmn^cE6<<;M;M)N5::TYYnn;;FtxxjPWDX`o;p o   9Bc                    t        |t              sJ |       d|i}| j                  j                  d| j                   d|      \  }}t
        j                  j                  | j                  ||d      S )z
        :calls: `POST /repos/{owner}/{repo}/issues/{number}/comments <https://docs.github.com/en/rest/reference/issues#comments>`_
        rL   r   	/commentsr   Trn   )r   r   ru   r   rm   rr   r   )r:   rL   r   r   r   s        r;   create_commentzIssue.create_comment4  sx     $$*d*$D
 ;;FtxxjPYDZbq;r""//$Z^/__r=   c                \    | j                   j                  d| j                   d      \  }}y)z
        :calls: `DELETE /repos/{owner}/{repo}/issues/{number}/labels <https://docs.github.com/en/rest/reference/issues#labels>`_
        DELETEr   Nru   r   rm   r   s      r;   delete_labelszIssue.delete_labels?  s*     ;;H
RYFZ[r=   c	                   t        |t              sJ |       t        |t              sJ |       |1t        |t        j                  j                  t        f      sJ |       t	        |t        j                  j                  t        f      sJ |       t        |t              sJ |       |+t        |t        j
                  j
                        sJ |       t	        |t              sJ |       t        j                  |||||t        |t        j                  j                        r|j                  n|xs dt        |t        j
                  j
                        r|j                  n|xs dd      }	t        |      rC|D 
cg c]4  }
t        |
t        j                  j                        r|
j                  n|
6 c}
|	d<   | j                  j                  d| j                  |	      \  }}| j                  |       yc c}
w )a9  
        :calls: `PATCH /repos/{owner}/{repo}/issues/{number} <https://docs.github.com/en/rest/reference/issues>`_
        :param assignee: deprecated, use `assignees` instead. `assignee=None` means to remove current assignee.
        :param milestone: `milestone=None` means to remove current milestone.
        N )r@   rL   rz   r}   ra   rF   rf   rI   PATCHr   )r   r   rr   r   r   r   r
   remove_unset_itemsr   	_identityr   ru   r   rm   r   )r:   r@   rL   rF   rz   rf   ra   rI   r}   r   r   r   r   s                r;   editz
Issue.editE  s     5#&--&4%+t+%;x&:J:J:T:TVY9Z#[e]ee[	F,<,<,F,F+LMXyXM5#&--& K	6;K;K;U;U$VaXaaV,4f4, 33 , h(8(8(B(BC %..n"i)9)9)C)CD '00o2
  i   ), &09I9I9S9S%T!!Zaa,OK(
 ;;GTXXUd;eD!,s   9G>c                    t        |t              sJ |       d|i}| j                  j                  d| j                   d|dt
        j                  i      \  }}y)z
        :calls: `PUT /repos/{owner}/{repo}/issues/{issue_number}/lock <https://docs.github.com/en/rest/reference/issues>`_
        lock_reasonPUT/lockAcceptr   r   N)r   r   ru   r   rm   r   mediaTypeLockReasonPreview)r:   r   put_parametersr   r   s        r;   lockz
Issue.lockv  sb     +s+8[8+'5;;xxj v@@A	 < 
r=   c                \    | j                   j                  d| j                   d      \  }}y)z
        :calls: `DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock <https://docs.github.com/en/rest/reference/issues>`_
        r   r   Nr   r   s      r;   unlockzIssue.unlock  s*     ;;H
RWFXYr=   c                   t        |t              sJ |       | j                  j                  d| j	                  | j
                         d|       \  }}t        j                  j                  | j                  ||d      S )z
        :calls: `GET /repos/{owner}/{repo}/issues/comments/{id} <https://docs.github.com/en/rest/reference/issues#comments>`_
        r   z
/comments/Trn   )r   intru   r   
_parentUrlrm   rr   r   )r:   r_   r   r   s       r;   get_commentzIssue.get_comment  sw     "c"&B&";;EdooVZV^V^F_E``jkmjnCop""//$Z^/__r=   c                    i }t        |      r+t        |t              sJ |       |j                  d      |d<   t	        t
        j                  j                  | j                  | j                   d|      S )z
        :calls: `GET /repos/{owner}/{repo}/issues/{number}/comments <https://docs.github.com/en/rest/reference/issues#comments>`_
        z%Y-%m-%dT%H:%M:%SZsincer   )	r   r   r   strftimer   rr   r   ru   rm   )r:   r   url_parameterss      r;   get_commentszIssue.get_comments  sn     eeX.55.&+nn5I&JN7#,,OOxxj	"	
 	
r=   c                    t        t        j                  j                  | j                  | j                   dddt
        j                  i      S )z
        :calls: `GET /repos/{owner}/{repo}/issues/{issue_number}/events <https://docs.github.com/en/rest/reference/issues#events>`_
        z/eventsNr   r   )r   rr   r   ru   rm   r   r   r9   s    r;   
get_eventszIssue.get_events  sF     ((OOxxj v@@A
 	
r=   c                |    t        t        j                  j                  | j                  | j                   dd      S )z
        :calls: `GET /repos/{owner}/{repo}/issues/{number}/labels <https://docs.github.com/en/rest/reference/issues#labels>`_
        r   N)r   rr   r   ru   rm   r9   s    r;   
get_labelszIssue.get_labels  s/     V\\//TXXJgBVX\]]r=   c                B   t        d |D              sJ |       d|D cg c]4  }t        |t        j                  j                        r|j                  n|6 c}i}| j
                  j                  d| j                   d|      \  }}| j                  |       yc c}w )z
        :calls: `DELETE /repos/{owner}/{repo}/issues/{number}/assignees <https://docs.github.com/en/rest/reference/issues#assignees>`_
        c              3  p   K   | ].  }t        |t        j                  j                  t        f       0 y wr   r   r   s     r;   r   z.Issue.remove_from_assignees.<locals>.<genexpr>  r   r   rI   r   r   r   Nr   r   s         r;   remove_from_assigneeszIssue.remove_from_assignees  s     cYbccnennc ) #-Xv7G7G7Q7Q"RX``
 ;;H
R\F]et;uD!r   c                b   t        |t        j                  j                  t        f      sJ |       t        |t        j                  j                        r|j                  }nt
        j                  j                  |      }| j                  j                  d| j                   d|       \  }}y)z
        :calls: `DELETE /repos/{owner}/{repo}/issues/{number}/labels/{name} <https://docs.github.com/en/rest/reference/issues#labels>`_
        r   z/labels/N)r   rr   r   r   r   urllibparsequoteru   r   rm   )r:   r   r   r   s       r;   remove_from_labelszIssue.remove_from_labels  s     %&,,"4"4c!:;BUB;eV\\//0OOELL&&u-E;;H
RZ[`ZaFbcr=   c                   t        d |D              sJ |       |D cg c]4  }t        |t        j                  j                        r|j                  n|6 }}| j
                  j                  d| j                   d|      \  }}yc c}w )z
        :calls: `PUT /repos/{owner}/{repo}/issues/{number}/labels <https://docs.github.com/en/rest/reference/issues#labels>`_
        c              3  p   K   | ].  }t        |t        j                  j                  t        f       0 y wr   r   r   s     r;   r   z#Issue.set_labels.<locals>.<genexpr>  r   r   r   r   r   Nr   r   s         r;   
set_labelszIssue.set_labels  s     XQWXX`Z``Xgmn^cE6<<;M;M)N5::TYYnn;;EdhhZwCW_n;o or   c                    t        t        j                  j                  | j                  | j                   dddt
        j                  i      S )z
        :calls: `GET /repos/{owner}/{repo}/issues/{number}/reactions <https://docs.github.com/en/rest/reference/reactions#list-reactions-for-an-issue>`_
        
/reactionsNr   r   )r   rr   r   ru   rm   r   mediaTypeReactionsPreviewr9   s    r;   get_reactionszIssue.get_reactions  sD     OO$$OOxxj
#v??@
 	
r=   c                   t        |t              sJ |       d|i}| j                  j                  d| j                   d|dt
        j                  i      \  }}t        j                  j                  | j                  ||d      S )z
        :calls: `POST /repos/{owner}/{repo}/issues/{number}/reactions <https://docs.github.com/en/rest/reference/reactions>`_
        contentr   r   r   r   Trn   )	r   r   ru   r   rm   r   r   rr   r   )r:   reaction_typer   r   r   s        r;   create_reactionzIssue.create_reaction  s     --<}<-}
 ;;xxj
#!v??@	 < 
 ''$RV'WWr=   c                    t        |t              sJ |       | j                  j                  d| j                   d| dt
        j                  i      \  }}}|dk(  S )z
        :calls: `DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id} <https://docs.github.com/en/rest/reference/reactions#delete-an-issue-reaction>`_
        r   z/reactions/r   r      )r   r   ru   requestJsonrm   r   r   )r:   reaction_idstatus_s       r;   delete_reactionzIssue.delete_reaction  sg     +s+8[8+22xxjK=1v??@ 3 
1
 }r=   c                    t        t        j                  j                  | j                  | j                   dddt
        j                  i      S )z
        :calls: `GET /repos/{owner}/{repo}/issues/{number}/timeline <https://docs.github.com/en/rest/reference/issues#list-timeline-events-for-an-issue>`_
        z	/timelineNr   r   )r   rr   r   ru   rm   r   issueTimelineEventsPreviewr9   s    r;   get_timelinezIssue.get_timeline  sF       ..OOxxj	"v@@A
 	
r=   c                    | j                   S r   )r?   r9   s    r;   r   zIssue._identity  s    {{r=   c                T   d|v r| j                  |d         | _        d|v r2| j                  t        j                  j                  |d         | _        d|v r3| j                  t        j                  j                  |d         | _        nld|v rh|d   4| j                  t        j                  j                  |d   g      | _        n/| j                  t        j                  j                  g       | _        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 r2| j                  t        j&                  j&                  |d         | _        d|v r| j                  |d         | _        d|v r| j-                  |d         | _        d|v r2| j                  t        j0                  j0                  |d         | _        d|v r| j                  |d         | _        d|v r2| j                  t        j6                  j6                  |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 r2| j                  t        j                  j                  |d         | _$        d|v r| jK                  |d         | _&        y y )Nr   rF   rI   rL   rO   rQ   rS   rU   rX   r[   r]   r_   ra   rd   r   rf   r?   ri   rx   rz   r}   r@   r   rm   r   r   )'_makeStringAttributer    _makeClassAttributerr   r   r!   _makeListOfClassesAttributer"   r#   _makeDatetimeAttributer$   r%   _makeIntAttributer&   r'   r(   r)   r*   r   r   r+   r,   _makeBoolAttributer-   r   r.   r/   r   r0   r   r1   r2   r3   r4   r5   r6   r7   _makeDictAttributer8   )r:   
attributess     r;   r   zIssue._useAttributes  s   :-'+'@'@L`Aa'bD$#!55f6F6F6P6PR\]gRhiDN*$">>v?O?O?Y?Y[efq[rsDO:%*%1"&"B"B6CSCSC]C]`jku`v_w"x"&"B"B6CSCSC]C]_a"bZ22:f3EFDJ*$"99*[:QRDO*$"66v7G7G7Q7QS]^iSjkDO#!33Jz4JKDNZ'!%!:!::n;U!VD:%#:::l;STD:%#88L9QRD#!66z*7MNDN:--j.>?DHz!;;FLL<N<NPZ[cPdeDL:%#88L9QRDz!22:h3GHDL*$"66v7G7G7Q7QS]^iSjkDOz!11*X2FGDLZ'!%!9!9''88*^:T"D :%#778I8I8T8TV`amVnoDj 33Jw4GHDKZ'!%!:!::n;U!VDj 33Jw4GHDK:%#:::l;STDJ11*U2CDDIZ11&2B2B2L2LjY_N`aDJ*$"55j6MNDO %r=   N)returnNone)r  r   )r  zNamedUser | None)r  zlist[NamedUser])r  r   )r  r   )r  zlist[Label])r  r   )r  zIssuePullRequest | None)r  r   )r  z
str | None)r  r   )r  bool)r  dict)r  r   )rI   zNamedUser | strr  r  )ra   Label | strr  r  )rL   r   r  r   )r@   Opt[str]rL   r  rF   zOpt[str | NamedUser | None]rz   r  rf   zOpt[Milestone | None]ra   zOpt[list[str]]rI   zOpt[list[NamedUser | str]]r}   r  r  r  )r   r   r  r  )r_   r   r  r   )r   zOpt[datetime]r  zPaginatedList[IssueComment])r  zPaginatedList[IssueEvent])r  zPaginatedList[Label])r   r  r  r  )r  zPaginatedList[Reaction])r   r   r  r   )r   r   r  r  )r  zPaginatedList[TimelineEvent])r  zdict[str, Any]r  r  )7__name__
__module____qualname____doc__r<   rC   propertyrF   rI   rL   rO   rQ   rS   rU   rX   r[   r]   r_   ra   rd   rf   r?   ri   rx   rz   r}   r@   r   rm   r   r   r   r   r   r   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r=   r;   r   r   g   s   28\ $ $ % %     % % % % $ $ ( ( & & & & $ $   " " & & % % " " ( ( & & ! ! ( ( ! ! & &       " " . . % %^"q	`\ !06 +1!'06!'/"/" /" .	/"
 /" )/" /" ./" /" 
/"b
Z` 39 
 

^"	dp

X 


  ;Or=   r   )*
__future__r   urllib.parser   r   typingr   r   github.GithubObjectrr   github.IssueCommentgithub.IssueEventgithub.IssuePullRequestgithub.Labelgithub.Milestonegithub.NamedUsergithub.PullRequestgithub.Reactiongithub.Repositorygithub.TimelineEventr   r   r	   r
   r   r   r   r   r   github.PaginatedListr   r   r   r   r   r   r   r   r   r   r   r   r  r=   r;   <module>r     s~   x #   %            	 	 	 /0,8"**.(,2`O# `Or=   