Ë
    «#ij°  ã                   óÆ   — d dl Z d dl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Z ej                  e«      ZddgZd„ Zd	„ Zd
„ Z ee«      d„ «       Z ee«      d„ «       Zy)é    N)Ú
pre_deleteÚpre_save)Úreceiver)ÚCKEditor5Field)Úget_django_storage_classÚ!cleanup_ckeditor_images_on_deleteÚ(cleanup_unused_ckeditor_images_on_updatec                 ó6   — | sg S t        j                  d| «      S )zN
    Extracts image paths from the HTML content stored in CKEditor5Field.
    z"<img[^>]*\ssrc=["\']([^"\']+)["\'])ÚreÚfindall)Úhtml_contents    úS/var/www/html/office/venv/lib/python3.12/site-packages/django_ckeditor_5/signals.pyÚextract_image_pathsr      s   € ñ Øˆ	Ü�:‰:Ð;¸\ÓJÐJó    c                 óR  — t        | d«      r†|D ]€  }t        j                  j                  |«      }t        j                  j	                  | j
                  |«      }t        j                  j                  |«      sŒlt        j                  |«       Œ‚ yt        j                  d«       y)z?
    Deletes images from disk based on the provided paths.
    ÚlocationzCStorage does not have 'location' attribute, skipping file deletion.N)
ÚhasattrÚosÚpathÚbasenameÚjoinr   ÚexistsÚremoveÚloggerÚwarning)ÚstorageÚimage_pathsÚimg_pathÚ	file_nameÚabs_paths        r   Údelete_imagesr!      sx   € ô ˆw˜
Ô#Ø#ò 	$ˆHÜŸ™×(Ñ(¨Ó2ˆIÜ—w‘w—|‘| G×$4Ñ$4°iÓ@ˆHÜ�w‰w�~‰~˜hÕ'Ü—	‘	˜(Õ#ñ		$ô 	�‰ØQõ	
r   c                  ó‚   — 	 t        «       }  | «       S # t        $ r"}t        j                  d|› �«       Y d}~yd}~ww xY w)z;Safely returns a storage instance based on Django settings.z$Could not initialize storage class: N)r   Ú	Exceptionr   Úerror)Ústorage_classÚes     r   Úget_safe_storager'   -   s>   € ðÜ0Ó2ˆÙ‹ÐøÜò Ü�‰Ð;¸A¸3Ð?Ô@Üûðús   ‚ “	>œ9¹>c           
      óú  — t        d„ |j                  j                  D «       «      sy	 t        «       }|syg }|j                  j                  D ]B  }t	        |t
        «      sŒ|j                  t        t        ||j                  d«      «      «       ŒD 	 t        ||«       y# t        $ r"}t        j                  d|› �«       Y d}~yd}~ww xY w# t        $ r"}t        j                  d|› �«       Y d}~yd}~ww xY w)z‡
    Removes images from disk when an object is deleted.
    If an error occurs, it is logged, but the deletion process continues.
    c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­w©N©Ú
isinstancer   ©Ú.0Úfs     r   ú	<genexpr>z4cleanup_ckeditor_images_on_delete.<locals>.<genexpr>=   ó   è ø€ ÒL°Œz˜!œ^×,ÑLùó   ‚NÚ z,Failed to delete images on object deletion: z,Error in cleanup_ckeditor_images_on_delete: )ÚanyÚ_metaÚfieldsr'   r,   r   Úextendr   ÚgetattrÚnamer!   r#   r   r   r$   )ÚsenderÚinstanceÚkwargsr   Úimages_to_deleteÚfieldr&   s          r   r   r   7   sã   € ô ÑL°h·n±n×6KÑ6KÔLÔLØðIÜ"Ó$ˆÙØð ÐØ—^‘^×*Ñ*ò 	ˆEÜ˜%¤Õ0Ø ×'Ñ'Ü'¬°¸%¿*¹*ÀbÓ(IÓJõð	ð	OÜ˜'Ð#3Õ4øÜò 	OÜ�N‰NÐIÈ!ÈÐM×NÑNûð	Oûäò IÜ�‰ÐCÀAÀ3ÐG×HÑHûðIúsF   ©C ¶+C Á"1C ÂB! Â!	CÂ*CÃC ÃCÃC Ã	C:ÃC5Ã5C:c           
      óÒ  — t        d„ |j                  j                  D «       «      sy	 t        «       }|sy|j                  j                  D ]ž  }t	        |t
        «      sŒ	 | j                  j                  |j                  ¬«      }t        t        t        ||j                  d«      «      «      }t        t        t        ||j                  d«      «      «      }||z
  }	 t        ||«       Œ  y# | j                  $ r t        «       }Y ŒYw xY w# t        $ r"}	t         j#                  d|	› �«       Y d}	~	Œçd}	~	ww xY w# t        $ r"}	t         j%                  d|	› �«       Y d}	~	yd}	~	ww xY w)z¢
    Removes unused images when an object is updated.
    If any unexpected error occurs, it will be logged, but the deletion process won't break the update.
    c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr*   r+   r-   s     r   r0   z;cleanup_unused_ckeditor_images_on_update.<locals>.<genexpr>Z   r1   r2   N)Úpkr3   z Failed to delete unused images: z3Error in cleanup_unused_ckeditor_images_on_update: )r4   r5   r6   r'   r,   r   ÚobjectsÚgetrA   Úsetr   r8   r9   ÚDoesNotExistr!   r#   r   r   r$   )
r:   r;   r<   r   r>   Úold_instanceÚ
old_imagesÚ
new_imagesÚunused_imagesr&   s
             r   r	   r	   T   sA  € ô ÑL°h·n±n×6KÑ6KÔLÔLØðPÜ"Ó$ˆÙØà—^‘^×*Ñ*ò 	KˆEÜ˜%¤Õ0ð'Ø#)§>¡>×#5Ñ#5¸¿¹Ð#5Ó#E�LÜ!$Ü+¬G°LÀ%Ç*Á*ÈbÓ,QÓRó"�Jô !Ô!4´W¸XÀuÇzÁzÐSUÓ5VÓ!WÓX�
Ø *¨ZÑ 7�ðKÜ! '¨=Õ9ñ	Køð ×*Ñ*ò 'Ü!$£’Jð'ûô !ò KÜ—N‘NÐ%EÀaÀSÐ#I×JÑJûðKûäò PÜ�‰ÐJÈ1È#ÐN×OÑOûðPúsk   ©D; ¶)D; Á!AC.Â0.D; ÃDÃ+D; Ã.D
ÄD; Ä	D
Ä
D; Ä	D8ÄD3Ä.D; Ä3D8Ä8D; Ä;	E&ÅE!Å!E&)r   r   Údjango.db.models.signalsr   r   Údjango.dispatchr   Údjango_ckeditor_5.fieldsr   Údjango_ckeditor_5.storage_utilsr   ÚloggingÚ	getLoggerÚ__name__r   Ú__all__r   r!   r'   r   r	   © r   r   ú<module>rS      s�   ðÛ 	Û 	ç 9Ý $å 3Ý Dã à	ˆ×	Ñ	˜8Ó	$€ð (Ø.ð€òKò
ò ñ 
ˆ*ÓñIó ðIñ8 
ˆ(ÓñPó ñPr   