Ë
    "ïàji+  ã                   óð  — d Z ddlZddlmZ ddlmZ ddlmZ dZ	dZ
dZd	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"d Z#d!Z$d"Z%d#Z&d$Z'd%Z(d&Z)d'Z*d(Z+d)Z,d*Z-d+Z.d,Z/d-Z0d.Z1d/Z2d0Z3d1Z4d2Z5d3Z6d4Z7d5Z8d6Z9d7Z:i ed8“ed9“ed:“ed;“ed<“ed=“e d>“e"d?“e!d@“e&dA“e)dB“e,dC“e-dD“e0dE“e1dF“e3dG“e4dH“e5dIi¥Z;edJe!dKedLe dMe3dNe4dOiZ<dPZ=dQZ>dRZ?dSZ@dTZAd_dU„ZBd_dV„ZC G dW„ dX«      ZD G dY„ dZeE«      ZFd[„ ZGd\„ ZHd]„ ZId^„ ZJy)`zL
Implements a DAVError class that is used to signal WebDAV and HTTP errors.
é    N)Úescape)Ú	xml_tools)ÚetreeÚreStructuredTextéd   ée   éf   éÈ   éÉ   éÊ   éË   éÌ   éÍ   éÎ   éÏ   éâ   i,  i-  i.  i/  i0  i1  i3  i�  i‘  i’  i“  i”  i•  i–  i—  i˜  i™  iš  i›  iœ  i�  iž  iŸ  i   i¡  i¦  i§  i¨  iª  iô  iõ  iö  i÷  iø  iù  iû  iþ  z200 OKz201 Createdz204 No Contentz304 Not Modifiedz400 Bad Requestz401 Unauthorizedz403 Forbiddenz405 Method Not Allowedz404 Not Foundz409 Conflictz412 Precondition Failedz415 Media Type Not Supportedz416 Range Not Satisfiablez
423 Lockedz424 Failed Dependencyz500 Internal Server Errorz501 Not Implementedz502 Bad Gatewayz An invalid request was specifiedz$The specified resource was not foundz=Invalid authentication credentials for the requested resourcez'Access denied to the specified resourcez!An internal server error occurredzNot implementedz&{DAV:}cannot-modify-protected-propertyz{DAV:}lock-token-submittedz${DAV:}lock-token-matches-request-uriz{DAV:}no-conflicting-lockz{DAV:}propfind-finite-depthc                 ó@   — t        | «      t        urt        | |«      } | S )zLConvert a text string (unicode) to bytestring (str on Py2 and bytes on Py3).)ÚtypeÚbytes©ÚsÚencodings     ú@/srv/dav/.venv/lib/python3.12/site-packages/wsgidav/dav_error.pyÚto_bytesr   ƒ   s   € äˆAƒw”eÑÜ�!�XÓˆØ€Hó    c                 ó|   — t        | «      t        u rt        | |«      } | S t        | «      t        urt        | «      } | S )zGConvert data to native str type (bytestring on Py2 and unicode on Py3).)r   r   Ústrr   s     r   Úto_strr   Š   s=   € äˆAƒw”%ÑÜ��8Óˆð €Hô 
ˆa‹œÑ	Ü�‹FˆØ€Hr   c                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚDAVErrorConditionzHMay be embedded in :class:`DAVError` instances to store additional data.c                 ó    — || _         g | _        y ©N©Úcondition_codeÚhrefs)Úselfr$   s     r   Ú__init__zDAVErrorCondition.__init__–   s   € Ø,ˆÔØˆ�
r   c                 ó:   — | j                   › d| j                  › d�S )Nú(ú)r#   ©r&   s    r   Ú__str__zDAVErrorCondition.__str__š   s    € Ø×%Ñ%Ð& a¨¯
©
 |°1Ð5Ð5r   c                 ó²   — |j                  d«      sJ ‚| j                  t        t        fv sJ ‚|| j                  vr| j                  j                  |«       y y )Nú/)Ú
startswithr$   ÚPRECONDITION_CODE_LockConflictÚ"PRECONDITION_CODE_MissingLockTokenr%   Úappend)r&   Úhrefs     r   Úadd_hrefzDAVErrorCondition.add_href�   s\   € Ø�‰˜sÔ#Ð#Ð#Ø×"Ñ"Ü*Ü.ð'
ñ 
ð 	
ð 
ð �t—z‘zÑ!Ø�J‰J×Ñ˜dÕ#ð "r   c                 ó,  — | j                   t        k(  rt        | j                  «      dkD  sJ d«       ‚t	        j
                  d«      }t	        j                  || j                   «      }| j                  D ]  }|t	        j                  |d«      _        Œ |S )Nr   z/lock-token-submitted requires at least one hrefz{DAV:}errorz
{DAV:}href)r$   r1   Úlenr%   r   ÚElementÚ
SubElementÚtext)r&   Úerror_elÚcond_elr3   s       r   Úas_xmlzDAVErrorCondition.as_xml¦   sˆ   € Ø×ÑÔ"DÒDÜ�t—z‘z“? QÒ&ð ØAóÐ&ô —=‘= Ó/ˆÜ×"Ñ" 8¨T×-@Ñ-@ÓAˆØ—J‘Jò 	@ˆDØ;?ŒE×Ñ˜W lÓ3Õ8ð	@àˆr   c                 ó^   — t        t        j                  | j                  «       d¬«      «      S )NT)Úpretty)r   r   Úxml_to_bytesr<   r+   s    r   Ú	as_stringzDAVErrorCondition.as_string±   s    € Ü”i×,Ñ,¨T¯[©[«]À4ÔHÓIÐIr   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   r,   r4   r<   r@   © r   r   r    r    “   s   „ ÙRòò6ò$ò	óJr   r    c                   ó8   — e Zd ZdZ	 d	dddddœd„Zd„ Zd„ Zd„ Zy)
ÚDAVErrorzvGeneral error class that is used to signal HTTP and WEBDAV errors.

    May contain a :class:`DAVErrorCondition`.
    NT)Úsrc_exceptionÚerr_conditionÚadd_headersÚadd_bodyc                óü   — t        |«      | _        || _        || _        || _        || _        t        |t        «      rt        |«      | _        | j                  �t        | j                  «      t        u sJ ‚|| _
        y r"   )ÚintÚvalueÚcontext_inforH   rI   rJ   Ú
isinstancer   r    r   rK   )r&   Ústatus_coderO   rH   rI   rJ   rK   s          r   r'   zDAVError.__init__È   su   € ô ˜Ó%ˆŒ
Ø(ˆÔØ*ˆÔØ*ˆÔØ&ˆÔÜ�m¤SÔ)Ü!2°=Ó!AˆDÔà×ÑÐ&¬$¨t×/AÑ/AÓ*BÔFWÑ*Wð	
ØWà ˆ�r   c                 ó*   — d| j                  «       › d�S )Nz	DAVError(r*   )Úget_user_infor+   s    r   Ú__repr__zDAVError.__repr__à   s   € Ø˜4×-Ñ-Ó/Ð0°Ð2Ð2r   c                 óz  — | j                   t        v rt        | j                      › }n| j                   › }| j                  r|d| j                  › �z  }n+| j                   t        v r|dt        | j                      › �z  }| j                  r|d| j                  ›�z  }| j
                  r|d| j
                  ›�z  }|S )zReturn readable string.z: z
    Source exception: z
    Error condition: )rN   ÚERROR_DESCRIPTIONSrO   ÚERROR_RESPONSESrH   rI   )r&   r   s     r   rS   zDAVError.get_user_infoã   s¾   € à�:‰:Ô+Ñ+Ü% d§j¡jÑ1Ð2‰Aà—:‘:�,ˆAà×ÒØ�2�d×'Ñ'Ð(Ð)Ñ)‰AØ�Z‰Zœ?Ñ*Ø�2”o d§j¡jÑ1Ð2Ð3Ñ3ˆAà×ÒØÐ+¨D×,>Ñ,>Ð+AÐBÑBˆAà×ÒØÐ*¨4×+=Ñ+=Ð*@ÐAÑAˆAð ˆr   c                 óÞ  — ddl m} | j                  r%dt        | j                  j	                  «       «      fS t        | «      }g }|j                  d«       |j                  d«       |j                  d«       |j                  d|› d�«       |j                  d	«       |j                  d
|› d�«       |j                  dt        | j                  «       «      › d�«       |j                  d«       |j                  dj                  |t        t        t        j                  j                  «       «      d«      «      «       |j                  d«       dj                  |«      }dt        |«      fS )z-Return a tuple (content-type, response page).r   )Úpublic_wsgidav_infozapplication/xml; charset=utf-8zZ<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3.org/TR/html4/strict.dtd'>z<html><head>zE  <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>z	  <title>z</title>z</head><body>z  <h1>z</h1>z  <p>z</p>z<hr/>z7<a href='https://github.com/mar10/wsgidav/'>{}</a> - {}zutf-8z</body></html>ú
ztext/html; charset=utf-8)Úwsgidav.utilrY   rI   r   r@   Úget_http_status_stringr2   Úhtml_escaperS   Úformatr   ÚdatetimeÚnowÚjoin)r&   rY   ÚstatusÚhtmls       r   Úget_response_pagezDAVError.get_response_pageù   sA  € å4ð ×Òà0Ü˜×+Ñ+×5Ñ5Ó7Ó8ðð ô (¨Ó-ˆØˆØ�‰ð7ô	
ð 	�‰�NÔ#Ø�‰ØSô	
ð 	�‰�i ˜x xÐ0Ô1Ø�‰�OÔ$Ø�‰�f˜V˜H EÐ*Ô+Ø�‰�eœK¨×(:Ñ(:Ó(<Ó=Ð>¸dÐCÔDØ�‰�GÔØ�‰ØE×LÑLØ#ÜœC¤× 1Ñ 1× 5Ñ 5Ó 7Ó8¸'ÓBóô	
ð 	�‰Ð$Ô%Ø�y‰y˜‹ˆØ*¬H°T«NÐ;Ð;r   r"   )rA   rB   rC   rD   r'   rT   rS   rd   rE   r   r   rG   rG   ½   s3   „ ñð ð!ð
 ØØØô!ò03òó,#<r   rG   c                 óZ   — t        | d«      rt        | j                  «      S t        | «      S )z/Return HTTP response code as integer, e.g. 204.rN   )ÚhasattrrM   rN   ©Úvs    r   Úget_http_status_coderi     s#   € äˆq�'ÔÜ�1—7‘7‹|ÐÜˆq‹6€Mr   c                 óT   — t        | «      }	 t        |   S # t        $ r |› d�cY S w xY w)z¶Return HTTP response string, e.g. 204 -> ('204 No Content').
    The return string always includes descriptive text, to satisfy Apache mod_dav.

    `v`: status code or DAVError
    z Status)ri   rV   ÚKeyError)rh   Úcodes     r   r\   r\   &  s:   € ô   Ó"€Dð Ü! $Ñ'Ð'øÜò  Ø��wÐÒð ús   � –'¦'c                 ó8   — t        | «      } | j                  «       S r"   )Úas_DAVErrorrd   rg   s    r   rd   rd   3  s   € Ü�A‹€AØ×ÑÓ Ð r   c                 óŠ   — t        | t        «      r| S t        | t        «      rt        t        | ¬«      S t        t        | › «      S )z:Convert any non-DAVError exception to HTTP_INTERNAL_ERROR.)rH   )rP   rG   Ú	ExceptionÚHTTP_INTERNAL_ERROR)Úes    r   rn   rn   8  s9   € ä�!”XÔØˆÜ	�A”yÔ	!äÔ+¸1Ô=Ð=äÔ+°¨sÓ4Ð4r   )Úutf8)KrD   r_   rc   r   r]   Úwsgidavr   Úwsgidav.xml_toolsr   Ú__docformat__ÚHTTP_CONTINUEÚHTTP_SWITCHING_PROTOCOLSÚHTTP_PROCESSINGÚHTTP_OKÚHTTP_CREATEDÚHTTP_ACCEPTEDÚHTTP_NON_AUTHORITATIVE_INFOÚHTTP_NO_CONTENTÚHTTP_RESET_CONTENTÚHTTP_PARTIAL_CONTENTÚHTTP_MULTI_STATUSÚHTTP_IM_USEDÚHTTP_MULTIPLE_CHOICESÚ
HTTP_MOVEDÚ
HTTP_FOUNDÚHTTP_SEE_OTHERÚHTTP_NOT_MODIFIEDÚHTTP_USE_PROXYÚHTTP_TEMP_REDIRECTÚHTTP_BAD_REQUESTÚHTTP_UNAUTHORIZEDÚHTTP_PAYMENT_REQUIREDÚHTTP_FORBIDDENÚHTTP_NOT_FOUNDÚHTTP_METHOD_NOT_ALLOWEDÚHTTP_NOT_ACCEPTABLEÚHTTP_PROXY_AUTH_REQUIREDÚHTTP_REQUEST_TIMEOUTÚHTTP_CONFLICTÚ	HTTP_GONEÚHTTP_LENGTH_REQUIREDÚHTTP_PRECONDITION_FAILEDÚHTTP_REQUEST_ENTITY_TOO_LARGEÚHTTP_REQUEST_URI_TOO_LONGÚHTTP_MEDIATYPE_NOT_SUPPORTEDÚHTTP_RANGE_NOT_SATISFIABLEÚHTTP_EXPECTATION_FAILEDÚHTTP_UNPROCESSABLE_ENTITYÚHTTP_LOCKEDÚHTTP_FAILED_DEPENDENCYÚHTTP_UPGRADE_REQUIREDrq   ÚHTTP_NOT_IMPLEMENTEDÚHTTP_BAD_GATEWAYÚHTTP_SERVICE_UNAVAILABLEÚHTTP_GATEWAY_TIMEOUTÚHTTP_VERSION_NOT_SUPPORTEDÚHTTP_INSUFFICIENT_STORAGEÚHTTP_NOT_EXTENDEDrV   rW   Ú#PRECONDITION_CODE_ProtectedPropertyr1   Ú#PRECONDITION_CODE_LockTokenMismatchr0   Ú%PRECONDITION_CODE_PropfindFiniteDepthr   r   r    rp   rG   ri   r\   rd   rn   rE   r   r   ú<module>rª      s¥  ðñ
ó Ý &å Ý #à"€ð
 €ØÐ Ø€à
€Ø€Ø€Ø!Ð Ø€ØÐ ØÐ ØÐ Ø€àÐ Ø€
Ø€
Ø€ØÐ Ø€ØÐ àÐ ØÐ ØÐ Ø€Ø€ØÐ ØÐ ØÐ ØÐ Ø€Ø€	ØÐ ØÐ Ø #Ð ØÐ Ø"Ð Ø Ð ØÐ ØÐ Ø€ØÐ ØÐ àÐ ØÐ ØÐ ØÐ ØÐ Ø Ð ØÐ ØÐ ðØˆXðà�-ðð Ð%ðð Ð)ð	ð
 Ð'ðð Ð)ðð �Oðð Ð5ðð �Oðð �>ðð Ð7ðð !Ð"@ðð Ð ;ðð �ðð Ð3ðð  Ð4ð!ð" Ð/ð#ð$ Ð'ñ%Ð ð8 Ð8ØÐ:ØÐVØÐ=ØÐ<ØÐ+ð€ð 'OÐ #Ø%AÐ "Ø&LÐ #Ø!<Ð Ø(EÐ %óó÷Jñ JôT_<ˆyô _<òDò
 ò!ó
5r   