o
    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   X/var/www/html/ndineBlogger/venv/lib/python3.10/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)	upload_tor   z
created atT)r   auto_now_addzuploaded by userF)r   nullblankeditable	on_deleteNtags)	help_textr!   r   )r    r"   (   )r   r!   r"   
   )boostidnameuploaded_by_user
created_atc              
   C   sX   t tdd}|r*t|}z|| j W dS  ty) } z	td|jd id}~ww 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
        WAGTAILDOCS_EXTENSIONSNr   r   )getattrr   r   r   r   messages)selfallowed_extensionsvalidateer   r   r   clean?   s   
zAbstractDocument.cleanc                 C   s$   z| j j W dS  ty   Y dS w )zM
        Returns True if the image is hosted on the local filesystem
        TF)r   pathNotImplementedErrorr0   r   r   r   is_stored_locallyQ   s   z"AbstractDocument.is_stored_locallyc                 c   s~    d}| j }|jr#|  r|d n| jdj}||jd}d}|d z|V  W |r5|	  d S d S |r>|	  w w )NFrbr   Tr   )
r   closedr8   open_meta	get_fieldstorager*   seekclose)r0   
close_filefr>   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 w | jdgd | j S )N	file_sizeupdate_fields)rD   r   size	Exceptionsaver7   r   r   r   get_file_sizew   s   
zAbstractDocument.get_file_sizec                 C   s8   |   }t|| _W d    d S 1 sw   Y  d S N)rC   r   	file_hash)r0   rB   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 rL   rE   )rL   rM   rI   r7   r   r   r   get_file_hash   s   
zAbstractDocument.get_file_hashc                 C   s,   | j   | j j| _|   | j d d S )Nr   )r   r;   rG   rD   rM   r?   r7   r   r   r   _set_document_file_metadata   s   

z,AbstractDocument._set_document_file_metadatac                 C   s   | j S rK   )r   r7   r   r   r   __str__   s   zAbstractDocument.__str__c                 C   s   t j| jjS rK   )osr5   basenamer   r*   r7   r   r   r   filename      zAbstractDocument.filenamec                 C   s   t j| jd dd  S )N   )rR   r5   splitextrT   r7   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w td| j| jgdS )NWAGTAILDOCS_SERVE_METHODdirectwagtaildocs_serveargs)r.   r   r   urlr6   r	   r)   rT   r7   r   r   r   r^      s   
zAbstractDocument.urlc                 C   s
   t | S rK   )r   get_grouped_references_tor7   r   r   r   	get_usage   s   
zAbstractDocument.get_usagec                 C   s   t d| jfdS )Nzwagtaildocs:document_usager\   )r	   r)   r7   r   r   r   	usage_url   rU   zAbstractDocument.usage_urlc                 C   s   ddl m} ||d| S )Nr   )permission_policychange)wagtail.documents.permissionsrb    user_has_permission_for_instance)r0   userrb   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 )NWAGTAILDOCS_CONTENT_TYPESr   zapplication/octet-stream)r.   r   getrX   lowerr   rT   )r0   content_types_lookupr   r   r   content_type   s   zAbstractDocument.content_typec                 C   s0   t tddg}| j|v rdS dtj| jS )N WAGTAILDOCS_INLINE_CONTENT_TYPESzapplication/pdfinlinez.attachment; filename={0}; filename*=UTF-8''{0})r.   r   rl   formaturllibparsequoterT   )r0   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   abstract_r   verbose_name_pluralr   r   r   r   Meta   s    ry   )3r   r   r   r   	CharFieldrw   r   	FileFieldr   DateTimeFieldr,   
ForeignKeyr   AUTH_USER_MODELSET_NULLr+   wagtail_reference_index_ignorer   r$   PositiveBigIntegerFieldrD   rL   r   
as_managerobjectsr   search_fieldsr   SearchFieldAutocompleteFieldFilterFieldRelatedFieldsr4   r8   r   rC   rJ   rM   rO   rP   rQ   propertyrT   rX   r^   r`   ra   rg   rl   rt   ry   r   r   r   r   r      sn    








r   c                   @   s"   e Zd ZdZG dd dejZdS )Document)r   r   
collectionr$   c                   @   s   e Zd ZdgZdS )zDocument.Meta)choose_documentzCan choose documentN)r   r   r   permissionsr   r   r   r   ry      s    ry   N)r   r   r   admin_form_fieldsr   ry   r   r   r   r   r      s    r   )(os.pathrR   rp   
contextlibr   	mimetypesr   django.confr   django.core.exceptionsr   django.core.validatorsr   	django.dbr   django.dispatchr   django.urlsr	   django.utils.translationr
   rw   taggit.managersr   wagtail.modelsr   r   wagtail.searchr   wagtail.search.querysetr   wagtail.utils.filer   QuerySetr   IndexedModelr   r   document_servedr   r   r   r   <module>   s*     =

