
    i&                        S r SSKJrJr  SSKJrJrJr  SSKJr   " S S\5      r	\	R                  SS	S
S.SSS
S.SSS
S.SSS
S.SSSS.SSSS.SSSS.SSS
S.SSSS.SSS
SS.S S!SS.S".5      r " S# S$\	5      r " S% S&\	5      rg)'zExtractors for Wikimedia sites   )BaseExtractorMessage   )textutil	exception)cachec                   ~    \ rS rSrSrSrSrSr\R                  r
SrS rS r\" S	S
S9S 5       rS rS rS rS rSrg)WikimediaExtractor   z#Base class for wikimedia extractors	wikimediaz#{filename} ({sha1[:8]}).{extension}z{sha1})g      ?g       @c                    U R                  U5        SU l        U R                  S:X  a3  U R                  R	                  S5      nUS   SS  U l        US   U l        O{U R                  S;   ad  SU l        SU l        U R                  U l        U R                   S	U R                  R                  S5      S
   R                  S5      S    3U l        OSU l        U R                  S5      =n(       a  X0l
        [        R                  " X5        g )NFr   .)fandomwikiggenoriginal-    /r    	useragent)_init_categoryformatcategoryrootsplitlangbasesubcategory	partition
rpartitionconfig_instancer   r   __init__)selfmatchlabelsr   s       K/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/wikimedia.pyr%   WikimediaExtractor.__init__   s    E"==K'YY__S)Fr
23DI"2JDM]]22DI$DK#'==D ==/99&&s+A.99#>qABD M DI,,[9999&Nt+    c                 8   U R                  S5      =n(       a%  US   S:X  a  U R                  U-   U l        OXl        OS U l        U R                  SS5      U l        U R                  SU R
                  5      U l        U R                  SS5      U l        S	U l        g )
Napi-pathr   r   zimage-revisionsr   r   limit2   F)r$   r   api_urlconfigimage_revisionsr   per_pagesubcategories)r&   api_paths     r)   _initWikimediaExtractor._init0   s    ++J7787{c!#yy83'DL  ${{+<a@kk(DKK8GR0"r+   l    w r   )maxagekeyargc                     U R                   R                  S5        S H,  nX-   nU R                  USS S9nUR                  S:  d  M*  Us  $    [        R
                  " S5      e)NzProbing possible API endpoints)/api.php
/w/api.php/wiki/api.phpHEAD)methodfatali  zUnable to find API endpoint)logdebugrequeststatus_coder   AbortExtraction)r&   r   pathurlresponses        r)   _search_api_path#WikimediaExtractor._search_api_pathB   s`    78?D+C||Cd|CH##c)
	 @
 ''(EFFr+   c                     g)z*Adjust the content of an image info objectN r&   infos     r)   prepare_infoWikimediaExtractor.prepare_infoL   s    r+   c                    US   =(       d    S Vs0 s H  nUS   US   _M     snUS'   US   =(       d    S Vs0 s H  nUS   US   _M     snUS'   [         R                  " US   R                  S5      S   U5        U R                  US	   5      US
'   U R                  (       a$  US   nU SU;   a  SOS SU R                   3US'   ggs  snf s  snf )z%Adjust the content of an image objectmetadatarL   namevaluecommonmetadatacanonicaltitle:r   	timestampdaterG   ?&zformat=N)r   nameext_from_namer"   parse_datetime_isor   )r&   imagemrG   s       r)   prepare_image WikimediaExtractor.prepare_imageO   s    :&,",., fIqz!,.j
 +,22#42 fIqz!2#4 	"#--c215u	>//k0BCf;;,C"e3#:C3#?%dkk]4E%L .#4s
   CCc              #   8  #    U R                  5       nU R                  U5       H  n UR                  S5      n[        U5      US'   U R                  U5        [        R                  SU4v   SnU H  nSU;   a3  U R                  R                  SUS	   R                  S
5      S   5        M<  US-  nXES'   U R                  U5        UR                  U5        [        R                  US   U4v   M     M     U R                  (       aa  U R                   S-   nSUS'   U R                  U5       H7  nXgS   R#                  SS5      -   n[$        US'   [        R&                  X4v   M9     g g ! [         a"    U R                  R                  SU5        Sn GN]f = f7f)N	imageinfozMissing 'imageinfo' for %srL   countr   r   filemissingz$File %s (or its revision) is missingrV   rW   r   r   numrG   z/wiki/subcatgcmtypetitle _
_extractor)params_paginationpopKeyErrorrA   rB   lenrO   r   	Directorywarningr"   r`   updateUrlr4   r   replaceWikimediaArticleExtractorQueue)	r&   rm   rN   imagesrf   r^   baserg   rG   s	            r)   itemsWikimediaExtractor.itemsa   s    $$V,D+.
  KDMd###R--C E)HH$$>./99#>qAC q"e""5)T"kk5<66   -2 99x'D (F9**62G_44S#>>'@|$mmS00 3 -  ;TBs(   %FE+D2F+(FFFFc              #   d  #    U R                   nU(       d  U R                  U R                  5      nSUS'   SUS'   SUS'   SUS'   U R                  US	'    U R	                  X!S
9nUR                  S5      =n(       a$  U R                  R                  SUS   US   5        gUR                  S5      =n(       a  U R                  R                  SU5         US   S   nUR                  5        Sh  vN    US   nUR                  U5        M   N! [         a     N'f = f! [         a     gf = f7f)z]
https://www.mediawiki.org/wiki/API:Query
https://opendata.stackexchange.com/questions/13381
queryactionjsonr   rc   propzltimestamp|user|userid|comment|canonicaltitle|url|size|sha1|mime|metadata|commonmetadata|extmetadata|bitdepthiipropiilimit)rm   errorz%s: %scoderN   NwarningszMediaWiki returned warnings: %spagescontinue)r0   rI   r   r2   request_jsongetrA   r   rB   valuesrp   rt   )r&   rm   rG   datar   r   r   continuations           r)   rn   WikimediaExtractor._pagination   sK     ll''		2C"x!x$vE 	x !00y$$S$8D ))u)xvfF  88J//x/@(K*Wg. !<<>))#J/ MM,'/ " *    sZ   CD0D D00D1D06D  ;D0
DD0DD0 
D-*D0,D--D0)	r0   r!   r   r   r2   r    r3   r4   r   N)__name__
__module____qualname____firstlineno____doc__basecategoryfilename_fmtarchive_fmtr   USERAGENT_GALLERYDLr   request_intervalr%   r6   r	   rI   rO   r`   r{   rn   __static_attributes__rL   r+   r)   r   r      sa    -L8LK((I!,.#$ +a(G )G95$"1H*(r+   r   NzU[a-z]{2,}\.wik(?:i(?:pedia|quote|books|source|news|versity|data|voyage)|tionary)\.orgr<   )r   patternr-   zhttps://species.wikimedia.orgzspecies\.wikimedia\.orgzhttps://commons.wikimedia.orgzcommons\.wikimedia\.orgzhttps://www.mediawiki.orgz(?:www\.)?mediawiki\.orgz[\w-]+\.fandom\.comr;   z\w+\.wiki\.ggzhttps://www.mariowiki.comz(?:www\.)?mariowiki\.comz"https://bulbapedia.bulbagarden.netz)(?:bulbapedia|archives)\.bulbagarden\.netzhttps://www.pidgi.netz(?:www\.)?pidgi\.netr=   zhttps://azurlane.koumakan.jpzazurlane\.koumakan\.jpzGooglebot-Image/1.0)r   r   r-   r   zhttps://mgewiki.moez(?:www\.)?mgewiki\.moe)r   wikispecieswikimediacommons	mediawikir   r   	mariowiki
bulbapedia	pidgiwikiazurlanewikimgewikic                   @    \ rS rSrSrSrSr\S-   rSr	S r
S rS	 rS
rg)rw      z Extractor for wikimedia articlesarticle)z
{category}z{page}z/(?!static/)([^?#]+)z#https://en.wikipedia.org/wiki/TITLEc                    [         R                  X5        U R                  S   nUS   S:X  a'  US S =U l        nU R                   SU 3U l        USS  nUR                  S5      (       a  USS  nOUR                  S5      (       a  USS  n[        R                  " U5      U l        UR                  S	5      u  pEnU(       a  UR                  5       OS =U l        nUb  Xpl        g g )
Nr   r      zwiki/   z
index.php/
   rW   )r   r%   groupsr    r   
startswithr   unquoterF   r"   lowerprefixsubcategory)r&   r'   rF   r    preseprk   r   s           r)   r%   "WikimediaArticleExtractor.__init__   s    ##D0{{27c>#BQx'DI99+Qtf-DI8D??7##8D__\**9DLL&	nnS)!.1syy{t;f% r+   c                    U R                   S:X  a9  U R                  SS5      (       a  SU l        SU R                  SU R                  S.$ U R                   S:X  a  SU R                  0$ SU R                  U R                  S	.$ )
Nr   r4   Tcategorymembersfile)	generatorgcmtitlerh   gcmlimittitlesry   )r   gimlimitr   )r   r1   r4   rF   r3   r&   s    r)   rm    WikimediaArticleExtractor.params  s    ;;*${{?D11%)".!YY#!]]	  ;;& $)) 
 "
 	
r+   c                 @    U R                   US'   U R                  US'   g )Npager    )rF   r    rM   s     r)   rO   &WikimediaArticleExtractor.prepare_info!  s    yyVyyVr+   )r    rF   r   r   r4   r   N)r   r   r   r   r   r   directory_fmtBASE_PATTERNr   exampler%   rm   rO   r   rL   r+   r)   rw   rw      s.    *K,M44G3G&&
,!r+   rw   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	WikimediaWikiExtractori&  z/Extractor for all files on a MediaWiki instancewikiz/?$zhttps://en.wikipedia.org/c                 "    SSU R                   S.$ )Nallpages   )r   gapnamespacegaplimit)r3   r   s    r)   rm   WikimediaWikiExtractor.params,  s     ' MM
 	
r+   rL   N)r   r   r   r   r   r   r   r   r   rm   r   rL   r+   r)   r   r   &  s    9KV#G)G
r+   r   )r   commonr   r   r   r   r   r   r	   r   rt   r   rw   r   rL   r+   r)   <module>r      s   % * $ $ ^( ^(B "(( ! 0-  0-  ,.  ) # ,. 5?  (*# /, *	 &,o<* <~2! 2 2!j
/ 
r+   