
    h>"                        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
mZ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 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/m0Z0m1Z1  e+e%jd                        Z3 G d dejh                        Z5 G d de-      Z6e6jo                         e6_8        y)    N)forms)admin_urlname)unquote)staticfiles_storage)Http404HttpResponseHttpResponseRedirect)get_object_or_404)pathreverse)	mark_safe)now)gettext)NoSourceGenerator)InvalidImageFormatError)get_thumbnailer)	Thumbnail)ThumbnailOptions   )settings)	BaseImageFile)DEFERRED_THUMBNAIL_SIZES)
load_model   )"PrimitivePermissionAwareModelAdmin)AdminContextadmin_url_params_encodedpopup_statusc                   <     e Zd Z G d d      Z fdZ fdZ xZS )FileAdminChangeFromc                       e Zd ZeZdZy)FileAdminChangeFrom.Meta N)__name__
__module____qualname__r   modelexcluder$       E/home/dcms/DCMS/lib/python3.12/site-packages/filer/admin/fileadmin.pyMetar#       s    r*   r,   c                     t        |   |i | d| j                  v r't        j                         | j                  d   _        y y )Nfile)super__init__fieldsr   	FileInputwidget)selfargskwargs	__class__s      r+   r0   zFileAdminChangeFrom.__init__$   s>    $)&)T[[ ).):DKK& !r*   c                    ddl m} t        |          }d| j                  v r|d   rt        j                  |d   j                        d   xs d}|d   }|j                  d       |j                  d        ||d   j                  |j                  |j                  d      |       |j                  d	       | j                  S )
Nr   )validate_uploadr.   r   zapplication/octet-streamzw+owner)	file_namer.   r:   	mime_typer)
validationr9   r/   cleanchanged_data	mimetypes
guess_typenameopenseekr.   getcleaned_data)r4   r9   rG   r<   r.   r7   s        r+   r?   zFileAdminChangeFrom.clean)   s    0w}T&&&<+?!,,\&-A-F-FGJhNhI'DIIdOIIaL&v.33YY"&&w/#	 IIcN   r*   )r%   r&   r'   r,   r0   r?   __classcell__r7   s   @r+   r!   r!      s     ;
! !r*   r!   c                        e Zd ZdZdZg dZdgZdZeZ	e
	 	 dd       Z fdZ	 	 d fd	Zd fd		Zd
 Zd Zde_         ed      e_         fdZdededefdZ xZS )	FileAdmin)label
   )rC   original_filenamesha1descriptionr:   )rO   display_canonicalc                 x    d dd|z   ift        d      d|z   ddff|z   }t        j                  r
|d ddiffz   }|S )Nr1   )rC   r:   rP   Advanced)r.   rO   rQ   )collapse)r1   classes)	is_public)_r   FILER_ENABLE_PERMISSIONS)clsextra_main_fieldsextra_advanced_fieldsextra_fieldsets	fieldsetss        r+   build_fieldsetszFileAdmin.build_fieldsetsD   s       &	&  z] *	*
 ) 
  !	" ,,!n % I
 r*   c                    |j                   rd|j                   vrd|j                   vr}d|j                   vrod|j                   vra|j                  r$t        dd|j                  j                  i      }nt        d      }d	j	                  |t        |            }t        |      S t        | !  ||      }t        |d
      r| j                  |j                  d<   |S )z
        Overrides the default to be able to forward to the directory listing
        instead of the default change_list_view
        	_continue
_saveasnew_addanother_edit_from_widgetadmin:filer-directory_listing	folder_idr6   ,admin:filer-directory_listing-unfiled_images{}{}context_datamedia)POSTfolderr   idformatr   r	   r/   response_changehasattrrj   ri   )r4   requestobjurltemplate_responser7   s        r+   ro   zFileAdmin.response_change`   s     LL7<</GLL0W\\1#7<<7
 zz=&13::==%AC BD--(1C (,, "G3GSA$n56:jj**73  r*   c           	         |j                  dt        | j                  d      d t        |      t	        |      d       |r|j
                  dk(  ru|j                  j                         r[d|j                  v r4t        t        t        j                  d      |j                  f      |d<   n|j                  j                  |d<   t        | =  ||||||	      S )
NThistory)show_deletehistory_urlexpand_image_urlis_popupfiler_admin_contextimagesvgexpand)r5   ry   )rq   contextaddchangeform_urlrr   )updater   optsr   r   mime_maintyper.   existsr<   r   Image_metapkrs   r/   render_change_form)r4   rq   r   r   r   r   rr   r7   s          r+   r   zFileAdmin.render_change_form   s    (I> $$W-#/#8
 	 3$$/CHHOO4E%.5mEKKQY6Zbebhbhaj.k*+.1hhll*+w)W#f3 * ( 	(r*   c                    	 | j                  |      j                  t        |            }|j                  }|j                  r_t        | !  |||       |rt        dd|j                  i      }nt        d      }dj                  |t        |            }t        |      S t        | !  |||      S # | j                  j
                  $ r d}Y w xY w)	aB  
        Overrides the default to enable redirecting to the directory view after
        deletion of a image.

        we need to fetch the object and find out who the parent is
        before super, because super will delete the object and make it
        impossible to find out the parent folder to redirect to.
        r   N)rq   	object_idextra_contextrd   re   rf   rg   rh   )get_querysetrF   r   rl   r(   DoesNotExistrk   r/   delete_viewr   rm   rn   r   r	   )r4   rq   r   r   rr   parent_folderrs   r7   s          r+   r   zFileAdmin.delete_view   s    	!##G,00GI4F0GCJJM <<G9+   - =&1=3C3C%DF LM--(1C (,,w"y' # ) 	)' zz&& 	! M	!s   6B6 6CCc                     ddddS )zH
        It seems this is only used for the list view. NICE :-)
        F)r   r   deleter$   )r4   rq   s     r+   get_model_permszFileAdmin.get_model_perms   s    
 
 	
r*   c                 D    |j                   }|rt        d| d| d      S y)Nz	<a href="z">z</a>-)canonical_urlr   )r4   instance	canonicals      r+   rQ   zFileAdmin.display_canonical   s-    **	y2i[EFFr*   Tzcanonical URLc                     t         |          t        d| j                  j	                  | j
                        d| j                  j                  j                   d      gz   S )Nzicon/<int:file_id>/<int:size>filer_	_fileiconrC   )	r/   get_urlsr   
admin_site
admin_view	icon_viewr(   r   
model_name)r4   r7   s    r+   r   zFileAdmin.get_urls   s\    w!0++DNN;tzz//::;9EG%
 
 	
r*   file_idsizereturnc                    |t         vrt        t        t        |      }t	        |t
              s
t               	 t        |      }t        ||fdd      }|j                  |d      }t        j                  j                  |j                        j                  t                      t        |j                         S # t"        t$        f$ r! t        t'        j                   d            cY S w xY w)Nr   T)r   crop)generater   )modifiedzfiler/icons/file-missing.svg)r   r   r
   r   
isinstancer   r   r   get_thumbnailEasyThumbnailobjectsfilterrC   r   r   r	   rs   r   r   r   )r4   rq   r   r   r.   thumbnailerthumbnail_options	thumbnails           r+   r   zFileAdmin.icon_view   s    //M '2$	*)O	a)$/K 04,PT1U V#112Cd1SI!!((inn(=DDceDT'	66'):; 	a'(;(?(?@^(_``	as   BC   -C0/C0)r$   r$   r$   )FF N)N)r%   r&   r'   list_displaylist_per_pagesearch_fieldsautocomplete_fieldsreadonly_fieldsr!   formclassmethodr^   ro   r   r   r   rQ   
allow_tagsrW   short_descriptionr   intr   r   rH   rI   s   @r+   rK   rK   ;   s    LMHM")3ODIK(* 6 !D FK,0($!)F
 $( *+O*<'
a# aS a\ ar*   rK   )9rA   djangor   ,django.contrib.admin.templatetags.admin_urlsr   django.contrib.admin.utilsr   "django.contrib.staticfiles.storager   django.httpr   r   r	   django.shortcutsr
   django.urlsr   r   django.utils.safestringr   django.utils.timezoner   django.utils.translationr   rW   easy_thumbnails.enginer   easy_thumbnails.exceptionsr   easy_thumbnails.filesr   easy_thumbnails.modelsr   r   easy_thumbnails.optionsr   r   r   modelsr   r   r   utils.loaderr   permissionsr   toolsr   r   r   FILER_IMAGE_MODELr   	ModelFormr!   rK   r^   r]   r$   r*   r+   <module>r      s      F . B C C . % - % 1 4 > 1 = 4  $ / % ; G G 	8--.!%// !8fa2 faR  //1	 r*   