
    i#                         S r SSKJrJr  SSKJrJrJr  Sr " S S\5      r	 " S S	\	5      r
 " S
 S\	5      r " S S\	5      r " S S\R                  5      rg)z'Extractors for https://www.smugmug.com/   )	ExtractorMessage   )textoauth	exceptionzP(?:smugmug:(?!album:)(?:https?://)?([^/]+)|(?:https?://)?([\w-]+)\.smugmug\.com)c            
       D    \ rS rSrSrSrSrSSSSSSSSSS	.	rS
 rS r	Sr
g)SmugmugExtractor   z!Base class for smugmug extractorssmugmugzP{category}_{User[NickName]:?/_/}{Image[UploadKey]}_{Image[ImageKey]}.{extension} PublicFN)	UriResponseLevelNameNickName
QuickShareRefTagViewPassHintWebUriUrisc                     [        U 5      U l        U R                  SS5      U l        U R                  R                  U l        g )NvideosT)
SmugmugAPIapiconfigr   session)selfs    I/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/smugmug.py_initSmugmugExtractor._init$   s1    d#kk(D1xx''    c                   ^ US   S   nS nU R                   (       a  US   (       a  SmOSU;   a  US   nOSmU(       d,  [        U4S jUR                  5       5      n[        US S	9S
   nUS	 S H  nXS;   d  M
  X5   X'   M     US   $ )Nr   ImageSizeDetailsIsVideo	VideoSizeImageSizeOriginal	ImageSizec                 ,   > U S   R                  T5      $ N    )
startswith)sfltrs    r   <lambda>1SmugmugExtractor._select_format.<locals>.<lambda>5   s    QqT__T%:r"   c                     U S   S   $ )Nr   Width )r-   s    r   r/   r0   6   s    QqT']r"   )keyr   )Urlr2   HeightMD5SizeWatermarkedBitrateDurationr5   )r   filteritemsmax)r   imagedetailsmediasizesr4   r.   s         @r   _select_formatSmugmugExtractor._select_format)   s    - 23;;5+D G+/0ED:GMMOLE#:;A>E&M+C|"Z
+ U|r"   )r   r   r   )__name__
__module____qualname____firstlineno____doc__categoryfilename_fmt
empty_userr    rC   __static_attributes__r3   r"   r   r
   r
      s@    +HGL !
J(
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S
rg)SmugmugAlbumExtractor@   zExtractor for smugmug albumsalbum)z
{category}z{User[NickName]}z{Album[Name]}z%a_{Album[AlbumKey]}_{Image[ImageKey]}zsmugmug:album:([^:]+)$zsmugmug:album:IDc                 B    [         R                  X5        US   U l        g )Nr   )r
   __init__album_idr   matchs     r   rS   SmugmugAlbumExtractor.__init__H       !!$.ar"   c              #     #    U R                   R                  U R                  S5      nUS   R                  S5      =(       d    U R                  R                  5       nUS	 US	 XS.n[        R                  SU4v   U R                   R                  U R                  S5       HA  nU R                  U5      nXCS'   [        R                  U[        R                  " XS5      4v   MC     g 7f)NUserr   )AlbumrZ   r   r$   Image)r   rQ   rT   getrL   copyr   	Directoryalbum_imagesrC   r5   r   nameext_from_url)r   rQ   userdatar?   urls         r   r=   SmugmugAlbumExtractor.itemsL   s     t}}f5V}  (BDOO,@,@,BL&M-T))XX**4==:LME%%e,C!M++sD$9$9#$DDD Ns   C'C))rT   N)rE   rF   rG   rH   rI   subcategorydirectory_fmtarchive_fmtpatternexamplerS   r=   rM   r3   r"   r   rO   rO   @   s)    &KGM9K'G G!Er"   rO   c                   :    \ rS rSrSrSrSr\S-   rSr	S r
S rS	rg
)SmugmugImageExtractor\   z'Extractor for individual smugmug imagesr?   z{Image[ImageKey]}z(?:/[^/?#]+)+/i-([^/?#-]+)z"https://USER.smugmug.com/PATH/i-IDc                 B    [         R                  X5        US   U l        g )N   )r
   rS   image_idrU   s     r   rS   SmugmugImageExtractor.__init__c   rX   r"   c              #      #    U R                   R                  U R                  S5      nU R                  U5      nSU0n[        R
                  " X#5        [        R                  SU4v   [        R                  X#4v   g 7f)Nr$   r\   r   )	r   r?   rp   rC   r   ra   r   r_   r5   )r   r?   rd   rc   s       r   r=   SmugmugImageExtractor.itemsg   sh     t}}.@A!!%(c(T))kk3$$s   A<A>)rp   N)rE   rF   rG   rH   rI   rf   rh   BASE_PATTERNri   rj   rS   r=   rM   r3   r"   r   rl   rl   \   s)    1K%K::G2G!%r"   rl   c                   <    \ rS rSrSrSr\S-   rSrS r	S r
S rS	rg
)SmugmugPathExtractorr   z5Extractor for smugmug albums from URL paths and userspathz!((?:/[^/?#a-fh-mo-z][^/?#]*)*)/?$zhttps://USER.smugmug.com/PATHc                 t    [         R                  X5        UR                  5       u  U l        U l        U l        g N)r
   rS   groupsdomainrb   rx   rU   s     r   rS   SmugmugPathExtractor.__init__x   s(    !!$.,1LLN)TY	r"   c              #   ,  #    U R                   (       d-  U R                  R                  U R                  5      S   U l         U R                  (       a  U R                  R                  S5      (       a)  U R                  R                  U R                  SS  5      nO8U R                  R                  U R                   U R                  5      nUS   S   nUS   S:X  a  U4nOUS   S:X  a  U R                  U5      nOS	nU H>  nUS   S   R                  S
5      S   n[        US'   [        R                  SU-   U4v   M@     g U R                  R                  U R                   5       H(  nSUS   -   n[        US'   [        R                  Xe4v   M*     g 7f)Nr   z/gallery/n-   r   NodeTyper[   Folderr3   /r   
_extractorzsmugmug:album:AlbumKey)rb   r   	site_userr|   rx   r,   nodeuser_urlpathlookupalbum_nodes
rpartitionrO   r   Queueuser_albums)r   r   rc   nodesrT   rQ   uris          r   r=   SmugmugPathExtractor.items|   sS    yy**4;;7
CDI99yy##M22xx}}TYYrs^4xx22499diiHF|F+F|w&f)((.<0;;C@C%:\"mm%5%@$FF  --dii8&z)::&;l#mmS// 9s   FFc              #      #    U R                   R                  US   5       H6  nUS   S:X  a  Uv   M  US   S:X  d  M  U R                  U5       Sh  vN   M8     g N	7f)z*Yield all descendant album nodes of 'root'NodeIDr   r[   r   N)r   node_childrenr   )r   rootr   s      r   r    SmugmugPathExtractor.album_nodes   sX     HH**4>:DF|w&
f)++D111	 ; 2s   8AAA
A)r|   rx   rb   N)rE   rF   rG   rH   rI   rf   rt   ri   rj   rS   r=   r   rM   r3   r"   r   rv   rv   r   s)    ?KAAG-G;0:2r"   rv   c                       \ rS rSrSrSrSrSrSS0rSS	 jr	SS
 jr
SS jrSS jrSS jrSS jrSS jrS rS rS\4S jrSS jrSS jrS rS rSrg)r      z(Minimal interface for the smugmug API v2zapi.smugmug.com RCVHDGjcbc4Fhzq4qzqLdZmvwmwB6LM2@jGrdndvJqhTx8XSNs7TFTSSthhZHq92ddMpbpDpkDVNM7TDgnvLFMtfB5Mg5kH73Acceptzapplication/jsonNc                 ,    U R                  SU-   U5      $ )Nalbum/
_expansionr   rT   expandss      r   rQ   SmugmugAPI.album       x(2G<<r"   c                 ,    U R                  SU-   U5      $ )Nzimage/r   )r   rp   r   s      r   r?   SmugmugAPI.image   r   r"   c                 ,    U R                  SU-   U5      $ )Nnode/r   r   node_idr   s      r   r   SmugmugAPI.node   s    w0'::r"   c                 ,    U R                  SU-   U5      $ )Nuser/r   r   usernamer   s      r   rb   SmugmugAPI.user   s    w17;;r"   c                 2    U R                  SU-   S-   U5      $ )Nr   z!images_paginationr   s      r   r`   SmugmugAPI.album_images   s    8 3i ?IIr"   c                 2    U R                  SU-   S-   U5      $ )Nr   z	!childrenr   r   s      r   r   SmugmugAPI.node_children   s    ' 1K ?IIr"   c                 2    U R                  SU-   S-   U5      $ )Nr   z!albumsr   r   s      r   r   SmugmugAPI.user_albums   s    ( 2Y >HHr"   c                 .    U R                  SUS9S   S   $ )Nz	!siteuser)r|   ResponserZ   )_call)r   r|   s     r   r   SmugmugAPI.site_user   s    zz+fz5jA&IIr"   c                 @    SU-   S-   nSU0nU R                  USU5      $ )Nr   z!urlpathlookupurlpathr   r   )r   r   rx   endpointparamss        r   r   SmugmugAPI.user_urlpathlookup   s/    X%(88T"x88r"   c                    SU SU 3nU=(       d    0 nU R                   (       a  U R                   US'   SUS'   U R                  XBU R                  S9n UR                  5       nSUS   s=::  a  S	:  a   U$   US   S
:X  a4  [
        R                  " U R                  R                  R                  5      eUS   S:X  a  [
        R                  " S5      eU R                  R                  U5        [
        R                  " S5      e! [         a5    [
        R                  " U R                  R                  R                  5      ef = f)Nzhttps://z/api/v2/APIKey1
_verbosity)r   headers   Codei  i  i  zRate limit reachedzAPI request failed)api_keyrequestHEADERSjson
ValueErrorr   NotFoundError	extractor	__class__rf   AbortExtractionlogdebug)r   r   r   r|   rd   responserc   s          r   r   SmugmugAPI._call   s!   
32<<#||F8"|<<DLL<I	P==?D $v,$$K %<3))$..*B*B*N*NOO<3++,@AAt''(<==  	P))$..*B*B*N*NOO	Ps   D ?Ec                     U R                  X5      nU R                  U R                  X5      U5      nU(       d  [        R                  " 5       eUS   $ r*   )_extend_apply_expansionsr   r   r   )r   r   r   r   results        r   r   SmugmugAPI._expansion   sG    <<2''

8(DgN))++ayr"   c              #      #    U R                  X5      nSSS.n U R                  X5      nU R                  XB5       S h  vN   SUS   S   ;  a  g US==   US   -  ss'   MI   N#7f)	Nr   d   )startcountNextPager   Pagesr   r   )r   r   r   )r   r   r   r   rc   s        r   r   SmugmugAPI._pagination   sq     <<2s+::h/D--d<<<j!1'!::7Ovg.O <s   =A%A# $A%c                 $    U(       a  USU-   -  nU$ )Nz	?_expand=r3   )r   r   r   s      r   r   SmugmugAPI._extend   s    g--Hr"   c                     S nU" US   5      n[        U[        5      (       d  U4nSU;   aD  US   nUR                  S5      nU H(  nUS   nU H  nX;   d  M
  Xx   n	U" XY   5      Xx'   M     M*     U$ )Nc                 "    U S   nX;   a  X   $ / $ )NLocatorr3   )r   locators     r   unwrap,SmugmugAPI._apply_expansions.<locals>.unwrap   s    y)G(/(;8$CCr"   r   
Expansions,r   )
isinstancelistsplit)
r   rc   r   r   objs
expansionsobjurisnamer   s
             r   r   SmugmugAPI._apply_expansions   s    	D d:&'$%%7D4l+JmmC(G6{#D|"j%+JO%<
 $  r"   r3   rz   )rE   rF   rG   rH   rI   
API_DOMAINAPI_KEY
API_SECRETr   rQ   r?   r   rb   r`   r   r   r   r   r   r   r   r   r   rM   r3   r"   r   r   r      sr    2"J0G5J+,G==;<JJIJ9
 &** >,
/
r"   r   N)rI   commonr   r   r   r   r   r   rt   r
   rO   rl   rv   	OAuth1APIr   r3   r"   r   <module>r      sf    . & % %- 
*y *ZE, E8%, %,-2+ -2`i ir"   