+
    oÆFj-  ã                   óì   € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtH	t	 ^ RI
Ht ^ RIHtHt ^ RIt^ RIt ! R R4      t]! RR7       ! R	 R
4      4       t ! R R]P(                  P*                  4      tR# )z)Crash database implementation for Github.N)ÚCallableÚMapping)Ú	dataclass)ÚAnyÚSelfc                   óÔ   a € ] tR t^t o Rt]P
                  ! 4       tRV 3R lR lltV 3R lR ltV 3R lR lt	V 3R	 lR
 lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R ltRtV tR# )ÚGithubz:Wrapper around Github API, used to log in and post issues.Nc                ó8   <€ V ^8„  d   QhRS[ RS[R,          RR/# )é   Ú	client_idÚmessage_callbackNÚreturn)Ústrr   )ÚformatÚ__classdict__s   "€Ú</usr/lib/python3/dist-packages/apport/crashdb_impl/github.pyÚ__annotate__ÚGithub.__annotate__   s)   ø€ ÷ 1ñ 1Ùð1Ù08¸4µð1à	ñ1ó    c                óV   € Wn         R V n        R V n        RV n        RV n        W n        R # ©Ng        )Ú_Github__client_idÚ_Github__authentication_dataÚ_Github__access_tokenÚ_Github__cooldownÚ_Github__expiryr   )Úselfr   r   s   &&&r   Ú__init__ÚGithub.__init__   s.   € ð %ÔØ<@ˆÔ"Ø"ˆÔØˆŒØˆŒØ 0Ör   c                ó,   <€ V ^8„  d   QhRS[ RS[ RS[/# ©r
   ÚurlÚdatar   )r   r   )r   r   s   "€r   r   r   (   s"   ø€ ÷ .ñ .™ð .¡Cð .©Cñ .r   c                óÚ  € RR/pV P                   '       d   RV P                    2VR&   \        P                  P                  WP	                  R4      VRR7      p \        P                  P                  VRR	7      ;_uu_ 4       p\        P                  ! VP                  4       4      uuR
R
R
4       \        P                  ! 4       V n
        #   + '       g   i     MT; i  \        P                  P                   d0   pT P                  '       d   T P                  RRT R24       ThR
p?ii ; i \        P                  ! 4       T n
        R
#   \        P                  ! 4       T n
        i ; i)zCPosts the given data to the given URL.
Uses auth token if availableÚAcceptzapplication/vnd.github.v3+jsonztoken ÚAuthorizationzutf-8ÚPOST)r"   ÚheadersÚmethodg      @)ÚtimeoutNzFailed connectionzFailed connection to z6.
Please check your internet connection and try again.)r   ÚurllibÚrequestÚRequestÚencodeÚurlopenÚjsonÚloadsÚreadÚtimeÚ_Github__last_requestÚerrorÚURLErrorr   )r   r!   r"   r'   r+   ÚresponseÚerrs   &&&    r   Ú_postÚGithub._post(   s$  € ð Ð=Ð>ˆØ××ÐØ)/°×0CÑ0CÐ/DÐ'EˆG�OÑ$Ü—.‘.×(Ñ(Ø—k‘k 'Ó*°GÀFð )ó 
ˆð	.Ü—‘×'Ñ'¨¸Ð'×=Ô=ÀÜ—z’z (§-¡-£/Ó2÷ >Ñ=ô #'§)¢)£+ˆDÕ÷ >×=ûä�|‰|×$Ñ$ô 	Ø×$×$Ð$Ø×%Ñ%Ø'Ø+¨C¨5ð 1Kð Lôð
 ˆIûð	úð >ô #'§)¢)£+ˆDÖø¤$§)¢)£+ˆDÕúsH   Á)C  Â$CÂ(
C  ÃC	ÃC  ÃE ÃC  Ã D.Ã?*D)Ä)D.Ä.E ÅE*c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# r    ©r   Údictr   )r   r   s   "€r   r   r   ?   s"   ø€ ÷ =ñ =¡cð =±ð =¹#ñ =r   c                ó`   € V P                  V\        P                  P                  V4      4      # )z$Authenticate against the GitHub API.)r8   r*   ÚparseÚ	urlencode)r   r!   r"   s   &&&r   Úapi_authenticationÚGithub.api_authentication?   s"   € à�z‰z˜#œvŸ|™|×5Ñ5°dÓ;Ó<Ð<r   c                ó2   <€ V ^8„  d   QhRS[ RS[ RS[RS[/# )r
   ÚownerÚrepor"   r   r;   )r   r   s   "€r   r   r   C   s)   ø€ ÷ 1ñ 1¡Cð 1©sð 1¹$ð 1Á3ñ 1r   c                ó`   € RV RV R2pV P                  V\        P                  ! V4      4      # )z'Open a new issue on the GitHub project.zhttps://api.github.com/repos/Ú/z/issues)r8   r/   Údumps)r   rC   rD   r"   r!   s   &&&& r   Úapi_open_issueÚGithub.api_open_issueC   s0   € à-¨e¨W°A°d°V¸7ÐCˆØ�z‰z˜#œtŸzšz¨$Ó/Ó0Ð0r   c                ó    <€ V ^8„  d   QhRS[ /# ©r
   r   )r   )r   r   s   "€r   r   r   H   s   ø€ ÷ ñ ™4ñ r   c                ó˜  € RV P                   RR/pRpV P                  W!4      pRpVR,          pVR,          pV P                  '       d#   V P                  RVP                  W%R	7      4       RV P                   R
VR
,           RR/V n        VR,          V n        \        VR,          4      \        P                  ! 4       ,           V n        V # )z2Enters login process. At exit, login process ends.r   ÚscopeÚpublic_repoz$https://github.com/login/device/codezÖPosting an issue requires a Github account. If you have one, please follow these steps to log in.

Open the following URL. When requested, write this code to enable apport to open an issue.
URL:  {url}
Code: {code}Úverification_uriÚ	user_codezLogin required)r!   ÚcodeÚdevice_codeÚ
grant_typez,urn:ietf:params:oauth:grant-type:device_codeÚintervalÚ
expires_in)	r   r@   r   r   r   r   Úintr2   r   )r   r"   r!   r6   ÚpromptrQ   s   &     r   Ú	__enter__ÚGithub.__enter__H   sÍ   € à˜T×-Ñ-¨w¸ÐFˆØ4ˆØ×*Ñ*¨3Ó5ˆðð 	ð Ð)Õ*ˆØ˜Õ$ˆà× × Ð Ø×!Ñ!Ð"2°F·M±MÀc°MÓ4UÔVð ˜×)Ñ)Ø˜h }Õ5Ð6ØÐHð&
ˆÔ"ð
 # :Õ.ˆŒÜ˜H \Õ2Ó3´d·i²i³kÕAˆŒàˆr   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r
   Ú_r   N)r   )r   r   s   "€r   r   r   h   s   ø€ ÷ ñ ™3ð  4ñ r   c                ó0   € R V n         RV n        RV n        R # r   )r   r   r   )r   r[   s   &*r   Ú__exit__ÚGithub.__exit__h   s   € Ø%)ˆÔ"ØˆŒØˆŽr   c                ó    <€ V ^8„  d   QhRS[ /# rK   )Úbool)r   r   s   "€r   r   r   m   s   ø€ ÷ !Hñ !H©ñ !Hr   c                óŽ  € V P                   '       g   \        R4      h\        P                  ! 4       pV P                  WP                  ,
          ,
          pW,           V P
                  8”  d0   V P                  '       d   V P                  RR4       \        R4      hV^ 8”  d   \        P                  ! V4       RpV P                  W0P                   4      pRV9   dF   VR,          R8X  d   R# VR,          R	8X  d   \        VR
,          4      V n        R# \        RV 24      hRV9   d   VR,          V n
        R# \        RV 24      h)z^Asks Github if the user has logged in already.
It respects the wait-time requested by Github.
z9Authentication not started. Use a with statement to do sozFailed loginz0Github authentication expired. Please try again.zGithub authentication expiredz+https://github.com/login/oauth/access_tokenr4   Úauthorization_pendingFÚ	slow_downrT   zUnknown error from Github: Úaccess_tokenTzUnknown response from Github: )r   ÚRuntimeErrorr2   r   r3   r   r   Úsleepr@   rV   r   )r   Úcurrent_timeÚwaittimer!   r6   s   &    r   Úauthentication_completeÚGithub.authentication_completem   s'  € ð ×)×)Ð)ÜØKóð ô —y’y“{ˆØ—?‘? l×5HÑ5HÕ&HÕIˆØÕ" T§]¡]Ô2Ø×$×$Ð$Ø×%Ñ%Ø"Ð$Vôô Ð>Ó?Ð?Ø�aŒ<Ü�JŠJ�xÔ à;ˆØ×*Ñ*¨3×0JÑ0JÓKˆà�hÔØ˜Õ Ð$;Ô;ÙØ˜Õ  KÔ/Ü"% h¨zÕ&:Ó";�”ÙÜÐ!<¸X¸JÐGÓHÐHØ˜XÔ%Ø"*¨>Õ":ˆDÔÙÜÐ;¸H¸:ÐFÓGÐGr   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )r
   r3   )Úfloat)r   r   s   "€r   r   r      s   ø‡ ‚ ñ Ñ'ò r   )Ú__access_tokenÚ__authentication_dataÚ__client_idÚ
__cooldownÚ__expiryÚ__last_requestr   ©N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r2   r3   r   r8   r@   rH   rX   r]   ri   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r      sd   ø‡ € ÙDà ŸIšI›K€N÷1ò 1÷.ð .÷.=ð =÷1ð 1÷
ð ÷@ð ÷
!Hð !H÷i ƒ r   r   T)Úfrozenc                   ó,   a € ] tR t^‘t o V 3R ltRtV tR# )ÚIssueHandlec                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )r
   r!   )r   )r   r   s   "€r   r   ÚIssueHandle.__annotate__‘   s   ø‡ ‚ á	�Hò r   © N)rt   ru   rv   rw   ry   rz   r{   r|   s   @r   r   r   ‘   s   ø‡ ‡ „ r   r   c                   ó„  a € ] tR t^–t o RtV 3R lR ltV 3R lR ltR+V 3R lR lltR,V 3R	 lR
 lltV 3R lR lt	R t
V 3R lR ltR tR tV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltR tV 3R lR ltV 3R lR  ltV 3R! lR" ltV 3R# lR$ ltR+V 3R% lR& lltV 3R' lR( ltR-R) ltR*tV tR# ).ÚCrashDatabasezbGithub crash database.
This is a Apport CrashDB implementation for interacting with Github issues
c                óN   <€ V ^8„  d   QhRS[ R,          RS[S[ S[3,          RR/# )r
   Ú	auth_fileNÚoptionsr   r;   )r   r   s   "€r   r   ÚCrashDatabase.__annotate__›   s.   ø€ ÷ *ñ *¡#¨¥*ð *±t¹CÁ¸Hµ~ð *È$ñ *r   c                óø   € \         P                  P                  P                  WV4       VR,          V n        VR,          V n        VR,          V n        \        VR,          4      V n        RV n	        RV n
        R# )z<Initialize some variables. Login is delayed until necessary.Úrepository_ownerÚrepository_nameÚgithub_app_idÚlabelsN)ÚapportÚcrashdbr„   r   rŠ   r‹   Úapp_idÚsetr�   Ú	issue_urlÚgithub)r   r†   r‡   s   &&&r   r   ÚCrashDatabase.__init__›   sc   € ä�‰×$Ñ$×-Ñ-¨d¸wÔGØ 'Ð(:Õ ;ˆÔØ&Ð'8Õ9ˆÔØ˜oÕ.ˆŒÜ˜' (Õ+Ó,ˆŒØˆŒØ%)ˆŽr   c                ór   <€ V ^8„  d   QhRS[ S[S[3,          RS[S[S[S[S[,          ,          3,          /# )r
   Úreportr   )r   r   r   r<   Úlist)r   r   s   "€r   r   rˆ   ¥   s7   ø€ ÷ 

ñ 

¡W©S±#¨XÕ%6ð 

¹4ÁÁSÉ4ÑPSÍ9Å_Ð@TÕ;Uñ 

r   c                óŽ   € RpVP                  4        F  w  r4VRV RV R2,          pK  	  RRRVR\        V P                  4      /# )	z>Formats report info as markdown and creates Github issue JSON.Ú z**z**
z

ÚtitlezIssue submitted via apportÚbodyr�   )Úitemsr—   r�   )r   r–   Úbody_markdownÚkeyÚvalues   &&   r   Ú_format_reportÚCrashDatabase._format_report¥   sW   € àˆØ Ÿ,™,ž.‰JˆCØ˜r #  d¨5¨'°Ð6Õ6ŠMñ )ð Ð1Ø�MØ”d˜4Ÿ;™;Ó'ð
ð 	
r   Nc                ó4   <€ V ^8„  d   QhRS[ R,          RS[/# )r
   Úuser_message_callbackNr   )r   r   )r   r   s   "€r   r   rˆ   ±   s   ø€ ÷ ñ ±8¸dµ?ð Éfñ r   c                ó°   € \        V P                  V4      ;_uu_ 4       pVP                  4       '       g   K  VuuR R R 4       #   + '       g   i     R # ; irs   )r   r�   ri   )r   r£   r“   s   && r   Ú_github_loginÚCrashDatabase._github_login±   s:   € Ü�D—K‘KÐ!6×7Ô7¸6Ø×4Ñ4×6Ò6ÙØ÷ 8×7×7Ó7ús   ŸA¶AÁA	c                ód   <€ V ^8„  d   QhRS[ S[S[3,          RS[R,          RS[R,          RS[/# )r
   r–   Úprogress_callbackNr£   r   )r   r   r   r   r   )r   r   s   "€r   r   rˆ   ·   sD   ø€ ÷ 5ñ 5á™™S˜Õ!ð5ñ $ d�?ð5ñ  (¨$�ð	5ñ
 
ñ5r   c                ó   € V P                  V4      '       g   Q hV P                  V4      V n        V P                  f   \        R4      hV P	                  V4      pV P
                  f   V P                  e3   V P                  P                  V P                  V P
                  V4      pMERV9   d4   RV9   d-   V P                  P                  VR,          VR,          V4      pM\        R4      h\        VR,          R7      # )zQUpload given problem report return a handle for it.
In Github, we open an issue.
zFailed to login to GithubÚSnapGitOwnerÚSnapGitNamez9Couldn't determine which repository to file the report inÚhtml_url©r!   )	Úacceptsr¥   r“   re   r    r‹   rŠ   rH   r   )r   r–   r¨   r£   r"   r6   s   &&&&  r   ÚuploadÚCrashDatabase.upload·   sê   € ð �|‰|˜F×#Ò#Ð#Ð#à×(Ñ(Ð)>Ó?ˆŒà�;‰;ÒÜÐ:Ó;Ð;à×"Ñ" 6Ó*ˆØ×$Ñ$Ò,°×1FÑ1FÒ1NØ—{‘{×1Ñ1Ø×%Ñ% t×';Ñ';¸Tó‰Hð ˜vÔ%¨-¸6Ô*AØ—{‘{×1Ñ1Ø�~Õ&¨¨}Õ(=¸tó‰Hô ØKóð ô ˜x¨
Õ3Ô4Ð4r   c                óT   <€ V ^8„  d   QhRS[ P                  P                  RS[RS[/# )r
   r–   Úhandler   )rŽ   r–   ÚReportr   r   )r   r   s   "€r   r   rˆ   ×   s-   ø€ ÷ ñ ¡f§m¡m×&:Ñ&:ð ÁKð ÑTWñ r   c                ó   € VP                   # )z`Return a URL that should be opened after report has been uploaded
and upload() returned handle.
r­   )r   r–   r²   s   &&&r   Úget_comment_urlÚCrashDatabase.get_comment_url×   s   € ð �z‰zÐr   c                ó   € \        R 4      h©z?This method is not relevant for Github database implementation.©ÚNotImplementedError)r   Úcrash_idr–   s   &&&r   Ú_mark_dup_checkedÚCrashDatabase._mark_dup_checkedÝ   ó   € Ü!ØMó
ð 	
r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r
   r»   r   ©rV   r`   )r   r   s   "€r   r   rˆ   â   s   ø€ ÷ 
ñ 
¡3ð 
©4ñ 
r   c                ó   € \        R 4      hr¸   r¹   ©r   r»   s   &&r   Ú
can_updateÚCrashDatabase.can_updateâ   r¾   r   c                ó   € \        R 4      hr¸   r¹   )r   r–   r»   Ú	master_ids   &&&&r   Úclose_duplicateÚCrashDatabase.close_duplicateç   r¾   r   c                ó   € \        R 4      hr¸   r¹   rÃ   s   &&r   ÚdownloadÚCrashDatabase.downloadì   r¾   r   c                ó4   <€ V ^8„  d   QhRS[ RS[ R,          /# ©r
   r»   r   N©rV   )r   r   s   "€r   r   rˆ   ñ   s   ø€ ÷ 
ñ 
¡Sð 
©S°4­Zñ 
r   c                ó   € \        R 4      hr¸   r¹   rÃ   s   &&r   Úduplicate_ofÚCrashDatabase.duplicate_ofñ   r¾   r   c                ó6   <€ V ^8„  d   QhRS[ RS[S[,          /# rÀ   )rV   r—   r   )r   r   s   "€r   r   rˆ   ö   s   ø€ ÷ 
ñ 
©cð 
±d¹3µiñ 
r   c                ó   € \        R 4      hr¸   r¹   rÃ   s   &&r   Úget_affected_packagesÚ#CrashDatabase.get_affected_packagesö   r¾   r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# rÀ   ©rV   r   )r   r   s   "€r   r   rˆ   û   s   ø€ ÷ 
ñ 
©3ð 
±3ñ 
r   c                ó   € \        R 4      hr¸   r¹   rÃ   s   &&r   Úget_distro_releaseÚ CrashDatabase.get_distro_releaseû   r¾   r   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rK   ©r‘   rV   )r   r   s   "€r   r   rˆ      s   ø€ ÷ 
ñ 
¡3¡s¥8ñ 
r   c                ó   € \        R 4      hr¸   r¹   ©r   s   &r   Úget_dup_uncheckedÚCrashDatabase.get_dup_unchecked   r¾   r   c                ó4   <€ V ^8„  d   QhRS[ RS[R,          /# rÎ   rØ   )r   r   s   "€r   r   rˆ     s   ø€ ÷ 
ñ 
©#ð 
±#¸µ*ñ 
r   c                ó   € \        R 4      hr¸   r¹   rÃ   s   &&r   Úget_fixed_versionÚCrashDatabase.get_fixed_version  r¾   r   c                ó   € \        R 4      hr¸   r¹   )r   r–   r»   s   &&&r   Ú
get_id_urlÚCrashDatabase.get_id_url
  r¾   r   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rK   rÝ   )r   r   s   "€r   r   rˆ     s   ø€ ÷ 
ñ 
™S¡�Xñ 
r   c                ó   € \        R 4      hr¸   r¹   rß   s   &r   Úget_unfixedÚCrashDatabase.get_unfixed  r¾   r   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rK   rÝ   )r   r   s   "€r   r   rˆ     s   ø€ ÷ 
ñ 
¡¡C¥ñ 
r   c                ó   € \        R 4      hr¸   r¹   rß   s   &r   Úget_unretracedÚCrashDatabase.get_unretraced  r¾   r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# rÀ   rÁ   )r   r   s   "€r   r   rˆ     s   ø€ ÷ 
ñ 
¡Cð 
©Dñ 
r   c                ó   € \        R 4      hr¸   r¹   rÃ   s   &&r   Úis_reporterÚCrashDatabase.is_reporter  r¾   r   c                ó*   <€ V ^8„  d   QhRS[ RS[ RR/# )r
   r»   Úmasterr   NrÏ   )r   r   s   "€r   r   rˆ     s"   ø€ ÷ 
ñ 
©ð 
±Sð 
¸Tñ 
r   c                ó   € \        R 4      hr¸   r¹   )r   r»   rö   s   &&&r   Úmark_regressionÚCrashDatabase.mark_regression  r¾   r   c                ó8   <€ V ^8„  d   QhRS[ RS[R,          RR/# )r
   r»   Úinvalid_msgNr   rØ   )r   r   s   "€r   r   rˆ   #  s)   ø€ ÷ 
ñ 
Ùð
Ù*-°­*ð
à	ñ
r   c                ó   € \        R 4      hr¸   r¹   )r   r»   rû   s   &&&r   Úmark_retrace_failedÚ!CrashDatabase.mark_retrace_failed#  s   € ô "ØMó
ð 	
r   c                ó$   <€ V ^8„  d   QhRS[ RR/# rÎ   rÏ   )r   r   s   "€r   r   rˆ   *  s   ø€ ÷ 
ñ 
¡cð 
¨dñ 
r   c                ó   € \        R 4      hr¸   r¹   rÃ   s   &&r   Úmark_retracedÚCrashDatabase.mark_retraced*  r¾   r   c                ó   € \        R 4      hr¸   r¹   )r   r»   r–   ÚcommentÚchange_descriptionÚattachment_commentÚ
key_filters   &&&&&&&r   ÚupdateÚCrashDatabase.update0  s   € ô "ØMó
ð 	
r   )r�   r“   r’   r�   r‹   rŠ   rs   )NN)FNN)rt   ru   rv   rw   rx   r   r    r¥   r¯   rµ   r¼   rÄ   rÈ   rË   rÑ   rÕ   rÚ   rà   rä   rç   rë   rï   ró   rø   rý   r  r  rz   r{   r|   s   @r   r„   r„   –   sÓ   ø‡ € ñ÷*ð *÷

ð 

÷ò ÷5ò 5÷@ð ò
÷

ð 
ò

ò

÷

ð 
÷

ð 
÷

ð 
÷

ð 
÷

ð 
ò

÷

ð 
÷

ð 
÷

ð 
÷

ð 
÷

ò 
÷
ð 
÷
ò 
r   r„   )rx   r/   r2   Úurllib.errorr*   Úurllib.parseÚurllib.requestÚcollections.abcr   r   Údataclassesr   Útypingr   r   Úapport.crashdbrŽ   Úapport.reportr   r   r�   r„   r‚   r   r   Ú<module>r     sm   ðÙ /ó Û Û Û Û ß -Ý !ß ã Û ÷uHñ uHñp �$Ô÷ð ó ðôe
�F—N‘N×0Ñ0ö e
r   