
    01iW                    >    S SK Jr  S SKrS SKrSS jrSS jrSS jrg)	    )annotationsNc                    U R                  5       R                  S5      n U (       d  g U R                  SS5      R                  S5      S   n U (       a  U S;   a  g U $ )N"'\/>   ...)stripreplacesplit)filenames    U/home/james-whalen/.local/lib/python3.13/site-packages/rdflib/contrib/graphdb/util.pysanitize_filenamer      sS    ~~%%e,Hc*005b9Hx;.O    c                6   U (       d  gSnSnU R                  S5       GH  nUR                  5       nUR                  5       nUR                  S5      (       a  U[	        S5      S R                  5       nUR                  5       R                  S5      n UR                  SS5      u  pgUR                  SS5      u  p [        R                  R                  U	5      n
U
R                  USS	9n[        U5      nM  UR                  S
5      (       d  M  U[	        S
5      S R                  5       n[        U5      nGM     U=(       d    U$ ! [
         a    SnUn	 Nf = f! [         a2    [        R                  R                  U	5      n
U
R                  SSS	9n Nf = f)zExtract filename from Content-Disposition header.

Supports both ``filename=`` and RFC 5987 ``filename*=``; prefers ``filename*=``
when present. Returned filenames are sanitized to prevent path traversal.
N;z
filename*=r   '   zutf-8r   )errorsz	filename=)r   r   lower
startswithlen
ValueErrorurllibparseunquote_to_bytesdecodeLookupErrorr   )headerfilename_starfilename_plainpartr   valuecharsetrest	_languageencodedrawdecodeds               r   )extract_filename_from_content_dispositionr+      sw     $M!%NS!zz|

L))\*,-335EKKM''.E  %C 3%)ZZQ%7"	@ll33G<**WY*? .g6Mk**[)+,224E.u5N+ ". *N*   !   @ll33G<**WY*?@s$   (E=/EEE9FFc                    [        U SS5      n[        U[        5      (       a  U(       a  [        U5      nU(       a  U$ U$ )zDInfer a safe filename from a file-like object's ``.name`` attribute.nameN)getattr
isinstancestrr   )file_objfallbackr-   inferreds       r   infer_filename_from_fileobjr4   7   s6    8VT*D$$T*OOr   )r   r0   return
str | None)r    r0   r5   r6   )r1   zt.Anyr2   r0   r5   r0   )	
__future__r   typingturllib.parser   r   r+   r4    r   r   <module>r<      s    "  #+Lr   