U
    {h                     @   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   `/var/www/dating/data/www/fatepal.com/env/lib/python3.8/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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.d/ Z-e)d0d1 Z.d2d3 Z/e)d4d5 Z0e)d6d7 Z1G d8d9 d9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_userc              
   C   s`   t tdd}|r\t|}z|| j W n4 tk
rZ } ztd|jd iW 5 d}~X Y nX 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k
r$   Y dS X dS )zM
        Returns True if the image is hosted on the local filesystem
        TFN)r   pathNotImplementedErrorr*   r   r   r   is_stored_locallyP   s
    z"AbstractDocument.is_stored_locallyc                 c   sl   d}| j }|jrD|  r$|d n| jdj}||jd}d}|d z
|V  W 5 |rf|	  X d S )NFrbr   Tr   )
r   closedr1   open_meta	get_fieldstorager&   seekclose)r*   Z
close_filefr7   r   r   r   	open_file[   s    

zAbstractDocument.open_filec                 C   sD   | j d kr>z| jj| _ W n tk
r.   Y d S X | jdgd | j S )N	file_sizeZupdate_fields)r<   r   size	Exceptionsaver0   r   r   r   get_file_sizev   s    
zAbstractDocument.get_file_sizec              	   C   s"   |   }t|| _W 5 Q R X 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@   r0   r   r   r   get_file_hash   s    
zAbstractDocument.get_file_hashc                 C   s,   | j   | j j| _|   | j d d S )Nr   )r   r4   r>   r<   rD   r8   r0   r   r   r   _set_document_file_metadata   s    

z,AbstractDocument._set_document_file_metadatac                 C   s   | j S rB   )r   r0   r   r   r   __str__   s    zAbstractDocument.__str__c                 C   s   t j| jjS rB   )osr.   basenamer   r&   r0   r   r   r   filename   s    zAbstractDocument.filenamec                 C   s   t j| jd dd  S )N   )rI   r.   splitextrK   r0   r   r   r   file_extension   s    zAbstractDocument.file_extensionc                 C   sD   t tdd dkr0z
| jjW S  tk
r.   Y nX td| j| jgdS )NZWAGTAILDOCS_SERVE_METHODdirectZwagtaildocs_serveargs)r(   r   r   urlr/   r	   r%   rK   r0   r   r   r   rR      s    
zAbstractDocument.urlc                 C   s
   t | S rB   )r   Zget_grouped_references_tor0   r   r   r   	get_usage   s    zAbstractDocument.get_usagec                 C   s   t d| jfdS )Nzwagtaildocs:document_usagerP   )r	   r%   r0   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|k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.MetaTZdocumentr   N)r   r   r   Zabstract_r   Zverbose_name_pluralr   r   r   r   Meta   s   rb   )3r   r   r   r   Z	CharFieldra   r   Z	FileFieldr   ZDateTimeFieldZ
created_atZ
ForeignKeyr   ZAUTH_USER_MODELZSET_NULLr'   Zwagtail_reference_index_ignorer   r!   ZPositiveIntegerFieldr<   rC   r   Z
as_managerobjectsr   Zsearch_fieldsr   ZSearchFieldZAutocompleteFieldZFilterFieldZRelatedFieldsr-   r1   r   r;   rA   rD   rF   rG   rH   propertyrK   rN   rR   rS   rT   rW   rZ   r`   rb   r   r   r   r   r      sj   








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   rb      s   rb   N)r   r   r   Zadmin_form_fieldsr   rb   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
   ra   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(    <
