
    qiP)                        S r SSKrSSKJr  SSKJrJr  SSK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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%S"r&S#r'S$r(S%r)S&r*S'r+S(r,S)r-S*r.S+r/S,r0S-r1S.r2S/r3S0r4S1r5S2r6S3r7S4r8S5r9S6r:S7r;0 \S8_\S9_\S:_\S;_\S<_\S=_\!S>_\#S?_\"S@_\'SA_\*SB_\-SC_\.SD_\1SE_\2SF_\4SG_\5SH_\6SI0Er<\SJ\"SK\SL\!SM\4SN\5SO0r=SPr>SQr?SRr@SSrASTrB " SU SV5      rC " SW SX\D5      rESY rFSZ rGS[ rHS\ rIg)]zL
Implements a DAVError class that is used to signal WebDAV and HTTP errors.
    N)escape)util	xml_tools)etreereStructuredTextd   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                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
DAVErrorCondition   zHMay be embedded in :class:`DAVError` instances to store additional data.c                     Xl         / U l        g Ncondition_codehrefs)selfr   s     F/home/kali/flask_env/lib/python3.13/site-packages/wsgidav/dav_error.py__init__DAVErrorCondition.__init__   s    ,
    c                 :    U R                    SU R                   S3$ )N()r   r   s    r   __str__DAVErrorCondition.__str__   s     %%&a

|155r    c                     UR                  S5      (       d   eU R                  [        [        4;   d   eXR                  ;  a  U R                  R                  U5        g g )N/)
startswithr   PRECONDITION_CODE_LockConflict"PRECONDITION_CODE_MissingLockTokenr   append)r   hrefs     r   add_hrefDAVErrorCondition.add_href   s]    s####""*.'
 
 	
 
 zz!JJd# "r    c                 8   U R                   [        :X  a   [        U R                  5      S:  d   S5       e[        R
                  " S5      n[        R                  " XR                   5      nU R                   H  nU[        R                  " US5      l        M!     U$ )Nr   z/lock-token-submitted requires at least one hrefz{DAV:}errorz
{DAV:}href)r   r+   lenr   r   Element
SubElementtext)r   error_elcond_elr-   s       r   as_xmlDAVErrorCondition.as_xml   s    "DDDJJ!#A@A#==/""8-@-@AJJD;?EWl38 r    c                 p    [         R                  " [        R                  " U R	                  5       SS95      $ )NT)pretty)r   to_strr   xml_to_bytesr7   r$   s    r   	as_stringDAVErrorCondition.as_string   s$    {{911$++-MNNr    r   N)__name__
__module____qualname____firstlineno____doc__r   r%   r.   r7   r=   __static_attributes__ r    r   r   r      s    R6$	Or    r   c                   B    \ rS rSrSr S
SSSS.S jjrS rS rS rS	r	g)DAVError   znGeneral error class that is used to signal HTTP and WEBDAV errors.

May contain a :class:`DAVErrorCondition`.
N)src_exceptionerr_conditionadd_headersc                   [        U5      U l        X l        X0l        X@l        XPl        [        R                  " U5      (       a  [        U5      U l        U R                  b  [        U R                  5      [        L d   eg g r   )
intvaluecontext_inforI   rJ   rK   r   is_strr   type)r   status_coderO   rI   rJ   rK   s         r   r   DAVError.__init__   sq     %
(**&;;}%%!2=!AD&$t/A/A*BFW*W	
W*W&r    c                 *    SU R                  5        S3$ )Nz	DAVError(r#   )get_user_infor$   s    r   __repr__DAVError.__repr__   s    4--/022r    c                    U R                   [        ;   a  [        U R                       nOU R                    nU R                  (       a  USU R                   3-  nO-U R                   [        ;   a  US[        U R                       3-  nU R                  (       a  USU R                  < 3-  nU R
                  (       a  USU R
                  < 3-  nU$ )zReturn readable string.z: z
    Source exception: z
    Error condition: )rN   ERROR_DESCRIPTIONSrO   ERROR_RESPONSESrI   rJ   )r   ss     r   rU   DAVError.get_user_info   s    ::++%djj12A::,A2d''())AZZ?*2odjj1233A+D,>,>+ABBA*4+=+=*@AAA r    c                 $   U R                   (       a0  S[        R                  " U R                   R                  5       5      4$ [	        U 5      n/ nUR                  S5        UR                  S5        UR                  S5        UR                  SU S35        UR                  S5        UR                  SU S	35        UR                  S
[        U R                  5       5       S35        UR                  S5        UR                  SR                  [        R                  [        [        [        R                  R                  5       5      S5      5      5        UR                  S5        SR                  U5      nS[        R                  " U5      4$ )z-Return a tuple (content-type, response page).z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)rJ   r   to_bytesr=   get_http_status_stringr,   html_escaperU   formatpublic_wsgidav_infostrdatetimenowjoin)r   statushtmls      r   get_response_pageDAVError.get_response_page   sM    0d00::<=  (-7	
 	N#S	
 	ixx01O$fVHE*+eK(:(:(<=>dCDGELL((C 1 1 5 5 78'B	
 	$%yy*DMM$,?@@r    )rK   rO   rJ   rI   rN   r   )
r?   r@   rA   rB   rC   r   rV   rU   rj   rD   rE   r    r   rG   rG      s1     

 
,3,!Ar    rG   c                 d    [        U S5      (       a  [        U R                  5      $ [        U 5      $ )z/Return HTTP response code as integer, e.g. 204.rN   )hasattrrM   rN   vs    r   get_http_status_coderp   
  s&    q'177|q6Mr    c                 V    [        U 5      n [        U   $ ! [         a    U S3s $ f = f)zReturn 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)rp   rY   KeyError)ro   codes     r   r`   r`     s:      "D !$''  w s    ((c                 8    [        U 5      n U R                  5       $ r   )as_DAVErrorrj   rn   s    r   rj   rj     s    AA  r    c                     [        U [        5      (       a  U $ [        U [        5      (       a  [        [        U S9$ [        [        U  5      $ )z:Convert any non-DAVError exception to HTTP_INTERNAL_ERROR.)rI   )
isinstancerG   	ExceptionHTTP_INTERNAL_ERROR)es    r   ru   ru   #  s?    !X	Ay	!	!+1==+s44r    )JrC   re   ri   r   ra   wsgidavr   r   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_REQUIREDry   HTTP_NOT_IMPLEMENTEDHTTP_BAD_GATEWAYHTTP_SERVICE_UNAVAILABLEHTTP_GATEWAY_TIMEOUTHTTP_VERSION_NOT_SUPPORTEDHTTP_INSUFFICIENT_STORAGEHTTP_NOT_EXTENDEDrY   rZ   #PRECONDITION_CODE_ProtectedPropertyr+   #PRECONDITION_CODE_LockTokenMismatchr*   %PRECONDITION_CODE_PropfindFiniteDepthr   rx   rG   rp   r`   rj   ru   rE   r    r   <module>r      s  
  & # #"
  
!     

         	   #  "                X- % )	
 ' ) O 5 O > 7 !"@  ;  3  4!" /#$ '% 8 8:V=<+ 'O #%A "&L #!< (E %O OT[Ay [A|
 !
5r    