
    i.                        S r SSKJrJrJr  SSKJrJrJr  SSK	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g)z+Extractors for https://archiveofourown.org/   )	ExtractorMessageDispatch   )textutil	exception)cachez?(?:https?://)?(?:www\.)?a(?:rchiveofourown|o3)\.(?:org|com|net)c                   p    \ 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 rS r\" SSS9S 5       rSS jrSrg)Ao3Extractor   zBase class for ao3 extractorsao3zhttps://archiveofourown.orgTz.archiveofourown.org)remember_user_token)g      ?g      ?c              #      #    U R                  5         U R                  S-   n[        SS.nU R                  5        H  n[        R
                  X-   U4v   M     g 7f)N/works/work
_extractortype)loginrootAo3WorkExtractorworksr   Queue)selfbasedatawork_ids       E/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/ao3.pyitemsAo3Extractor.items   sI     

yy9$.?zz|G--55 $s   AAc              #   N  #    U R                  5         U R                  S-   n[        SS.n[        SS.n[        SS.nU R                  U R                  S   U5       H  nU(       a  UR                  S5      S   OUn	XI-   n
UR                  S5      (       a  [        R                  X4v   MP  UR                  S5      (       a  [        R                  X4v   M|  UR                  S	5      (       a  [        R                  X4v   M  U R                  R                  S
X5        M     g 7f)N/r   r   seriesuser    zworks/zseries/zusers/zUnsupported %s type '%s')r   r   r   Ao3SeriesExtractorAo3UserExtractor_paginationgroups
rpartition
startswithr   r   logwarning)r   r   needlepartr   	data_workdata_series	data_useritempathurls              r   
items_listAo3Extractor.items_list%   s     

yy3#3VD	%7J#3VD	$$T[[^V<D.24??3'*D+Cx((mmS33++mmS55**mmS33  !;TH =s   D#D%c                 >    U R                  U R                  S   5      $ )Nr&   r)   r*   r   s    r   r   Ao3Extractor.works9   s    A//    c                     U R                  U R                  5      (       a  g U R                  5       u  pU(       a   U R                  U R	                  X5      5      $ g )N)cookies_checkcookies_names_get_auth_infocookies_update_login_impl)r   usernamepasswords      r   r   Ao3Extractor.login<   sQ    d0011!002&&t'7'7'KLL r=   i v r   )maxagekeyargc                 d   U R                   R                  SU5        U R                  S-   nU R                  U5      R                  nUR                  S5      n[        R                  " USSU5      S   nU(       d  U R                   R                  S5        [        R                  " U5      UUSS	S
.nU R                  USUS9nUR                  (       d  [        R                  " 5       eUR                  S   R                  R                  S5      n	U	(       d  [        R                  " 5       eU	SS.$ )NzLogging in as %sz/users/loginzid="loginform"z" name="authenticity_token" value=""r&   z&Unable to extract 'authenticity_token'1zLog In)authenticity_tokenzuser[login]zuser[password]zuser[remember_me]commitPOST)methodr   r   )r   user_credentials)r-   infor   requestr   findextracterrorunescapehistoryr	   AuthenticationErrorcookiesget)
r   rD   rE   r6   pagepostokenr   responseremembers
             r   rC   Ao3Extractor._login_implD   s   ((3ii.(||C %%ii()6SBBCEHHNNCD #'--"6"*"*"%"*
 <<F<>//11##A&..223HI//11 $,#&
 	
r=   c              #   L  #     U R                  U R                  U-   5      R                  n[        R                  " X2S5       S h  vN   [        R                  " USS5      =(       d    [        R                  " USS5      nU(       d  g [        R
                  " U5      nM   N[7f)NrJ   z<a rel="next" href="z<li class="next"><a href=")rR   r   r   extract_iterextrrV   )r   r5   r/   r[   s       r   r)   Ao3Extractor._paginationf   s     <<		D 0166D((s;;;IId$:C@ GIId$@#F ==&D  <s   AB$B"AB$ N)T)z<li id="work_)__name__
__module____qualname____firstlineno____doc__categoryr   categorytransfercookies_domainr@   request_intervalr    r7   r   r   r
   rC   r)   __static_attributes__re   r=   r   r   r      s\    'H(D+N,M!6I(0M (1%
 &
B
'r=   r   c                   B    \ 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)r   s   zExtractor for an AO3 workr   )z
{category}z{author}z{id} {title}.{extension}z{id}.{extension}z/works/(\d+)z'https://archiveofourown.org/works/12345c                 0   U R                  S5      nUc  SU l        O_U(       d  SU l        OP[        U[        5      (       a5  UR	                  5       R                  SS5      R                  S5      U l        OXl        U R                  R                  SSS	S
9  g )Nformats)pdfre     ,
view_adulttruezarchiveofourown.org)domain)	configrs   
isinstancestrlowerreplacesplitrY   set)r   rs   s     r   _initAo3WorkExtractor._init|   sw    ++i(?#DLDL%%"==?223;AA#FDL"Lv6KLr=   c              #   
  #    U R                  5         U R                  S   nU R                   SU 3nU R                  USS9nUR                  R                  S5      (       a  [        R                  " S5      eUR                  n[        U5      S:  a  SU;   a  [        R                  " S	5      e[        R                  " U5      n0 nU" S
S5      n[        R                  " USS5       H/  nUR                  S5      u  pn[        R                  " U5      Xi'   M1     0 nSnU" SS5      n[        R                  " USS5       H)  nUR                  S5      u  pnXUR!                  5       '   M+     0 S[        R"                  " U5      _S[        R$                  " U" SS5      5      _S[        R$                  " U" SS5      5      _S[        R$                  " U" SS5      5      _S[        R$                  " U" SS5      5      _S[        R$                  " U" SS5      5      _S[        R$                  " U" S S5      5      _S![        R$                  " U" S"S5      5      _S#U" S$S%5      _S&U" S'S5      _S(U R'                  U" S)S*5      5      _S+U R'                  U" S,S*5      5      _S-U R)                  UR                  S.5      S/   5      _S0[        R"                  " U" S1S*5      R+                  S2S5      5      _S3U_S4[        R"                  " U" S5S*5      R+                  S2S5      5      _S6[        R"                  " U" S7S*5      R+                  S2S5      5      _[        R"                  " [        R,                  " U" S8S5      5      R+                  S2S5      5      [        R"                  " U" S9S*5      R+                  S2S5      5      [        R                  " [        R,                  " U" S:S;5      5      R/                  5       5      [        R                  " [        R,                  " U" S<S=5      5      5      [        R$                  " U" S>S?5      5      S@.En[0        R2                  " US#   5      USA'   US&   =n(       aY  [        R                  " U5      nU" SBS%5      U" SCSD5      U" SES%5      [        R                  " U" SFS*5      5      U" SGS%5      SH.US&'   OS US&'   [4        R6                  SU4v   U R8                   HR  n [        R:                  " U R                  UU   5      n[4        R<                  U[        R>                  " UU5      4v   MT     g ! [@         a!    U RB                  RE                  SIUU5         M  f = f7f)JNr&   r   T)notfoundz/users/login?restricted=truez*Login required to access member-only worksi N  z4<h2 class="landmark heading">Adult Content Warning</zAdult Contentz id="chapter_index"z</ul>z value="z	</option>z">rv   z class="download"z href="z</idratingz<dd class="rating tags">z</dd>warningsz<dd class="warning tags">
categoriesz<dd class="category tags">fandomz<dd class="fandom tags">relationshipsz<dd class="relationship tags">
charactersz<dd class="character tags">tagsz<dd class="freeform tags">langz<dd class="language" lang="rJ   r$   z<dd class="series">datez<dd class="published"><date_completedz#>Completed:</dt><dd class="status">date_updatedzupdated_at=r   wordsz<dd class="words">rw   chapterscommentsz<dd class="comments">likesz<dd class="kudos">z<dd class="bookmarks">z<dd class="hits">z class="title heading">z</h2>z class="byline heading">z</h3>z class="heading">Summary:</h3>z</div>)	bookmarksviewstitleauthorsummarylanguagez class="previous" href="/works/z class="position">Part ru   z href="/series/>z class="next" href="/works/)previndexr   namenextz%s: Format '%s' not available)#r   r*   r   rR   r6   endswithr	   AuthorizationErrorr   lenAbortExtractionextract_fromrb   	partitionrV   r+   r~   	parse_int
split_htmlparse_datetime_isoparse_timestampr   remove_htmlstripr   code_to_languager   	Directoryrs   urljoinUrlnameext_from_urlKeyErrorr-   r.   )r   r   r6   r^   r[   rc   r   cindexchcid_cnamefmtsr5   downloaddlr   r   r$   fmts                       r   r    Ao3WorkExtractor.items   sM    

++a.77),<<d<3<<  !?@@..<> >}}t9uF$N++O<<  &+W5##FJDBLL.MCE MM%0HM E +W5##Hi>BMM$/MDT!% ?)
T^^G4)
T__/9;)
 T__0':<	)
 T__17;=)
 T__/9;)
 T__5w?A)
 T__2G<>)
 T__17;=)
  T"?E!)
" T"7A#)
$ T44T(#6/ 0%)
( d55d5s7< =))
, T11.q13-)
0 T^^)3/77R@B1)
4 X5)
6 T^^,c2::3CE7)
: T^^)3/77R@B;)
> "^^D,<,<-w7-99@b9IK!^^(#.66sB?A!]]4+;+;.8,::?%'C!]]4+;+;/9,; <!__5x@BO)
T  00f>Z(^#6#$$V,D?E7=/5tC~6;SADN "DNT))<<CIll499d3i8 kk3(=(=c4(HHH    P  !@'3OPs*   S1U54$U/U5'U2.U51U22U5)rs   N)rf   rg   rh   ri   rj   subcategorydirectory_fmtfilename_fmtarchive_fmtBASE_PATTERNpatternexampler   r    ro   re   r=   r   r   r   s   s5    #K.M-L$K_,G7GM]Ir=   r   c                   *    \ rS rSrSrSr\S-   rSrSr	g)r'      z#Extractor for AO3 works of a seriesr$   z(/series/(\d+))z(https://archiveofourown.org/series/12345re   N
rf   rg   rh   ri   rj   r   r   r   r   ro   re   r=   r   r'   r'      s    -K//G8Gr=   r'   c                   *    \ rS rSrSrSr\S-   rSrSr	g)Ao3TagExtractor   zExtractor for AO3 works by tagtagz"(/tags/([^/?#]+)/works(?:/?\?.+)?)z*https://archiveofourown.org/tags/TAG/worksre   Nr   re   r=   r   r   r      s    (KBBG:Gr=   r   c                   *    \ rS rSrSrSr\S-   rSrSr	g)Ao3SearchExtractor   z Extractor for AO3 search resultssearchz(/works/search/?\?.+)z?https://archiveofourown.org/works/search?work_search[query]=airre   Nr   re   r=   r   r   r      s    *K55GOGr=   r   c                   ,    \ rS rSrSr\S-   rSrS rSr	g)r(      z!Extractor for an AO3 user profilez=/users/([^/?#]+(?:/pseuds/[^/?#]+)?)(?:/profile)?/?(?:$|\?|#)z&https://archiveofourown.org/users/USERc                     U R                    SU R                  S    S3nU R                  [        US-   4[        US-   4[
        US-   44S5      $ )Nz/users/r&   r#   r   r$   r   )
user-worksuser-series)r   r*   _dispatch_extractorsAo3UserWorksExtractorAo3UserSeriesExtractorAo3UserBookmarkExtractor)r   r   s     r   r    Ao3UserExtractor.items  sc    ))GDKKN#315(("tg~6#th7%tk'9:*
 )	* 	*r=   re   N)
rf   rg   rh   ri   rj   r   r   r   r    ro   re   r=   r   r(   r(      s    + , ,G6G*r=   r(   c                   *    \ rS rSrSrSr\S-   rSrSr	g)r   i  z"Extractor for works of an AO3 userr   z9(/users/([^/?#]+)/(?:pseuds/([^/?#]+)/)?works(?:/?\?.+)?)z,https://archiveofourown.org/users/USER/worksre   Nr   re   r=   r   r   r     s    ,K $ $G<Gr=   r   c                   6    \ rS rSrSrSr\S-   rSrS r	S r
Srg	)
r   i  z#Extractor for series of an AO3 userr   z:(/users/([^/?#]+)/(?:pseuds/([^/?#]+)/)?series(?:/?\?.+)?)z-https://archiveofourown.org/users/USER/seriesc              #      #    U R                  5         U R                  S-   nS[        0nU R                  5        H  n[        R
                  X-   U4v   M     g 7f)Nz/series/r   )r   r   r'   r$   r   r   )r   r   r   	series_ids       r   r    Ao3UserSeriesExtractor.items  sK     

yy:%01I--!1477 's   AAc                 @    U R                  U R                  S   S5      $ )Nr&   z<li id="series_r:   r;   s    r   r$   Ao3UserSeriesExtractor.series%  s    A0ABBr=   re   N)rf   rg   rh   ri   rj   r   r   r   r   r    r$   ro   re   r=   r   r   r     s)    -K % %G=G8Cr=   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	r   i)  z-Extractor for bookmarked works of an AO3 userzuser-bookmarkz=(/users/([^/?#]+)/(?:pseuds/([^/?#]+)/)?bookmarks(?:/?\?.+)?)z0https://archiveofourown.org/users/USER/bookmarksc                 &    U R                  SS5      $ )Nbookmarkz<span class="count"><a href="/r7   r;   s    r   r    Ao3UserBookmarkExtractor.items0  s    z+KLLr=   re   Nrf   rg   rh   ri   rj   r   r   r   r   r    ro   re   r=   r   r   r   )  s$    7!K ( (G@GMr=   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	Ao3SubscriptionsExtractori4  z.Extractor for your AO3 account's subscriptionssubscriptionsz+(/users/([^/?#]+)/subscriptions(?:/?\?.+)?)z4https://archiveofourown.org/users/USER/subscriptionsc                 (    U R                  SSS5      $ )Nsubscriptionz<dt>
<a href="/Fr   r;   s    r   r    Ao3SubscriptionsExtractor.items:  s    ~/A5IIr=   re   Nr   re   r=   r   r   r   4  s     8!KKKGDGJr=   r   N)rj   commonr   r   r   rv   r   r   r	   r
   r   r   r   r'   r   r   r(   r   r   r   r   re   r=   r   <module>r      s    2 0 0 $ $ ;]'9 ]'@sI| sIl9 9;l ;P P*x *=L =C\ C(M| MJ Jr=   