a
    Dg                     @   s  d dl Zd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZ d dlmZ d dlmZ d dlm Z  G dd deej!Z"G dd deej#ej$Z%G dd de%Z&e Z'dS )    N)contextmanager)
guess_type)settings)ValidationError)FileExtensionValidator)models)Signal)reverse)gettext_lazy)TaggableManager)CollectionMemberReferenceIndex)index)SearchableQuerySetMixin)hash_filelikec                   @   s   e Zd ZdS )DocumentQuerySetN)__name__
__module____qualname__ r   r   W/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/documents/models.pyr      s   r   c                   @   s  e Zd ZejdeddZejdeddZej	eddd	Z
ejejed
dddejdZde_eddeddZejdddZejddddZe Zejejdddededededejdddedgededg Zdd Z dd Z!e"dd Z#dd  Z$d!d" Z%d#d$ Z&d%d& Z'd'd( Z(e)d)d* Z*e)d+d, Z+e)d-d. Z,d/d0 Z-e)d1d2 Z.d3d4 Z/e)d5d6 Z0e)d7d8 Z1G d9d: d:Z2dS );AbstractDocument   title)
max_lengthverbose_name	documentsfile)Z	upload_tor   z
created atT)r   Zauto_now_addzuploaded by userF)r   nullblankeditableZ	on_deleteNtags)	help_textr   r   )r   r    (   )r   r   r    
   )Zboostidnameuploaded_by_user
created_atc              
   C   sb   t tdd}|r^t|}z|| j W n6 ty\ } ztd|jd iW Y d}~n
d}~0 0 dS )a  
        Checks for WAGTAILDOCS_EXTENSIONS and validates the uploaded file
        based on allowed extensions that were specified.
        Warning : This doesn't always ensure that the uploaded file is valid
        as files can be renamed to have an extension no matter what
        data they contain.

        More info : https://docs.djangoproject.com/en/3.1/ref/validators/#fileextensionvalidator
        ZWAGTAILDOCS_EXTENSIONSNr   r   )getattrr   r   r   r   messages)selfZallowed_extensionsvalidateer   r   r   clean?   s    
zAbstractDocument.cleanc                 C   s(   z| j j W dS  ty"   Y dS 0 dS )zM
        Returns True if the image is hosted on the local filesystem
        TFN)r   pathNotImplementedErrorr+   r   r   r   is_stored_locallyQ   s
    z"AbstractDocument.is_stored_locallyc                 c   sx   d}| j }|jrD|  r$|d n| jdj}||jd}d}|d z|V  W |rt|	  n|rr|	  0 d S )NFrbr   Tr   )
r   closedr2   openZ_meta	get_fieldstorager&   seekclose)r+   Z
close_filefr7   r   r   r   	open_file\   s    

zAbstractDocument.open_filec                 C   sB   | j d u r<z| jj| _ W n ty,   Y d S 0 | jdgd | j S )N	file_sizeZupdate_fields)r<   r   size	Exceptionsaver1   r   r   r   get_file_sizew   s    
zAbstractDocument.get_file_sizec                 C   s6   |   }t|| _W d    n1 s(0    Y  d S N)r;   r   	file_hash)r+   r:   r   r   r   _set_file_hash   s    
zAbstractDocument._set_file_hashc                 C   s&   | j dkr |   | jdgd | j S )N rC   r=   )rC   rD   r@   r1   r   r   r   get_file_hash   s    
zAbstractDocument.get_file_hashc                 C   s,   | j   | j j| _|   | j d d S )Nr   )r   r5   r>   r<   rD   r8   r1   r   r   r   _set_document_file_metadata   s    

z,AbstractDocument._set_document_file_metadatac                 C   s   | j S rB   )r   r1   r   r   r   __str__   s    zAbstractDocument.__str__c                 C   s   t j| jjS rB   )osr/   basenamer   r&   r1   r   r   r   filename   s    zAbstractDocument.filenamec                 C   s   t j| jd dd  S )N   )rI   r/   splitextrK   r1   r   r   r   file_extension   s    zAbstractDocument.file_extensionc                 C   sB   t tdd dkr.z
| jjW S  ty,   Y n0 td| j| jgdS )NZWAGTAILDOCS_SERVE_METHODdirectZwagtaildocs_serveargs)r)   r   r   urlr0   r	   r%   rK   r1   r   r   r   rR      s    
zAbstractDocument.urlc                 C   s
   t | S rB   )r   Zget_grouped_references_tor1   r   r   r   	get_usage   s    zAbstractDocument.get_usagec                 C   s   t d| jfdS )Nzwagtaildocs:document_usagerP   )r	   r%   r1   r   r   r   	usage_url   s    zAbstractDocument.usage_urlc                 C   s   ddl m} ||d| S )Nr   )permission_policyZchange)Zwagtail.documents.permissionsrU   Z user_has_permission_for_instance)r+   userrU   r   r   r   is_editable_by_user   s    z$AbstractDocument.is_editable_by_userc                 C   s.   t tdi }|| j p,t| jd p,dS )NZWAGTAILDOCS_CONTENT_TYPESr   zapplication/octet-stream)r)   r   getrN   lowerr   rK   )r+   Zcontent_types_lookupr   r   r   content_type   s    zAbstractDocument.content_typec                 C   s4   t tddg}| j|v rdS dtj| jS d S )NZ WAGTAILDOCS_INLINE_CONTENT_TYPESzapplication/pdfinlinez.attachment; filename={0}; filename*=UTF-8''{0})r)   r   rZ   formaturllibparsequoterK   )r+   Zinline_content_typesr   r   r   content_disposition   s    
z$AbstractDocument.content_dispositionc                   @   s    e Zd ZdZedZedZdS )zAbstractDocument.MetaTdocumentr   N)r   r   r   Zabstract_r   Zverbose_name_pluralr   r   r   r   Meta   s   rc   )3r   r   r   r   Z	CharFieldrb   r   Z	FileFieldr   ZDateTimeFieldr(   Z
ForeignKeyr   ZAUTH_USER_MODELZSET_NULLr'   Zwagtail_reference_index_ignorer   r!   ZPositiveBigIntegerFieldr<   rC   r   Z
as_managerZobjectsr   Zsearch_fieldsr   ZSearchFieldZAutocompleteFieldZFilterFieldZRelatedFieldsr.   r2   r   r;   rA   rD   rF   rG   rH   propertyrK   rN   rR   rS   rT   rW   rZ   r`   rc   r   r   r   r   r      sl   








r   c                   @   s"   e Zd ZdZG dd dejZdS )Document)r   r   Z
collectionr!   c                   @   s   e Zd ZdgZdS )zDocument.Meta)Zchoose_documentzCan choose documentN)r   r   r   Zpermissionsr   r   r   r   rc      s   rc   N)r   r   r   Zadmin_form_fieldsr   rc   r   r   r   r   re      s   re   )(os.pathrI   r]   
contextlibr   	mimetypesr   Zdjango.confr   Zdjango.core.exceptionsr   Zdjango.core.validatorsr   Z	django.dbr   Zdjango.dispatchr   Zdjango.urlsr	   Zdjango.utils.translationr
   rb   Ztaggit.managersr   Zwagtail.modelsr   r   Zwagtail.searchr   Zwagtail.search.querysetr   Zwagtail.utils.filer   ZQuerySetr   ZIndexedZModelr   re   Zdocument_servedr   r   r   r   <module>   s(    =
