
    iD                         S r SSKJrJrJr  SSKJrJ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://wallhaven.cc/   )	ExtractorMessageDispatch   )text	exceptionc                   J    \ 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g)WallhavenExtractor   z#Base class for wallhaven extractors	wallhavenzhttps://wallhaven.ccz({category}_{id}_{resolution}.{extension}z{id}gffffff?c                 $    [        U 5      U l        g N)WallhavenAPIapiselfs    K/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/wallhaven.py_initWallhavenExtractor._init   s    %    c              #   $  #    U R                  5       nU R                  5        Hh  nU R                  U5        UR                  U5        US   n[        R
                  SU4v   [        R                  U[        R                  " X25      4v   Mj     g 7f)Nurl )	metadata
wallpapers
_transformupdater   	DirectoryUrlr   nameext_from_url)r   r   wpr   s       r   itemsWallhavenExtractor.items   sq     ==?//#BOOBIIhU)C##R++++sD$9$9#$BBB $s   BBc                     g)z#Return relevant 'wallpaper' objectsN r   s    r   r   WallhavenExtractor.wallpapers#   s    r   c                     g)zReturn general metadatar%   r%   r   s    r   r   WallhavenExtractor.metadata&   s    r   c                    UR                  S5      US'   SU;   a  US    Vs/ s H  o"S   PM	     snUS'   U R                  UR                  S5      5      US'   UR                  S5      US'   UR                  S	5      US
'   US   US'   g s  snf )Npathr   tagsname
created_atdatedimension_xwidthdimension_yheightcategorywh_category)popparse_datetime_iso)r   r!   ts      r   r   WallhavenExtractor._transform*   s    FF6N5	R<-/Z8ZF)Z8BvJ,,RVVL-AB6
ff]+7vvm,8zN=	 9s   B
)r   N)__name__
__module____qualname____firstlineno____doc__r3   rootfilename_fmtarchive_fmtrequest_intervalr   r"   r   r   r   __static_attributes__r%   r   r   r
   r
      s9    -H!D=LK&C2+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g)WallhavenSearchExtractor4   z,Extractor for search results on wallhaven.ccsearch)
{category}z{search[tags]}zs_{search[q]}_{id}z2(?:https?://)?wallhaven\.cc/search(?:/?\?([^#]+))?z#https://wallhaven.cc/search?q=QUERYc                 j    [         R                  X5        [        R                  " US   5      U l        g Nr   )r
   __init__r   parse_queryparamsr   matchs     r   rJ   !WallhavenSearchExtractor.__init__<   s&    ##D0&&uQx0r   c                 L    U R                   R                  U R                  5      $ r   )r   rF   rL   r   s    r   r   #WallhavenSearchExtractor.wallpapers@   s    xxt{{++r   c                     SU R                   0$ )NrF   rL   r   s    r   r   !WallhavenSearchExtractor.metadataC   s    $++&&r   rS   Nr9   r:   r;   r<   r=   subcategorydirectory_fmtr@   patternexamplerJ   r   r   rB   r%   r   r   rD   rD   4   s-    6K4M&KCG3G1,'r   rD   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)WallhavenCollectionExtractorG   z*Extractor for a collection on wallhaven.cc
collection)rG   
{username}z{collection_id}z:(?:https?://)?wallhaven\.cc/user/([^/?#]+)/favorites/(\d+)z.https://wallhaven.cc/user/USER/favorites/12345c                 h    [         R                  X5        UR                  5       u  U l        U l        g r   )r
   rJ   groupsusernamecollection_idrM   s     r   rJ   %WallhavenCollectionExtractor.__init__N   s%    ##D0,1LLN)t)r   c                 b    U R                   R                  U R                  U R                  5      $ r   )r   r]   ra   rb   r   s    r   r   'WallhavenCollectionExtractor.wallpapersR   s#    xx""4==$2D2DEEr   c                 4    U R                   U R                  S.$ )Nra   rb   rg   r   s    r   r   %WallhavenCollectionExtractor.metadataU   s     MMD<N<NOOr   )rb   ra   N)r9   r:   r;   r<   r=   rV   rW   rX   rY   rJ   r   r   rB   r%   r   r   r[   r[   G   s*    4KCMKG>G;FPr   r[   c                   &    \ rS rSrSrSrSrS rSrg)WallhavenUserExtractorY   zExtractor for a wallhaven userz-(?:https?://)?wallhaven\.cc/user/([^/?#]+)/?$zhttps://wallhaven.cc/user/USERc                     U R                    SU R                  S    S3nU R                  [        US-   4[        US-   44S5      $ )N/user/    /uploads	favorites)rp   )r>   r`   _dispatch_extractorsWallhavenUploadsExtractorWallhavenCollectionsExtractor)r   bases     r   r"   WallhavenUserExtractor.items^   sX    ))F4;;q>"2!4((&D9,<=*D;,>?*
  	r   r%   N)	r9   r:   r;   r<   r=   rX   rY   r"   rB   r%   r   r   rj   rj   Y   s    (>G.Gr   rj   c                   0    \ rS rSrSrSrSrSrS rS r	Sr
g	)
rt   f   z1Extractor for all collections of a wallhaven usercollectionsz7(?:https?://)?wallhaven\.cc/user/([^/?#]+)/favorites/?$z(https://wallhaven.cc/user/USER/favoritesc                 B    [         R                  X5        US   U l        g rI   r
   rJ   ra   rM   s     r   rJ   &WallhavenCollectionsExtractor.__init__l       ##D0ar   c              #      #    U R                    SU R                   S3nU R                  R                  U R                  5       H1  n[        US'   U[        US   5      -   n[        R                  X24v   M3     g 7f)Nrm   z/favorites/
_extractorid)r>   ra   r   ry   r[   strr   Queue)r   ru   r]   r   s       r   r"   #WallhavenCollectionsExtractor.itemsp   si     ))F4==/=((..t}}=J'CJ|$Z-..C--00 >s   A8A:ra   N)r9   r:   r;   r<   r=   rV   rX   rY   rJ   r"   rB   r%   r   r   rt   rt   f   s    ;KHG8G!1r   rt   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g)rs   x   z-Extractor for all uploads of a wallhaven userrp   )rG   r^   zu_{username}_{id}z2(?:https?://)?wallhaven\.cc/user/([^/?#]+)/uploadsz&https://wallhaven.cc/user/USER/uploadsc                 B    [         R                  X5        US   U l        g rI   r{   rM   s     r   rJ   "WallhavenUploadsExtractor.__init__   r}   r   c                 Z    SSU R                   -   0nU R                  R                  U5      $ )Nq@)ra   r   rF   )r   rL   s     r   r   $WallhavenUploadsExtractor.wallpapers   s(    sT]]*+xxv&&r   c                     SU R                   0$ )Nra   r   r   s    r   r   "WallhavenUploadsExtractor.metadata   s    DMM**r   r   NrU   r%   r   r   rs   rs   x   s-    7K0M%KCG6G!'+r   rs   c                   0    \ rS rSrSrSrSrSrS rS r	Sr
g	)
WallhavenImageExtractor   z2Extractor for individual wallpaper on wallhaven.ccimagezY(?:https?://)?(?:wallhaven\.cc/w/|whvn\.cc/|w\.wallhaven\.cc/[a-z]+/\w\w/wallhaven-)(\w+)zhttps://wallhaven.cc/w/IDc                 B    [         R                  X5        US   U l        g rI   )r
   rJ   wallpaper_idrM   s     r   rJ    WallhavenImageExtractor.__init__   s    ##D0!!Hr   c                 N    U R                   R                  U R                  5      4$ r   )r   infor   r   s    r   r   "WallhavenImageExtractor.wallpapers   s    d//022r   )r   N)r9   r:   r;   r<   r=   rV   rX   rY   rJ   r   rB   r%   r   r   r   r      s!    <KAG)G%3r   r   c                   J    \ 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rg)r      zBInterface for wallhaven's API

Ref: https://wallhaven.cc/help/api
c                     Xl         UR                  S5      nUc  SnUR                  R                  S5        OUR                  R                  S5        SU0U l        g )Nzapi-key 25HYZenXTICjzBZXzFSg98uJtcQVrDs2zUsing default API KeyzUsing custom API Keyz	X-API-Key)	extractorconfiglogdebugheaders)r   r   keys      r   rJ   WallhavenAPI.__init__   sS    "y);4CMM 78MM 67#S)r   c                 4    SU-   nU R                  U5      S   $ )Nz/v1/w/data)_call)r   r   endpoints      r   r   WallhavenAPI.info   s     l*zz(#F++r   c                 4    SU SU 3nU R                  U5      $ )N/v1/collections/ro   _pagination)r   ra   rb   r   s       r   r]   WallhavenAPI.collection   s%    %hZq@))r   c                 ,    SU-   nU R                  USS9$ )Nr   F)r   r   )r   ra   r   s      r   ry   WallhavenAPI.collections   s"    %0599r   c                 (    SnU R                  X!5      $ )Nz
/v1/searchr   )r   rL   r   s      r   rF   WallhavenAPI.search   s    11r   Nc                    SU-   n U R                   R                  X2U R                  S S9nUR                  S:  a  UR	                  5       $ UR                  S:X  a  U R                   R                  SS9  Mq  U R                   R                  R                  SUR                  5        [        R                  " SUR                   S	UR                   S
35      e)Nzhttps://wallhaven.cc/api)rL   r   fatali  i  <   )secondszServer response: %szAPI request failed ( ))r   requestr   status_codejsonwaitr   r   r   r   AbortExtractionreason)r   r   rL   r   responses        r   r   WallhavenAPI._call   s    (83~~--DLL . FH ##c)}}&##s*##B#/NN$$%:HMMJ++(()8??*;1>? ?r   c              #   B  #    Uc  S n0 nOUnUR                  5       nUc  U R                  R                  S5      n U R                  X5      nUR	                  S5      nUb[  U(       aR  SU;   aL  US   n[        U[        5      (       a)  UR	                  S5      US'   UR	                  S5      US'   O	XtS'   SUS'   S nU(       a,  US	    H"  nU R                  [        US   5      5      v   M$     OUS	    S h  vN   U(       a  US
   US   :  a  g US
   S-   US'   M   N%7f)Nr   metaquerytagr+   r   tag_idrn   r   current_page	last_pager   page)	copyr   r   r   get
isinstancedictr   r   )	r   r   rL   r   
params_ptrr   r   r   r!   s	            r   r   WallhavenAPI._pagination   s)    >JFJ[[]F~~,,Z8H::h/D88F#D%GtO ME!%..-2YYu-=
6*/4yy
8,-26*/0
8,!
v,B))C4M22 '  <''4/43DD!.1A5F6N/ & (s   C5D7D8&D)r   r   r   )NN)r9   r:   r;   r<   r=   rJ   r   r]   ry   rF   r   r   rB   r%   r   r   r   r      s*    
	*,*:2?$!6r   r   N)r=   commonr   r   r   r   r   r   r
   rD   r[   rj   rt   rs   r   r   r%   r   r   <module>r      s~    + 0 0 "+ "+J'1 '&P#5 P$
X'9 
1$6 1$+ 2 +(30 3T6 T6r   