
    |{IgU                         d Z ddlZddlmZmZmZmZ ddlmZ ddl	m
Z
 ddlmZmZ  ej        e          Z G d d	          Zd
 Zd Zd Zd Zd Zd ZdS )z0
    Signal handlers to manage FileField files.
    N)post_delete	post_init	post_savepre_save)	on_commit   )cache)cleanup_post_deletecleanup_pre_deletec                       e Zd ZdZdS )FakeInstancez;A Fake model instance to ensure an instance is not modifiedN)__name__
__module____qualname____doc__     Y/var/www/CMSBlueprintStation/venv/lib/python3.11/site-packages/django_cleanup/handlers.pyr   r      s        EEEEr   r   c                 .    t          j        |           dS )z?Post_init on all models with file fields, saves original valuesN)r	   make_cleanup_cache)senderinstancekwargss      r   cache_original_post_initr      s    	X&&&&&r   c                     |rdS |j         r_t          j        |          sM	 | j                            |j                   }n# | j        $ r Y dS w xY wt          j        ||           dS dS dS )zEFallback to the database to remake the cleanup cache if there is noneN)pk)source)r   r	   	has_cacheobjectsgetDoesNotExistr   )r   r   rawupdate_fieldsusingr   db_instances          r   fallback_pre_saver&      s    
 { ?5?844 ?	 .,,,<<KK" 	 	 	FF	 +>>>>>>? ? ? ?s    A 
AAc           	          |rdS |sOt          j        |          D ]:\  }}|||v r/t          j        ||          }	|	|k    rt          | |||	|d           ;t          j        |           dS )z;Post_save on all models with file fields, deletes old filesNupdated)r	   fields_for_model_instanceget_field_attrdelete_filer   )
r   r   r"   createdr#   r$   r   
field_namenew_fileold_files
             r   delete_old_post_saver0   &   s       Z$)$CH$M$M 	Z 	Z J$
m(C(C /*EEx''*hyYYY 
X&&&&&r   c           	      b    t          j        |          D ]\  }}t          | ||||d           dS )z=Post_delete on all models with file fields, deletes all filesdeletedN)r	   r)   r+   )r   r   r$   r   r-   file_s         r   delete_all_post_deleter4   7   sJ    "<XFF K K
EFHj%	JJJJK Kr   c           	      H   	 j         sdS t                      _        t          j                  }t          d          s. t          j        |                      _        j        _         t          j        j	                  sj        j	        nj        	                                }j         |k    rdS t          d          s" t          j
        |                      _        |dk    |j         ||dk    d		 fd}t          ||           dS )zDeletes a fileNfieldstorager2   r(   )r2   
model_namer-   	file_namedefault_file_namefiler   r(   c                  $   t          j        ddi d} d }	                     d           d} nH# t          $ r;}|}j        }t
                              d|j        |j                   Y d }~nd }~ww xY wt          j        d|| d d S )Nr   F)saveTzAThere was an exception deleting the file `%s` on field `%s.%s.%s`)r   errorsuccessr   )
r   senddelete	Exception_metalogger	exception	app_labelr8   r
   )	r?   r>   exoptseventr-   r3   r   r   s	       r   run_on_commitz"delete_file.<locals>.run_on_commiti   s    77v7777	DLLeL$$$GG 	D 	D 	DE>DSt~t
D D D D D D D D	D 	 VeWVVPUVVVVVs   3 
A81A33A8)namer   r   r	   get_model_namehasattr	get_fieldr6   callabledefaultget_field_storager7   r   )
r   r   r-   r3   r$   reasonr8   rP   rJ   rI   s
   ````     @r   r+   r+   =   sd    :  "^^EN
 %h//J 5'"" &=eoj*==??% *2%+2E)F)Faek!!EKL_L_LaLaGzW 5)$$ JG/
JGGII Y&  Z$Y&	 	EW W W W W W W W W mU#####r   c                  X   t          j                    D ]} dt          j        |            }t          j        t
          | d|            t          j        t          | d|            t          j        t          | d|            t          j        t          | d|            dS )z%Connect signals to the cleanup models_django_cleanup_r   )r   dispatch_uidr   r   r   N)r	   cleanup_modelsrL   r   connectr   r   r&   r   r0   r   r4   )modelsuffixs     r   rW   rW   {   s    %'' 	A 	AAE$8$?$?AA25';6';';	= 	= 	= 	=*5&9&9&9	; 	; 	; 	;.u';6';';	= 	= 	= 	=25)?v)?)?	A 	A 	A 	A 	A	A 	Ar   )r   loggingdjango.db.models.signalsr   r   r   r   django.db.transactionr    r	   signalsr
   r   	getLoggerr   rD   r   r   r&   r0   r4   r+   rW   r   r   r   <module>r`      s+     P P P P P P P P P P P P + + + + + +       < < < < < < < < 
	8	$	$F F F F F F F F' ' '

? 
? 
?' ' '"K K K;$ ;$ ;$|A A A A Ar   