o
    h4                     @   s  d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	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 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( d dl)m*Z*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 ee0Z5e& Z6e7eddZ8G dd deZ9G dd de$j:Z:G dd  d e$j;Z;G d!d" d"e$j<Z=G d#d$ d$eZ>d%d& Z?G d'd( d(e$j@Z@G d)d* d*e$jAZAG d+d, d,e$jBZBdS )-    N)SpooledTemporaryFile)settings)PermissionDenied)FileResponseHttpResponseJsonResponse)get_object_or_404)reverse)NoReverseMatch)cached_property)gettext)gettext_lazyngettext)View)messages)PermissionPolicyChecker)BaseMediaFilterSet)get_valid_next_url_from_requestset_query_params)genericget_image_model)InvalidFilterSpecError)URLGeneratorFormget_image_form)FilterSourceImageIOError)permission_policy)generate_signature)SiteWAGTAILIMAGES_USAGE_PAGE_SIZE   c                   @   s   e Zd ZeZG dd dZdS )ImagesFilterSetc                   @   s   e Zd ZeZg ZdS )zImagesFilterSet.MetaN)__name__
__module____qualname__Imagemodelfields r)   r)   [/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/images/views/images.pyMeta&   s    r+   N)r#   r$   r%   r   r+   r)   r)   r)   r*   r"   #   s    r"   c                       s   e Zd ZededededededdZdZd	ZeZg d
Ze	Z
eZdZdZedZedZdZdZdZdZdZdZg Zdd Zdd Zdd Zedd Z fddZ fdd Zd!d" Z fd#d$Z   Z!S )%	IndexViewNewestOldestzTitle: (A -> Z)zTitle: (Z -> A)zFile size: (low to high)zFile size: (high to low))-created_at
created_attitlez-title	file_sizez
-file_sizer/   images)addchangedeleteTimageImageszAdd an imagewagtailimages:indexzwagtailimages:index_resultszwagtailimages:add_multiplewagtailimages:editzwagtailimages/images/index.htmlz'wagtailimages/images/index_results.htmlc                 C   s   t tddS )NWAGTAILIMAGES_INDEX_PAGE_SIZE   )getattrr   )selfquerysetr)   r)   r*   get_paginate_byF   s   zIndexView.get_paginate_byc                 C   s   | j S N)ORDERING_OPTIONSr>   r)   r)   r*   get_valid_orderingsI   s   zIndexView.get_valid_orderingsc                 C   s$   t | jjddgdd}|S )Nr5   r6   
collectionzmax-165x165)r   %instances_user_has_any_permission_forrequestuserselect_relatedprefetch_renditions)r>   r3   r)   r)   r*   get_base_querysetL   s   zIndexView.get_base_querysetc                 C   s   | j o
| j jjdS Ncollection_id)filtersformcleaned_datagetrC   r)   r)   r*   current_collectionW   s   zIndexView.current_collectionc                    s   t t  d| jo| jjiS rL   )r   superget_add_urlrR   pkrC   	__class__r)   r*   rT   \   s   zIndexView.get_add_urlc                    s   t   }| j|d< |S )Nis_searching)rS   get_filterset_kwargsrX   r>   kwargsrV   r)   r*   rY   c   s   

zIndexView.get_filterset_kwargsc                 C   s(   | j }| jjd}|r|d| 7 }|S )NQUERY_STRING?)	index_urlrG   METArQ   )r>   next_urlrequest_query_stringr)   r)   r*   get_next_urlh   s
   zIndexView.get_next_urlc                    s4   t  jdi |}||  | j| j| jd |S )N)nextrR   current_orderingrB   r)   )rS   get_context_dataupdaterb   rR   orderingrB   r>   r[   contextrV   r)   r*   re   o   s   	zIndexView.get_context_data)"r#   r$   r%   r   rB   default_orderingcontext_object_namer   any_permission_requiredr&   r'   r"   filterset_classshow_other_searchesheader_icon
page_titleadd_item_labelindex_url_nameindex_results_url_nameadd_url_nameedit_url_nametemplate_nameresults_template_namecolumnsr@   rD   rK   r   rR   rT   rY   rb   re   __classcell__r)   r)   rV   r*   r,   +   sD    
r,   c                       s   e Zd ZeZdZedZdZdZdZ	dZ
dZdZdZed	d
 Zdd Z fddZd fdd	Zdd Zedd Z fddZ fddZ fddZ  ZS )EditViewimage_idz+The image could not be saved due to errors.zwagtailimages/images/edit.htmlr9   r:   wagtailimages:deletezwagtailimages:url_generatorr7   c                 C      t  S rA   r   rC   r)   r)   r*   r'         zEditView.modelc                 C   
   t | jS rA   r   r'   rC   r)   r)   r*   get_form_class      
zEditView.get_form_classc                       t   }| jj|d< |S NrH   rS   get_form_kwargsrG   rH   rZ   rV   r)   r*   r         
zEditView.get_form_kwargsNc                    s&   t  |}t| jjd|st|S )Nr5   )rS   
get_objectr    user_has_permission_for_instancerG   rH   r   )r>   r?   objrV   r)   r*   r      s   
zEditView.get_objectc                 C      t dd| jji S )Nz Image '%(image_title)s' updated.image_title_objectr1   rC   r)   r)   r*   get_success_message      zEditView.get_success_messagec                 C   r   rA   )r   rG   rC   r)   r)   r*   r`      s   
zEditView.next_urlc                    s   | j pt  S rA   )r`   rS   get_success_urlrC   rV   r)   r*   r         zEditView.get_success_urlc                    sd   | j  r(tj| j jjs(tj| jt	dd| j j
i t|  t	dgd t j|fi |S )NzWThe source image file could not be found. Please change the source or delete the image.r   Delete)buttons)r   is_stored_locallyospathisfilefiler   errorrG   r   r1   buttonget_delete_urlrS   render_to_response)r>   ri   response_kwargsrV   r)   r*   r      s   

	zEditView.render_to_responsec                    s   t  jdi |}| j|d< | j  |d< z	| j |d< W n ty-   d |d< Y nw ztddd t| j	| jj
fd|d< W |S  tyQ   d |d< Y |S w )	Nrc   usage_count_valfilesizewagtailimages_serve)foo1barargsurl_generator_urlr)   )rS   re   r`   r   	get_usagecountget_file_sizer   r	   url_generator_url_nameidr
   rh   rV   r)   r*   re      s$   

zEditView.get_context_datarA   )r#   r$   r%   r   pk_url_kwargr   error_messagerv   rr   ru   delete_url_namer   ro   rk   r   r'   r   r   r   r   r`   r   r   re   ry   r)   r)   rV   r*   rz   ~   s,    

rz   c                       s\   e Zd ZdgZe ZdZdZedZ	dZ
dZdZdd	 Zd
d Zdd Z fddZ  ZS )URLGeneratorViewr5   r{   r7   zGenerate URLz'wagtailimages/images/url_generator.htmlr9   r:   c                 C      | j jS rA   r   r1   rC   r)   r)   r*   get_page_subtitle      z"URLGeneratorView.get_page_subtitlec                 C   s   g S rA   r)   rC   r)   r)   r*   
get_fields   s   zURLGeneratorView.get_fieldsc                 O   sP   t | j|d| _t|jd| jsttd| jj| jj	dd| _
| |  S )Nr   r5   original)filter_methodwidthheight)initial)r   r'   r   r   r   rH   r   r   r   r   rO   r   re   )r>   rG   r{   r   r[   r)   r)   r*   rQ      s   
zURLGeneratorView.getc                    s    t  jdi |}| j|d< |S )NrO   r)   )rS   re   rO   rh   rV   r)   r*   re      s   
z!URLGeneratorView.get_context_data)r#   r$   r%   rl   r   r'   r   ro   r   rp   rv   rr   ru   r   r   rQ   re   ry   r)   r)   rV   r*   r      s    r   c                   @   s   e Zd Zdd ZdS )GenerateURLViewc           
      C   s
  t  }z	|jj|d}W n |jy   tddidd Y S w t|jd|s/tddiddS zt|d	j	 W n t
yH   tdd
idd Y S w t||}td|||fd}z
tjjddj}W n tjyq   tj j}Y nw td||fd}	t|| |	dddS )Nr   r   zCannot find image.i  )statusr5   z<You do not have permission to generate a URL for this image.i  speczInvalid filter spec.  r   r   T)is_default_sitezwagtailimages:preview)urlpreview_url   )r   objectsrQ   DoesNotExistr   r   r   rH   r   
operationsr   r   r	   r   root_urlfirst)
r>   rG   r{   filter_specr&   r7   	signaturer   site_root_urlr   r)   r)   r*   rQ      s<   
zGenerateURLView.getN)r#   r$   r%   rQ   r)   r)   r)   r*   r      s    r   c                 C   sx   t t |d}z"ttjd}t|d||}|d t|}d|j	 |d< |W S  t
y;   td| dd	d
 Y S w )Nr   )max_sizer   r   zimage/zContent-TypezInvalid filter spec: z
text/plainr   )content_typer   )r   r   r   r   FILE_UPLOAD_MAX_MEMORY_SIZEr   runseekr   format_namer   r   )rG   r{   r   r7   
temp_imageresponser)   r)   r*   preview"  s   


r   c                   @   sV   e Zd Ze ZdZeZdZdZdZ	dZ
dZdZedZd	d
 Zedd Zdd ZdS )
DeleteViewr{   r6   r7   z(wagtailimages/images/confirm_delete.htmlzwagtailimages:image_usager|   r9   zDelete imagec                 C      | j | jj|| jS rA   r   r   rG   rH   r   r>   
permissionr)   r)   r*   user_has_permission?     zDeleteView.user_has_permissionc                 C   s   t dddS )Nz+Are you sure you want to delete this image?z-Are you sure you want to delete these images?   )r   rC   r)   r)   r*   confirmation_messageD  s
   zDeleteView.confirmation_messagec                 C   r   )Nz Image '%(image_title)s' deleted.r   r   rC   r)   r)   r*   r   N  r   zDeleteView.get_success_messageN)r#   r$   r%   r   r'   r   r   permission_requiredro   rv   usage_url_namer   rr   r   rp   r   propertyr   r   r)   r)   r)   r*   r   3  s    
	r   c                       s`   e Zd ZeZdZdZdZedZdZ	dZ
edd Zd	d
 Z fddZdd Zdd Z  ZS )
CreateViewr9   zwagtailimages:addr:   z-The image could not be created due to errors.zwagtailimages/images/add.htmlr7   c                 C   r}   rA   r   rC   r)   r)   r*   r'   ]  r~   zCreateView.modelc                 C   r   rA   r   rC   r)   r)   r*   r   a  r   zCreateView.get_form_classc                    r   r   r   rZ   rV   r)   r*   r   d  r   zCreateView.get_form_kwargsc                 C   s   | j | jjdS )N)uploaded_by_user)r'   rG   rH   rC   r)   r)   r*   get_initial_form_instancei  r   z$CreateView.get_initial_form_instancec                 C   s   t dd|ji S )NzImage '%(image_title)s' added.r   )r   r1   )r>   instancer)   r)   r*   r   l  s   zCreateView.get_success_message)r#   r$   r%   r   rr   rt   ru   r   r   rv   ro   r   r'   r   r   r   r   ry   r)   r)   rV   r*   r   T  s    
r   c                       sN   e Zd Ze ZeZdZeZdZ	dZ
dZdZ fddZdd	 Zd
d Z  ZS )	UsageViewr{   r5   r7   r9   r:   c                    s   t   dS )Nr   )rS   get_base_object_querysetrI   rC   rV   r)   r*   r   z  r   z"UsageView.get_base_object_querysetc                 C   r   rA   r   r   r)   r)   r*   r   }  r   zUsageView.user_has_permissionc                 C   r   rA   r   rC   r)   r)   r*   r     r   zUsageView.get_page_subtitle)r#   r$   r%   r   r'   USAGE_PAGE_SIZEpaginate_byr   r   r   ro   rr   ru   r   r   r   ry   r)   r)   rV   r*   r   p  s    r   )Cr   tempfiler   django.confr   django.core.exceptionsr   django.httpr   r   r   django.shortcutsr   django.urlsr	   django.urls.exceptionsr
   django.utils.functionalr   django.utils.translationr   r   r   r   django.viewsr   wagtail.adminr   wagtail.admin.authr   wagtail.admin.filtersr   wagtail.admin.utilsr   r   wagtail.admin.viewsr   wagtail.imagesr   wagtail.images.exceptionsr   wagtail.images.formsr   r   wagtail.images.modelsr   r   wagtail.images.permissionsr   wagtail.images.utilsr   wagtail.modelsr   permission_checkerr&   r=   r   r"   r,   rz   InspectViewr   r   r   r   r   r   r)   r)   r)   r*   <module>   sH    SP(,!