
    qi"                         S r SSKrSSKrSSKJr  SSKJrJr  Sr\R                  " \
5      r " S S\5      r " S S	\5      r " S
 S\5      r " S S\5      r " S S5      rg)zB
Tools that make it easier to implement custom WsgiDAV providers.
    N)util)DAVCollectionDAVNonCollectionzreStructuredText enc                   D   ^  \ rS rSrSrU 4S jrS rS rS rS r	Sr
U =r$ )	VirtualCollection   zAbstract base class for collections that contain a list of static members.

Member names are passed to the constructor.
get_member() is implemented by calling self.provider.get_resource_inst()
c                    > [         TU ]  X5        [        R                  " U5      (       a  SU0n[	        U5      [
        L d   e[	        U5      [        L d   eX0l        X@l        g )Ntype)	super__init__r   is_basestringr
   dictlistdisplay_infomember_name_list)selfpathenvironr   r   	__class__s        W/home/kali/flask_env/lib/python3.13/site-packages/wsgidav/samples/dav_provider_tools.pyr   VirtualCollection.__init__   s^    'l++"L1LL!T)))$%---( 0    c                     U R                   $ N)r   r   s    r   get_display_info"VirtualCollection.get_display_info%   s       r   c                     U R                   $ r   )r   r   s    r   get_member_names"VirtualCollection.get_member_names(   s    $$$r   c                     g)z=Return True, since we don't want to lock virtual collections.T r   s    r   prevent_locking!VirtualCollection.prevent_locking+   s    r   c                     U R                   R                  [        R                  " U R                  U5      U R
                  5      $ r   )providerget_resource_instr   join_urir   r   )r   names     r   
get_memberVirtualCollection.get_member/   s1    }}..MM$))T*DLL
 	
r   )r   r   )__name__
__module____qualname____firstlineno____doc__r   r   r   r#   r*   __static_attributes____classcell__r   s   @r   r   r      s&    1!%
 
r   r   c                   \   ^  \ rS rSrSrU 4S jrS rS rS rS r	S r
S	 rS
 rS rSrU =r$ )_VirtualNonCollection9   z5Abstract base class for all non-collection resources.c                 $   > [         TU ]  X5        g r   )r   r   )r   r   r   r   s      r   r   _VirtualNonCollection.__init__<   s    'r   c                     g r   r"   r   s    r   get_content_length(_VirtualNonCollection.get_content_length?       r   c                     g r   r"   r   s    r   get_content_type&_VirtualNonCollection.get_content_typeB   r<   r   c                     g r   r"   r   s    r   get_creation_date'_VirtualNonCollection.get_creation_dateE   r<   r   c                     U R                   $ r   )r)   r   s    r   get_display_name&_VirtualNonCollection.get_display_nameH   s    yyr   c                     [         er   NotImplementedErrorr   s    r   r   &_VirtualNonCollection.get_display_infoK       !!r   c                     g r   r"   r   s    r   get_etag_VirtualNonCollection.get_etagN   r<   r   c                     g r   r"   r   s    r   get_last_modified'_VirtualNonCollection.get_last_modifiedQ   r<   r   c                     g)NFr"   r   s    r   support_ranges$_VirtualNonCollection.support_rangesT   s    r   r"   )r,   r-   r.   r/   r0   r   r:   r>   rA   rD   r   rL   rO   rR   r1   r2   r3   s   @r   r5   r5   9   s8    ?(" r   r5   c                   T   ^  \ rS rSrSrSU 4S jjrS rS rS rS r	S r
S	 rS
rU =r$ )VirtualTextResourcec   z$A virtual file, containing a string.c                 H   > [         TU ]  X5        X0l        X@l        XPl        g r   )r   r   contentdisplay_namedisplay_type)r   r   r   rX   rY   rZ   r   s         r   r   VirtualTextResource.__init__f   s!    '((r   c                 P    [        U R                  5       R                  5       5      $ r   )lenget_contentreadr   s    r   r:   &VirtualTextResource.get_content_lengthl   s    4##%**,--r   c                 F    U R                   R                  S5      (       a  gg)Nz.txtz
text/plain	text/html)r)   endswithr   s    r   r>   $VirtualTextResource.get_content_typeo   s    99f%%r   c                 @    U R                   =(       d    U R                  $ r   )rY   r)   r   s    r   rD   $VirtualTextResource.get_display_namet   s      -DII-r   c                 
    SS0$ )Nr
   zVirtual info filer"   r   s    r   r   $VirtualTextResource.get_display_infow   s    +,,r   c                     g)NTr"   r   s    r   r#   #VirtualTextResource.prevent_lockingz   r<   r   c                 B    [         R                  " U R                  5      $ r   )r   StringIOrX   r   s    r   r^   VirtualTextResource.get_content   s    }}T\\**r   )rX   rY   rZ   )NN)r,   r-   r.   r/   r0   r   r:   r>   rD   r   r#   r^   r1   r2   r3   s   @r   rU   rU   c   s.    .).
.-+ +r   rU   c                   T   ^  \ rS rSrSrSrU 4S jrS rS rS r	S r
S	 rS
 rSrU =r$ )FileResource   zRepresents an existing file.i    c                    > [         R                  R                  U5      (       d  [        R	                  SU< S35        [
        TU ]  X5        X0l        g )NzFileResource(z) does not exist.)osr   exists_loggererrorr   r   	file_path)r   r   r   rv   r   s       r   r   FileResource.__init__   s>    ww~~i((MMM)6GHI'"r   c                 h    [         R                  " U R                  5      nU[        R                     $ r   )rr   statrv   ST_SIZEr   statresultss     r   r:   FileResource.get_content_length   s#    ggdnn-4<<((r   c                     [         R                  R                  U R                  5      (       d  g[        R
                  " U R                  5      $ )Nrb   )rr   r   isfilerv   r   guess_mime_typer   s    r   r>   FileResource.get_content_type   s3    ww~~dnn--
 ##DNN33r   c                 h    [         R                  " U R                  5      nU[        R                     $ r   )rr   ry   rv   ST_CTIMEr{   s     r   rA   FileResource.get_creation_date   #    ggdnn-4==))r   c                 
    SS0$ )Nr
   Filer"   r   s    r   r   FileResource.get_display_info   s    r   c                 h    [         R                  " U R                  5      nU[        R                     $ r   )rr   ry   rv   ST_MTIMEr{   s     r   rO   FileResource.get_last_modified   r   r   c                 L    [        U R                  S[        R                  5      $ )Nrb)openrv   ro   BUFFER_SIZEr   s    r   r^   FileResource.get_content   s    
 DNND,*B*BCCr   )rv   )r,   r-   r.   r/   r0   r   r   r:   r>   rA   r   rO   r^   r1   r2   r3   s   @r   ro   ro      s5    &K#)4* *D Dr   ro   c                   $    \ rS rSrSrS rS rSrg)DAVResolver   z<Return a DAVResource object for a path (None, if not found).c                     Xl         X l        g r   )parent_resolverr)   )r   r   r)   s      r   r   DAVResolver.__init__   s    .	r   c                     [         er   rG   )r   script_name	path_infor   s       r   resolveDAVResolver.resolve   rJ   r   )r)   r   N)r,   r-   r.   r/   r0   r   r   r1   r"   r   r   r   r      s    F"r   r   )r0   rr   ry   wsgidavr   wsgidav.dav_providerr   r   __docformat__get_module_loggerr,   rt   r   r5   rU   ro   r   r"   r   r   <module>r      sp    
   @%

 
 
*
 
H, T+/ +J,D( ,Dd" "r   