ó
    ×›‘h5/  ã                   ó  • S r SSKrSSKrSSKr SSKrSSKJr  SSKJ	r	  SSK
JrJr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJrJrJrJrJr  SSKJr   " S S\R:                  5      r " S S\R>                  \R@                  5      r \RB                  " \R@                  \ 5         " S S5      r" " S S\RF                  5      r$ " S S\RJ                  \RL                  5      r' " S S\RF                  5      r(g! \ a    Sr Nñf = f)z¬
Distributed web servers.

This is going to have to be refactored so that argument parsing is done
by each subprocess and not by the main web server (i.e. GET, POST etc.).
é    N)ÚBytesIO)ÚgetDOMImplementation)ÚaddressÚreactor)ÚLogger)Ústyles)Úpb)Ú
SIZE_LIMIT)ÚhttpÚresourceÚserverÚstaticÚutil)ÚHeadersc                   ó,   • \ rS rSrS rS rS rS rSrg)Ú_ReferenceableProducerWrapperé    c                 ó   • Xl         g ©N©Úproducer)Úselfr   s     ÚWC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/web/distrib.pyÚ__init__Ú&_ReferenceableProducerWrapper.__init__!   s   € Ø �ó    c                 ó8   • U R                   R                  5         g r   )r   ÚresumeProducing©r   s    r   Úremote_resumeProducingÚ4_ReferenceableProducerWrapper.remote_resumeProducing$   s   € Ø�‰×%Ñ%Õ'r   c                 ó8   • U R                   R                  5         g r   )r   ÚpauseProducingr   s    r   Úremote_pauseProducingÚ3_ReferenceableProducerWrapper.remote_pauseProducing'   s   € Ø�‰×$Ñ$Õ&r   c                 ó8   • U R                   R                  5         g r   )r   ÚstopProducingr   s    r   Úremote_stopProducingÚ2_ReferenceableProducerWrapper.remote_stopProducing*   s   € Ø�‰×#Ñ#Õ%r   r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r    r$   r(   Ú__static_attributes__© r   r   r   r       s   † ò!ò(ò'õ&r   r   c                   ó6   • \ rS rSrSrS rS rS rS rS r	Sr
g	)
ÚRequesté.   zb
A request which was received by a L{ResourceSubscription} and sent via
PB to a distributed node.
c                 óÒ  ^^• S H,  nX   mSSS.TS      mUU4S jU4S jS.T   " 5       nX1U'   M.     [        [        US	   5      5      US	'   [        R                  R	                  X5        [        U R                  5      U l        U R                  R                  S
5      U l
        U R                  R                  S5      U l        U R                  R                  S5      U l        U R                  R                  S5      U l        U R                  R                  S5      U l        U R                  R                  S5      U l        U R                  R                  S5      U l        g)zˆ
Initialize this L{twisted.web.distrib.Request} based on the copied
state so that it closely resembles a L{twisted.web.server.Request}.
)ÚhostÚclientÚTCPÚUNIX)ÚINETr7   r   c                  ó@   >• [         R                  " T TS   TS   5      $ )Né   é   )r   ÚIPv4Address)ÚaddrdescÚtups   €€r   Ú<lambda>Ú*Request.setCopyableState.<locals>.<lambda>=   s   ø€ œw×2Ò2°8¸SÀ¹VÀSÈÁVÔLr   c                  ó6   >• [         R                  " T S   5      $ )Nr:   )r   ÚUNIXAddress)r>   s   €r   r?   r@   >   s   ø€ ¤× 3Ò 3°C¸±FÔ ;r   )r6   r7   ÚrequestHeadersÚfinishÚ	setHeaderÚ	addCookieÚsetETagÚsetResponseCodeÚsetLastModifiedÚwriteN)r   Údictr	   Ú
RemoteCopyÚsetCopyableStater   Úcontent_dataÚcontentÚremoteÚremoteMethodrD   rE   rF   rG   rH   rI   Ú_write)r   ÚstateÚkÚaddrr=   r>   s       @@r   rM   ÚRequest.setCopyableState4   s/  ù€ ó
 "ˆAØ‘(ˆCØ %¨vÑ6°s¸1±vÑ>ˆHåLÜ;ñð òó ˆDð �!‹Hñ "ô #*¬$¨uÐ5EÑ/FÓ*GÓ"HˆÐÑÜ
�‰×&Ñ& tÔ3ä˜t×0Ñ0Ó1ˆŒØ—k‘k×.Ñ.¨xÓ8ˆŒØŸ™×1Ñ1°+Ó>ˆŒØŸ™×1Ñ1°+Ó>ˆŒØ—{‘{×/Ñ/°	Ó:ˆŒØ#Ÿ{™{×7Ñ7Ð8IÓJˆÔØ#Ÿ{™{×7Ñ7Ð8IÓJˆÔð —k‘k×.Ñ.¨wÓ7ˆ�r   c                 ó‚   • Sn[         n U R                  XU 5        U[         -  nU[         -  nU[        U5      :¼  a  gM7  )z›
Write the given bytes to the response body.

@param bytes: The bytes to write.  If this is longer than 640k, it
    will be split up into smaller pieces.
r   N)r
   rR   Úlen)r   ÚbytesÚstartÚends       r   rJ   ÚRequest.writeP   sJ   € ð ˆÜˆØØ�K‰K˜ CÐ(Ô)Ø”ZÑˆEØ”:ÑˆCØœ˜E›
Ó"Øñ r   c                 ó‚   • U R                   R                  S[        U5      U5      R                  U R                  5        g )NÚregisterProducer)rP   Ú
callRemoter   Ú
addErrbackÚfail)r   r   Ú	streamings      r   r^   ÚRequest.registerProducer`   s/   € Ø�‰×ÑØÔ =¸hÓ GÈó	
ç
‰*�T—Y‘YÕ
r   c                 ól   • U R                   R                  S5      R                  U R                  5        g )NÚunregisterProducer)rP   r_   r`   ra   r   s    r   re   ÚRequest.unregisterProducere   s$   € Ø�‰×ÑÐ3Ó4×?Ñ?ÀÇ	Á	ÕJr   c                 ó8   • U R                   R                  SUS9  g )NÚ )Úfailure)Ú_logri   ©r   ri   s     r   ra   ÚRequest.failh   s   € Ø�	‰	×Ñ˜" gÐÒ.r   )rR   rF   rO   rD   rG   rE   rI   rH   N)r*   r+   r,   r-   Ú__doc__rM   rJ   r^   re   ra   r.   r/   r   r   r1   r1   .   s!   † ñò
8ò8ò  ò
Kõ/r   r1   c                   ó4   • \ rS rSr\" 5       rS rS rS rSr	g)ÚIssueéo   c                 ó   • Xl         g r   ©Úrequest)r   rs   s     r   r   ÚIssue.__init__r   s   € Ø�r   c                 óÎ   • U[         R                  LaR  [        U[        5      (       d   S5       eU R                  R                  U5        U R                  R                  5         g g )Nzreturn value not a string)r   ÚNOT_DONE_YETÚ
isinstanceÚstrrs   rJ   rD   )r   Úresults     r   ÚfinishedÚIssue.finishedu   sP   € Øœ×,Ñ,Ò,Ü˜f¤c×*Ñ*ÐGÐ,GÓGÐ*Ø�L‰L×Ñ˜vÔ&Ø�L‰L×ÑÕ!ð -r   c           
      ób  • [        U5      nU R                  R                  [        R                  " [
        R                  SS[        R                  " U5      -   5      R                  U R                  5      5        U R                  R                  5         U R                  R                  U5        g )NzServer Connection Lostz&Connection to distributed server lost:)rx   rs   rJ   r   Ú_UnsafeErrorPager   ÚINTERNAL_SERVER_ERRORr   Ú_PREÚrenderrD   rj   Úinfork   s     r   ÚfailedÚIssue.failed{   sz   € ä�g“,ˆØ�‰×ÑÜ×%Ò%Ü×*Ñ*Ø(à8¼4¿9º9ÀWÓ;MÑMó	÷
 ‰f�T—\‘\Ó"ô	
ð 	�‰×ÑÔØ�	‰	�‰�wÕr   rr   N)
r*   r+   r,   r-   r   rj   r   rz   r‚   r.   r/   r   r   ro   ro   o   s   † Ù‹8€Dòò"õ r   ro   c                   óN   • \ rS rSrSrSr\" 5       rS rS r	S r
S rS rS	 rS
rg)ÚResourceSubscriptionéŠ   r:   r   c                 óv   • [         R                  R                  U 5        Xl        X l        / U l        S U l        g r   )r   ÚResourcer   r4   ÚportÚpendingÚ	publisher)r   r4   r‰   s      r   r   ÚResourceSubscription.__init__�   s.   € Ü×Ñ×"Ñ" 4Ô(ØŒ	ØŒ	ØˆŒØˆ�r   c                 ód   • [         R                   " U R                  5      nSUS'   SUS'   / US'   U$ )z3Get persistent state for this ResourceSubscription.Nr‹   r   ÚwaitingrŠ   )ÚcopyÚ__dict__)r   rS   s     r   Ú__getstate__Ú!ResourceSubscription.__getstate__–   s9   € ô —	’	˜$Ÿ-™-Ó(ˆà!ˆˆkÑàˆˆiÑàˆˆiÑØˆr   c                 óô   • U R                   R                  S5        UR                  R                  U R                  5        Xl        SU l        U R                   H  nU R                  U5        M     / U l        g)z=I've connected to a publisher; I'll now send all my requests.zconnected to publisherr   N)	rj   r�   ÚbrokerÚnotifyOnDisconnectÚbootedr‹   rŽ   rŠ   r€   )r   r‹   rs   s      r   Ú	connectedÚResourceSubscription.connected¢   sX   € à�	‰	�‰Ð/Ô0Ø×Ñ×+Ñ+¨D¯K©KÔ8Ø"ŒØˆŒØ—|”|ˆGØ�K‰K˜Ö ñ $àˆ�r   c                 óÊ   • U R                   R                  SUS9  SU l        SU l        U R                   H$  nUR                  S5        UR                  5         M&     / U l        g)zHI can't connect to a publisher; I'll now reply to all pending
requests.
z3could not connect to distributed web service: {msg})Úmsgr   Nz(Unable to connect to distributed server.)rj   r�   rŽ   r‹   rŠ   rJ   rD   )r   rš   rs   s      r   ÚnotConnectedÚ!ResourceSubscription.notConnected¬   sV   € ð 	�	‰	�‰ÐLÐRUˆÑVØˆŒØˆŒØ—|”|ˆGØ�M‰MÐDÔEØ�N‰NÖñ $ð ˆ�r   c                 ó&   • U R                  S5        g )Nzconnection dropped)r›   r   s    r   r–   ÚResourceSubscription.booted¸   s   € Ø×ÑÐ.Õ/r   c                 ó¶  • U R                   (       dî  U R                  R                  U5        U R                  (       d²  SU l        [        R
                  " 5       nSnU R                  S:X  a"  [        R                  " U R                  X#5        O,[        R                  " U R                  U R                  X#5        UR                  5       nUR                  U R                  U R                  5        [&        R(                  $ [        U5      nU R                   R!                  SU5      R                  UR"                  UR$                  5        [&        R(                  $ )a  Render this request, from my server.

This will always be asynchronous, and therefore return NOT_DONE_YET.
It spins off a request to the pb client, and either adds it to the list
of pending issues or requests it immediately, depending on if the
client is already connected.
r:   é
   Úunixrs   )r‹   rŠ   ÚappendrŽ   r	   ÚPBClientFactoryr4   r   ÚconnectUNIXr‰   Ú
connectTCPÚgetRootObjectÚaddCallbacksr—   r›   ro   r_   rz   r‚   r   rv   )r   rs   ÚbfÚtimeoutÚdÚis         r   r€   ÚResourceSubscription.render»   sñ   € ð �~�~Ø�L‰L×Ñ Ô(Ø—<—<Ø �”Ü×'Ò'Ó)�Ø�Ø—9‘9 Ó&Ü×'Ò'¨¯	©	°2Õ?ä×&Ò& t§y¡y°$·)±)¸RÔIØ×$Ñ$Ó&�Ø—‘˜tŸ~™~¨t×/@Ñ/@ÔAô ×"Ñ"Ð"ô	 �g“ˆAØ�N‰N×%Ñ% i°Ó9×FÑFØ—
‘
˜AŸH™Hôô ×"Ñ"Ð"r   )r4   rŠ   r‰   r‹   rŽ   N)r*   r+   r,   r-   ÚisLeafrŽ   r   rj   r   r‘   r—   r›   r–   r€   r.   r/   r   r   r…   r…   Š   s1   † Ø€FØ€GÙ‹8€Dòò
òò
ò0õ#r   r…   c                   óB   • \ rS rSrSr\" 5       rS rSrS r	S r
S rSrg	)
ÚResourcePublisheréØ   z¹
L{ResourcePublisher} exposes a remote API which can be used to respond
to request.

@ivar site: The site which will be used for resource lookup.
@type site: L{twisted.web.server.Site}
c                 ó   • Xl         g r   ©Úsite)r   r³   s     r   r   ÚResourcePublisher.__init__ã   s   € Ø�	r   r;   c                 óœ   • U R                   R                  R                  S5        U R                   R                  U R                  	 U ?U ? U ?g )NÚweb)ÚapplicationÚ
authorizerÚremoveIdentityÚservicesÚserviceNameÚperspectiveNamer   s    r   ÚupgradeToVersion2Ú#ResourcePublisher.upgradeToVersion2è   sH   € Ø×Ñ×#Ñ#×2Ñ2°5Ô9Ø×Ñ×%Ñ% d×&6Ñ&6Ð7ØÐØÐØÑ r   c                 ó   • U $ r   r/   )r   Únames     r   ÚgetPerspectiveNamedÚ%ResourcePublisher.getPerspectiveNamedï   s   € Øˆr   c                 ó  • U R                   R                  U5      nU R                  R                  U5        UR	                  U5      nU[
        R                  La!  UR                  U5        UR                  5         [
        R                  $ )z;
Look up the resource for the given request and render it.
)	r³   ÚgetResourceForrj   r�   r€   r   rv   rJ   rD   )r   rs   Úresry   s       r   Úremote_requestÚ ResourcePublisher.remote_requestò   sf   € ð �i‰i×&Ñ& wÓ/ˆØ�	‰	�‰�wÔØ—‘˜GÓ$ˆØœ×,Ñ,Ò,Ø�M‰M˜&Ô!Ø�N‰NÔÜ×"Ñ"Ð"r   r²   N)r*   r+   r,   r-   rm   r   rj   r   ÚpersistenceVersionr½   rÁ   rÆ   r.   r/   r   r   r¯   r¯   Ø   s,   † ññ ‹8€Dòð Ðò!òõ
#r   r¯   c                   ó@   • \ rS rSrSrSrSrSrSS jrS r	S	 r
S
 rSrg)ÚUserDirectoryéÿ   z²
A resource which lists available user resources and serves them as
children.

@ivar _pwd: An object like L{pwd} which is used to enumerate users and
    their home directories.
Úpublic_htmlz.twistd-web-pbaæ  
<html>
    <head>
    <title>twisted.web.distrib.UserDirectory</title>
    <style>

    a
    {
        font-family: Lucida, Verdana, Helvetica, Arial, sans-serif;
        color: #369;
        text-decoration: none;
    }

    th
    {
        font-family: Lucida, Verdana, Helvetica, Arial, sans-serif;
        font-weight: bold;
        text-decoration: none;
        text-align: left;
    }

    pre, code
    {
        font-family: "Courier New", Courier, monospace;
    }

    p, body, td, ol, ul, menu, blockquote, div
    {
        font-family: Lucida, Verdana, Helvetica, Arial, sans-serif;
        color: #000;
    }
    </style>
    </head>

    <body>
    <h1>twisted.web.distrib.UserDirectory</h1>

    %(users)s
</body>
</html>
Nc                 ó`   • [         R                  R                  U 5        Uc  [        nXl        g r   )r   rˆ   r   ÚpwdÚ_pwd)r   ÚuserDatabases     r   r   ÚUserDirectory.__init__5  s&   € Ü×Ñ×"Ñ" 4Ô(ØÑÜˆLØ �	r   c                 ó&  • / nU R                   R                  5        Hð  nUu  p4pVpxn	UR                  S5      S   n
U
(       d  Un
[        R                  R                  [        R                  R                  X€R                  5      5      (       a  UR                  X:S-   45        [        R                  R                  X€R                  5      n[        R                  R                  U5      (       d  MÖ  US-   nUR                  XÊS-   45        Mò     U$ )zd
Return a list of two-tuples giving links to user resources and text to
associate with those links.
Ú,r   z (file)z.twistdz	 (twistd))
rÏ   ÚgetpwallÚsplitÚosÚpathÚexistsÚjoinÚuserDirNamer¢   ÚuserSocketName)r   ÚusersÚuserrÀ   ÚpasswdÚuidÚgidÚgecosÚdirÚshellÚrealnameÚ
twistdsockÚlinkNames                r   Ú_usersÚUserDirectory._users;  sÓ   € ð
 ˆØ—I‘I×&Ñ&Ö(ˆDØ8<Ñ5ˆD˜# E°Ø—{‘{ 3Ó'¨Ñ*ˆHÞØ�Ü�w‰w�~‰~œbŸg™gŸl™l¨3×0@Ñ0@ÓA×BÑBØ—‘˜d¨yÑ$8Ð9Ô:ÜŸ™Ÿ™ c×+>Ñ+>Ó?ˆJÜ�w‰w�~‰~˜j×)Ó)Ø )Ñ+�Ø—‘˜h°;Ñ(>Ð?Ö@ñ )ð ˆr   c                 óÜ  • [        5       nUR                  SSS5      nUR                  nU R                  5        H€  u  pVUR	                  S5      nUR                  SUS-   5        UR                  U5      nUR                  U5        UR	                  S5      n	U	R                  U5        UR                  U	5        M‚     U R                  SUR                  5       0-  n
U
R                  S5      $ )	zU
Render as HTML a listing of all known users with links to their
personal resources.
NÚulÚaÚhrefÚ/ÚlirÜ   zutf-8)r   ÚcreateDocumentÚdocumentElementrç   ÚcreateElementÚsetAttributeÚcreateTextNodeÚappendChildÚtemplateÚtoxmlÚencode)r   rs   ÚdomImplÚnewDocÚlistingÚlinkÚtextÚlinkElementÚtextNodeÚitemÚhtmlDocs              r   Ú
render_GETÚUserDirectory.render_GETN  sÕ   € ô 'Ó(ˆØ×'Ñ'¨¨d°DÓ9ˆØ×(Ñ(ˆØŸ+™+ž-‰JˆDØ ×.Ñ.¨sÓ3ˆKØ×$Ñ$ V¨T°C©ZÔ8Ø×,Ñ,¨TÓ2ˆHØ×#Ñ# HÔ-Ø×'Ñ'¨Ó-ˆDØ×Ñ˜[Ô)Ø×Ñ Ö%ñ (ð —-‘- G¨W¯]©]«_Ð#=Ñ>ˆØ�~‰~˜gÓ&Ð&r   c                 óÒ  • US:X  a  U $ SnUR                  U5      (       a  US [        U5      *  nSnOUnSn U R                  R                  UR	                  [
        R                  " 5       5      5      u  nnnn	n
nnU(       aH  [        R                  R                  X°R                  5      n[        SU5      nU R                  X5        U$ [        R                  R                  X°R                   5      n[        R                  R#                  U5      (       d  [        R                  " 5       $ [$        R&                  " U5      $ ! [         a    [        R                  " 5       s $ f = f)Nr   s   .twistdr:   r   r¡   )ÚendswithrX   rÏ   ÚgetpwnamÚdecodeÚsysÚgetfilesystemencodingÚKeyErrorr   Ú_UnsafeNoResourcerÖ   r×   rÙ   rÛ   r…   ÚputChildrÚ   rØ   r   ÚFile)r   rÀ   rs   ÚtdÚusernameÚsubÚpw_nameÚ	pw_passwdÚpw_uidÚpw_gidÚpw_gecosÚpw_dirÚpw_shellrå   Úrsr×   s                   r   ÚgetChildÚUserDirectory.getChildc  s+  € Ø�3‹;ØˆKàˆà�=‰=˜×ÑØ˜Jœs 2›w˜hÐ'ˆHØ‰CàˆHØˆCð	0ð —	‘	×"Ñ" 8§?¡?´3×3LÒ3LÓ3NÓ#OÓPñØØØØØØØö ÜŸ™Ÿ™ f×.AÑ.AÓBˆJÜ% f¨jÓ9ˆBØ�M‰M˜$Ô#ØˆIä—7‘7—<‘< ×(8Ñ(8Ó9ˆDÜ—7‘7—>‘> $×'Ñ'Ü×1Ò1Ó3Ð3Ü—;’;˜tÓ$Ð$øô ó 	0Ü×-Ò-Ó/Ò/ð	0ús   ¸AE ÅE&Å%E&)rÏ   r   )r*   r+   r,   r-   rm   rÚ   rÛ   rõ   r   rç   r  r  r.   r/   r   r   rÊ   rÊ   ÿ   s/   † ñð  €KØ%€Nð(€HôT!òò&'õ*#%r   rÊ   ))rm   r�   rÖ   r  rÎ   ÚImportErrorÚior   Úxml.dom.minidomr   Útwisted.internetr   r   Útwisted.loggerr   Útwisted.persistedr   Útwisted.spreadr	   Útwisted.spread.bananar
   Útwisted.webr   r   r   r   r   Útwisted.web.http_headersr   ÚReferenceabler   rL   r1   ÚsetUnjellyableForClassro   rˆ   r…   ÚRootÚ	Versionedr¯   rÊ   r/   r   r   Ú<module>r(     sß   ðñ
ó Û 	Û 
ðÛõ Ý 0ç -Ý !Ý $Ý Ý ,ß <Õ <Ý ,ô& B×$4Ñ$4ô &ô;/ˆb�m‰m˜VŸ^™^ô ;/ð| × Ò ˜&Ÿ.™.¨'Ô 2÷ ñ  ô6K#˜8×,Ñ,ô K#ô\$#˜Ÿ™ ×!1Ñ!1ô $#ôNG%�H×%Ñ%õ G%øð[ ó Ø
‚Cðús   �C; Ã;DÄD