a
    Døg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)ÚSiteZ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(   úZ/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/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 )%Ú	IndexViewZNewestZOldestzTitle: (A -> Z)zTitle: (Z -> A)zFile size: (low to high)zFile size: (high to low))ú-created_atZ
created_atÚtitlez-titleÚ	file_sizez
-file_sizer,   Úimages)ÚaddÚchangeÚdeleteTÚimageZ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 )NZ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©r8   r(   r(   r)   Úget_valid_orderingsI   s    zIndexView.get_valid_orderingsc                 C   s$   t  | jjddg¡ d¡ d¡}|S )Nr1   r2   Z
collectionzmax-165x165)r   Z%instances_user_has_any_permission_forÚrequestÚuserÚselect_relatedZprefetch_renditions)r8   r/   r(   r(   r)   Úget_base_querysetL   s    ÿýüÿzIndexView.get_base_querysetc                 C   s   | j o| j jj d¡S ©NZcollection_id)ÚfiltersÚformZcleaned_dataÚgetr=   r(   r(   r)   Úcurrent_collectionW   s    zIndexView.current_collectionc                    s   t tƒ  ¡ d| jo| jjiƒS rC   )r   ÚsuperÚget_add_urlrG   Úpkr=   ©Ú	__class__r(   r)   rI   \   s    þzIndexView.get_add_urlc                    s   t ƒ  ¡ }| j|d< |S )NÚis_searching)rH   Úget_filterset_kwargsrM   ©r8   ÚkwargsrK   r(   r)   rN   c   s    

zIndexView.get_filterset_kwargsc                 C   s(   | j }| jj d¡}|r$|d| 7 }|S )NÚQUERY_STRINGú?)Ú	index_urlr?   ZMETArF   )r8   Únext_urlZrequest_query_stringr(   r(   r)   Úget_next_urlh   s
    zIndexView.get_next_urlc                    s4   t ƒ jf i |¤Ž}| |  ¡ | j| j| jdœ¡ |S )N)ÚnextrG   Zcurrent_orderingr<   )rH   Úget_context_dataÚupdaterU   rG   Zorderingr<   ©r8   rP   ÚcontextrK   r(   r)   rW   o   s    üÿ	zIndexView.get_context_data)"r"   r#   r$   r   r<   Zdefault_orderingÚcontext_object_namer   Úany_permission_requiredr%   r&   r!   Zfilterset_classZshow_other_searchesÚheader_iconÚ
page_titleZadd_item_labelÚindex_url_nameZindex_results_url_nameÚadd_url_nameÚedit_url_nameÚtemplate_nameZresults_template_nameÚcolumnsr:   r>   rB   r   rG   rI   rN   rU   rW   Ú__classcell__r(   r(   rK   r)   r+   +   sB   ú
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.htmlr4   r5   úwagtailimages:deletezwagtailimages:url_generatorr3   c                 C   s   t ƒ S r;   r   r=   r(   r(   r)   r&   Š   s    zEditView.modelc                 C   s
   t | jƒS r;   ©r   r&   r=   r(   r(   r)   Úget_form_classŽ   s    zEditView.get_form_classc                    s   t ƒ  ¡ }| jj|d< |S ©Nr@   ©rH   Úget_form_kwargsr?   r@   rO   rK   r(   r)   rl   ‘   s    
zEditView.get_form_kwargsNc                    s&   t ƒ  |¡}t | jjd|¡s"t‚|S )Nr1   )rH   Ú
get_objectr   Ú user_has_permission_for_instancer?   r@   r   )r8   r9   ÚobjrK   r(   r)   rm   –   s    
ÿzEditView.get_objectc                 C   s   t dƒd| jji S )Nz Image '%(image_title)s' updated.Úimage_title©Ú_Úobjectr-   r=   r(   r(   r)   Úget_success_messagež   s    ÿzEditView.get_success_messagec                 C   s
   t | jƒS r;   )r   r?   r=   r(   r(   r)   rT   £   s    zEditView.next_urlc                    s   | j ptƒ  ¡ S r;   )rT   rH   Úget_success_urlr=   rK   r(   r)   ru   §   s    zEditView.get_success_urlc                    sd   | j  ¡ rPtj | j jj¡sPt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.rp   ÚDelete)Zbuttons)rs   Zis_stored_locallyÚosÚpathÚisfileÚfiler   Úerrorr?   rr   r-   ÚbuttonZget_delete_urlrH   Úrender_to_response)r8   rZ   Zresponse_kwargsrK   r(   r)   r}   ª   s    
ÿ
ýú	zEditView.render_to_responsec                    s¤   t ƒ jf i |¤Ž}| j|d< | j ¡  ¡ |d< z| j ¡ |d< W n tyZ   d |d< Y n0 z(tddd t| j	| jj
fd|d< W n tyž   d |d< Y n0 |S )NrV   Zusage_count_valÚfilesizeÚwagtailimages_serve)ZfooÚ1Úbar©ÚargsZurl_generator_url)rH   rW   rT   rs   Ú	get_usageÚcountZget_file_sizer   r	   Úurl_generator_url_nameÚidr
   rY   rK   r(   r)   rW   ¹   s    
ÿzEditView.get_context_data)N)r"   r#   r$   r   Úpk_url_kwargr   Úerror_messagerb   r_   ra   Údelete_url_namer†   r]   r[   r   r&   ri   rl   rm   rt   rT   ru   r}   rW   rd   r(   r(   rK   r)   re   ~   s*   

re   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 )ÚURLGeneratorViewr1   rf   r3   zGenerate URLz'wagtailimages/images/url_generator.htmlr4   r5   c                 C   s   | j jS r;   ©rs   r-   r=   r(   r(   r)   Úget_page_subtitleØ   s    z"URLGeneratorView.get_page_subtitlec                 C   s   g S r;   r(   r=   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‡   r1   Úoriginal)Zfilter_methodÚwidthÚheight)Úinitial)r   r&   rs   r   rn   r@   r   r   r‘   r’   rE   r}   rW   )r8   r?   rf   rƒ   rP   r(   r(   r)   rF   Þ   s    
ÿýÿzURLGeneratorView.getc                    s    t ƒ jf i |¤Ž}| j|d< |S )NrE   )rH   rW   rE   rY   rK   r(   r)   rW   ð   s    
z!URLGeneratorView.get_context_data)r"   r#   r$   r\   r   r&   rˆ   r]   r   r^   rb   r_   ra   r   rŽ   rF   rW   rd   r(   r(   rK   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 0 t |jd|¡s^tddiddS zt|d	j	 W n" t
y   tdd
idd Y S 0 t||ƒ}td|||fd}ztjjddj}W n  tjyâ   tj ¡ j}Y n0 td||fd}	t|| |	dœddS )Nr   r{   zCannot find image.i”  )Ústatusr1   z<You do not have permission to generate a URL for this image.i“  ©ÚspeczInvalid filter spec.é  r   r‚   T)Zis_default_sitezwagtailimages:preview)ÚurlÚpreview_urléÈ   )r   ZobjectsrF   ZDoesNotExistr   r   rn   r@   r   Ú
operationsr   r   r	   r   Zroot_urlÚfirst)
r8   r?   rf   Úfilter_specr%   r3   Ú	signaturer™   Zsite_root_urlrš   r(   r(   r)   rF   ÷   s6    ÿÿü
ÿzGenerateURLView.getN)r"   r#   r$   rF   r(   r(   r(   r)   r”   ö   s   r”   c                 C   s|   t tƒ |d}zDttjd}t|d ||¡}| d¡ t|ƒ}d|j	 |d< |W S  t
yv   td| dd	d
 Y S 0 d S )Nr   )Úmax_sizer–   r   zimage/zContent-TypezInvalid filter spec: z
text/plainr˜   )Úcontent_typer•   )r   r   r   r   ZFILE_UPLOAD_MAX_MEMORY_SIZEr   ÚrunÚseekr   Úformat_namer   r   )r?   rf   rž   r3   Z
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 )Ú
DeleteViewrf   r2   r3   z(wagtailimages/images/confirm_delete.htmlzwagtailimages:image_usagerg   r4   zDelete imagec                 C   s   | j  | jj|| j¡S r;   ©r   rn   r?   r@   rs   ©r8   Z
permissionr(   r(   r)   Úuser_has_permission?  s    ÿ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   r=   r(   r(   r)   Úconfirmation_messageD  s
    ýzDeleteView.confirmation_messagec                 C   s   t dƒd| jji S )Nz Image '%(image_title)s' deleted.rp   rq   r=   r(   r(   r)   rt   N  s    ÿzDeleteView.get_success_messageN)r"   r#   r$   r   r&   rˆ   r   Úpermission_requiredr]   rb   Zusage_url_namerŠ   r_   r   r^   rª   Úpropertyr¬   rt   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 )Ú
CreateViewr4   zwagtailimages:addr5   z-The image could not be created due to errors.zwagtailimages/images/add.htmlr3   c                 C   s   t ƒ S r;   r   r=   r(   r(   r)   r&   ]  s    zCreateView.modelc                 C   s
   t | jƒS r;   rh   r=   r(   r(   r)   ri   a  s    zCreateView.get_form_classc                    s   t ƒ  ¡ }| jj|d< |S rj   rk   rO   rK   r(   r)   rl   d  s    
zCreateView.get_form_kwargsc                 C   s   | j | jjdS )N)Úuploaded_by_user)r&   r?   r@   r=   r(   r(   r)   Úget_initial_form_instancei  s    z$CreateView.get_initial_form_instancec                 C   s   t dƒd|ji S )NzImage '%(image_title)s' added.rp   )rr   r-   )r8   Úinstancer(   r(   r)   rt   l  s    zCreateView.get_success_message)r"   r#   r$   r   r_   r`   ra   r   r‰   rb   r]   r   r&   ri   rl   r±   rt   rd   r(   r(   rK   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 )Ú	UsageViewrf   r1   r3   r4   r5   c                    s   t ƒ  ¡  d¡S )Nr°   )rH   Úget_base_object_querysetrA   r=   rK   r(   r)   r´   z  s    z"UsageView.get_base_object_querysetc                 C   s   | j  | jj|| j¡S r;   r¨   r©   r(   r(   r)   rª   }  s    ÿzUsageView.user_has_permissionc                 C   s   | j jS r;   rŒ   r=   r(   r(   r)   r   ‚  s    zUsageView.get_page_subtitle)r"   r#   r$   r   r&   ÚUSAGE_PAGE_SIZEZpaginate_byrˆ   r   r­   r]   r_   ra   r´   rª   r   rd   r(   r(   rK   r)   r³   p  s   r³   )Crw   Útempfiler   Zdjango.confr   Zdjango.core.exceptionsr   Zdjango.httpr   r   r   Zdjango.shortcutsr   Zdjango.urlsr	   Zdjango.urls.exceptionsr
   Zdjango.utils.functionalr   Zdjango.utils.translationr   rr   r   r   Zdjango.viewsr   Zwagtail.adminr   Zwagtail.admin.authr   Zwagtail.admin.filtersr   Zwagtail.admin.utilsr   r   Zwagtail.admin.viewsr   Zwagtail.imagesr   Zwagtail.images.exceptionsr   Zwagtail.images.formsr   r   Zwagtail.images.modelsr   r   Zwagtail.images.permissionsr   Zwagtail.images.utilsr   Zwagtail.modelsr   Zpermission_checkerr%   r7   rµ   r!   r+   re   ZInspectViewr‹   r”   r¦   r§   r¯   r³   r(   r(   r(   r)   Ú<module>   sF   SP(,!