
    i)                     2   S r SSKJrJr  SSKJrJr  Sr " S S\5      r " S S	\5      r	 " S
 S\5      r
 " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S5      rg)z!Extractors for https://imgur.com/   )	ExtractorMessage   )text	exceptionz0(?:https?://)?(?:www\.|[im]\.)?imgur\.(?:com|io)c                   >    \ rS rSrSrSrSrS rS rS r	S r
S	 rS
rg)ImgurExtractor   zBase class for imgur extractorsimgurhttps://imgur.comc                 D    [         R                  " X5        US   U l        g )Nr   )r   __init__keyselfmatchs     G/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/imgur.pyr   ImgurExtractor.__init__   s    4'8    c                 R    [        U 5      U l        U R                  SS5      U l        g )Nmp4T)ImgurAPIapiconfigr   r   s    r   _initImgurExtractor._init   s    D>;;ud+r   c                 B   UR                  US   5        US	 US   S:X  a  SUS'   O)US   (       a  U R                  (       a  US   S:X  a  SUS'   SUS	    S
US    3=US'   nU R                  US   5      US'   U R                  US'   [        R
                  " X!5        U$ )Nmetadataextjpegjpgis_animatedgifr   zhttps://i.imgur.com/id.url
created_atdate_http_validate)updater   parse_datetime_iso	_validater   nameext_from_urlr   imager'   s      r   _prepareImgurExtractor._prepare   s    U:&'*<6! E%L=!dhh5<53H E%L #5;-qu?	@es//l0CDf"&..c)
r   c                 r    UR                   (       + =(       d     UR                  R                  S5      (       + $ )Nz/removed.png)historyr'   endswith)r   responses     r   r-   ImgurExtractor._validate/   s-    $$$ :LL)).99	;r   c              #      #    [         n[        nU H:  nUS   (       a  SUS   -   nX$S'   OSUS   -   nX4S'   [        R                  XT4v   M<     g 7f)Nis_albumzhttps://imgur.com/a/r%   
_extractorzhttps://imgur.com/)ImgurAlbumExtractorImgurImageExtractorr   Queue)r   itemsalbum_eximage_exitemr'   s         r   _items_queueImgurExtractor._items_queue3   s\     &&DJ,tDz9%-\"*T$Z7%-\"--** s   AA)r   r   r   N)__name__
__module____qualname____firstlineno____doc__categoryrootr   r   r1   r-   rB   __static_attributes__ r   r   r	   r	      s(    )HD,";+r   r	   c                   8    \ rS rSrSrSrSrSr\S-   r	Sr
S rS	rg
)r<   A   z,Extractor for individual images on imgur.comr0   z'{category}_{id}{title:?_//}.{extension}z{id}zA/(?!gallery|search)(?:r/\w+/)?(?:[^/?#]+-)?(\w{7}|\w{5})[sbtmlh]?zhttps://imgur.com/abcdefgc              #   ,  #    U R                   R                  U R                  5      n US	 US	 UR	                  US   S   5        US	 U R                  U5      n[        R                  SU4v   [        R                  X!4v   g ! [         a     Naf = f7f)Nad_urlad_typemedia     )	r   r0   r   KeyErrorr+   r1   r   	DirectoryUrlr/   s      r   r>   ImgurImageExtractor.itemsJ   s     txx(	hi  	U7^A&''NmmE"U**kk3%%  		s(   &BB AB
BBBBrL   N)rD   rE   rF   rG   rH   subcategoryfilename_fmtarchive_fmtBASE_PATTERNpatternexampler>   rK   rL   r   r   r<   r<   A   s/    6K<LK A AG)G&r   r<   c                   <    \ rS rSrSrSrSrSrSr\	S-   r
SrS	 rS
rg)r;   Z   zExtractor for imgur albumsalbum)z
{category}z {album[id]}{album[title]:? - //}z1{category}_{album[id]}_{num:>03}_{id}.{extension}z{album[id]}_{id}z/a/(?:[^/?#]+-)?(\w{7}|\w{5})zhttps://imgur.com/a/abcdec              #     #    U R                   R                  U R                  5      n US   nUS	 [	        U5      nU R                  US   5      US'    US	 US	 [        US5       HK  u  pEU R                  U5      nXES'   X5S'   XS	'   [        R                  S
U4v   [        R                  Xe4v   MM     g ! [         a     g f = f! [         a     Nxf = f7f)NrR   r(   r)   rP   rQ   r   numcountra   rT   )r   ra   r   rU   lenr,   	enumerater1   r   rV   rW   )r   ra   imagesrd   rc   r0   r'   s          r   r>   ImgurAlbumExtractor.itemsc   s     txx(	7^F 'NF//l0CDf	hi  $FA.JC--&C%L"'N"'N##R..++s)) /  		  		sL   &CB6 %CC AC6
C CCC
CCCCrL   N)rD   rE   rF   rG   rH   rY   directory_fmtrZ   r[   r\   r]   r^   r>   rK   rL   r   r   r;   r;   Z   s.    $KFMFL$K==G)G*r   r;   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	ImgurGalleryExtractor~   zExtractor for imgur galleriesgalleryz-/(?:gallery|t/\w+)/(?:[^/?#]+-)?(\w{7}|\w{5})zhttps://imgur.com/gallery/abcdec              #     #    U R                   R                  U R                  5      S   (       a"  U R                   SU R                   3n[        nO!U R                   SU R                   3n[
        n[        R                  USU04v   g 7f)Nr9   z/a//r:   )r   rm   r   rJ   r;   r<   r   r=   )r   r'   extrs      r   r>   ImgurGalleryExtractor.items   sp     88DHH%j1YYKs488*-C&DYYKq
+C&DmmS<"666s   B	BrL   NrD   rE   rF   rG   rH   rY   r\   r]   r^   r>   rK   rL   r   r   rk   rk   ~   s    'KMMG/G7r   rk   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	ImgurUserExtractor   z)Extractor for all images posted by a useruserz:/user/(?!me(?:/|$|\?|#))([^/?#]+)(?:/posts|/submitted)?/?$zhttps://imgur.com/user/USERc                 j    U R                  U R                  R                  U R                  5      5      $ N)rB   r   account_submissionsr   r   s    r   r>   ImgurUserExtractor.items   s&      !=!=dhh!GHHr   rL   Nrr   rL   r   r   rt   rt      s$    3K 5 5G+GIr   rt   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	ImgurFavoriteExtractor   z Extractor for a user's favoritesfavoritez/user/([^/?#]+)/favorites/?$z%https://imgur.com/user/USER/favoritesc                 j    U R                  U R                  R                  U R                  5      5      $ rx   )rB   r   account_favoritesr   r   s    r   r>   ImgurFavoriteExtractor.items   &      !;!;DHH!EFFr   rL   Nrr   rL   r   r   r|   r|      s     *K<<G5GGr   r|   c                   6    \ rS rSrSrSr\S-   rSrS r	S r
Srg	)
ImgurFavoriteFolderExtractor   z'Extractor for a user's favorites folderzfavorite-folderz&/user/([^/?#]+)/favorites/folder/(\d+)z8https://imgur.com/user/USER/favorites/folder/12345/TITLEc                 B    [         R                  X5        US   U l        g )Nr   )r	   r   	folder_idr   s     r   r   %ImgurFavoriteFolderExtractor.__init__   s    ,qr   c                     U R                  U R                  R                  U R                  U R                  5      5      $ rx   )rB   r   account_favorites_folderr   r   r   s    r   r>   "ImgurFavoriteFolderExtractor.items   s3      !B!BHHdnn"& ' 	'r   )r   N)rD   rE   rF   rG   rH   rY   r\   r]   r^   r   r>   rK   rL   r   r   r   r      s$    1#KFFGHG"'r   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	ImgurMeExtractor   z#Extractor for your personal uploadsmez/user/me(?:/posts)?(/hidden)?zhttps://imgur.com/user/mec                    U R                  S5      (       d  U R                  R                  S5        U R                  S   (       a  U R                  R                  5       nOU R                  R                  5       nU R                  U5      $ )N)accesstokenz'accesstoken' cookie requiredrS   )cookies_checklogerrorgroupsr   accounts_me_hiddenalbumsaccounts_me_allpostsrB   )r   postss     r   r>   ImgurMeExtractor.items   se    !!"233HHNN:;;;q>HH557EHH113E  ''r   rL   Nrr   rL   r   r   r   r      s    -K==G)G(r   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	ImgurSubredditExtractor   z(Extractor for a subreddits's imgur links	subredditz/r/([^/?#]+)/?$zhttps://imgur.com/r/SUBREDDITc                 j    U R                  U R                  R                  U R                  5      5      $ rx   )rB   r   gallery_subredditr   r   s    r   r>   ImgurSubredditExtractor.items   r   r   rL   Nrr   rL   r   r   r   r      s     2K//G-GGr   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	ImgurTagExtractor   z Extractor for imgur tag searchestagz/t/([^/?#]+)$zhttps://imgur.com/t/TAGc                 j    U R                  U R                  R                  U R                  5      5      $ rx   )rB   r   gallery_tagr   r   s    r   r>   ImgurTagExtractor.items   s&      !5!5dhh!?@@r   rL   Nrr   rL   r   r   r   r      s     *K--G'GAr   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	ImgurSearchExtractor   z"Extractor for imgur search resultssearchz!/search(?:/[^?#]+)?/?\?q=([^&#]+)zhttps://imgur.com/search?q=UERYc                     [         R                  " U R                  R                  SS5      5      nU R	                  U R
                  R                  U5      5      $ )N+ )r   unquoter   replacerB   r   gallery_search)r   r   s     r   r>   ImgurSearchExtractor.items   sA    ll488++C56  !8!8!=>>r   rL   Nrr   rL   r   r   r   r      s    ,KAAG/G?r   r   c                   ~    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rSS jrSS jrSS jrSrg)r      z=Interface for the Imgur API

Ref: https://apidocs.imgur.com/
c                 z    Xl         UR                  S5      =(       d    SU l        SSU R                  -   0U l        g )Nz	client-id546c25a59c58ad7Authorizationz
Client-ID )	extractorr   	client_idheaders)r   r   s     r   r   ImgurAPI.__init__   s4    ""))+6K:K')FGr   c                 0    SU S3nU R                  U5      $ )N/3/account/z/submissions_paginationr   accountendpoints      r   ry   ImgurAPI.account_submissions   s!     	6))r   c                 0    SU S3nU R                  U5      $ )Nr   z/gallery_favoritesr   r   s      r   r   ImgurAPI.account_favorites   s"     	);<))r   c                 6    SU SU S3nU R                  U5      $ )Nr   z	/folders/z
/favorites_pagination_v2)r   r   r   r   s       r   r   !ImgurAPI.account_favorites_folder   s'     	9+ZH""8,,r   c                 4    SnSSSS.nU R                  X5      $ )Nz/post/v1/accounts/me/all_postsmedia,tags,accountr   -created_atincludepagesortr   r   r   paramss      r   r   ImgurAPI.accounts_me_allposts   s*    3+$

 ""844r   c                 4    SnSSSS.nU R                  X5      $ )Nz"/post/v1/accounts/me/hidden_albumsr   r   r   r   r   r   s      r   r   !ImgurAPI.accounts_me_hiddenalbums  s*    7+$

 ""844r   c                 0    SnSU0nU R                  X#5      $ )Nz/3/gallery/searchqr   )r   queryr   r   s       r   r   ImgurAPI.gallery_search
  s!    &u11r   c                 .    SU-   nU R                  U5      $ )Nz/3/gallery/r/r   )r   r   r   s      r   r   ImgurAPI.gallery_subreddit  s    "Y.))r   c                 ,    SU-   nU R                  USS9$ )Nz/3/gallery/t/r>   )r   r   )r   r   r   s      r   r   ImgurAPI.gallery_tag  s"    "S(g66r   c                 6    SU-   nSS0nU R                  X#5      $ )Nz/post/v1/media/r   r   _call)r   
image_hashr   r   s       r   r0   ImgurAPI.image  s&    $z112zz(++r   c                 6    SU-   nSS0nU R                  X#5      $ )Nz/post/v1/albums/r   r   r   )r   
album_hashr   r   s       r   ra   ImgurAPI.album  s&    %
212zz(++r   c                 .    SU-   nU R                  U5      $ )Nz/post/v1/posts/r   )r   gallery_hashr   s      r   rm   ImgurAPI.gallery!  s    $|3zz(##r   Nc                 4     U R                   R                  SU-   X#=(       d    U R                  S9$ ! [        R                   a5  nUR
                  S;  d  SUR                  R                  ;  a  e  S nAOS nAff = fU R                   R                  SS9  M  )Nzhttps://api.imgur.com)r   r   )i  i  s   capacityiX  )seconds)	r   request_jsonr   r   	HttpErrorstatusr6   contentwait)r   r   r   r   excs        r   r   ImgurAPI._call%  s    ~~22+h6!,Ct|| 3 F F && ::Z/#3<<+?+?? @ NN, s   /3 A<+A77A<c              #      #    Sn U R                  U SU 3U5      S   nU(       a  XS   nU(       d  g U S h  vN   US-  nM>   N7f)NrS   ro   datar   r   )r   r   r   r   rc   r   s         r   r   ImgurAPI._pagination1  sW     ::
!C516:6BDyOO1HC  s   6AAAc              #      #    Uc  0 nU R                   US'   SU;  a  SUS'   SU;  a  SUS'   SS0n U R                  XU5      nSU;   a  US   nU(       d  g U S h  vN   US==   S	-  ss'   M>   N7f)
Nr   r   rS   r   newestOriginr   r   r   )r   r   )r   r   r   r   r   r   s         r   r   ImgurAPI._pagination_v2=  s     >F"nn{F6N%F6N01::h8D~F|OO6NaN  s   AA2A0A2)r   r   r   )NN)rD   rE   rF   rG   rH   r   ry   r   r   r   r   r   r   r   r0   ra   rm   r   r   r   rK   rL   r   r   r   r      sS    H
**-552
*7,
,
$
-
 r   r   N)rH   commonr   r   rT   r   r   r\   r	   r<   r;   rk   rt   r|   r   r   r   r   r   r   rL   r   r   <module>r      s    ( & B-+Y -+`&. &2!*. !*H7N 7 I IG^ G'> '(~ ("Gn GA A?> ?m  m r   