o
    ÓLVG)  ã                   @   sV  d dl mZmZ d dlmZ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mZ d dlmZ d dlmZ d dlmZ dd„ Zdd„ Zed ƒZefdd„ZG 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j%ƒZ&G dd„ dej%ƒZ'G dd„ dej%ƒZ(G d d!„ d!ej%ƒZ)d"S )#é    )Úabsolute_importÚunicode_literals)ÚdatetimeÚ	timedelta)Úcount)Ú	monotonic)ÚscheduleÚcrontab)Útimedelta_seconds)Ú
schedulers)Úcelery©Úapp)ÚPeriodicTaskÚIntervalScheduleÚCrontabSchedule)ÚPeriodicTasks)Úunittest)Úunicodec                 K   ó$   t  | ¡}| ¡  tdd|i|¤ŽS )NÚinterval© )r   Úfrom_scheduleÚsaveÚcreate_model)r   Úkwargsr   r   r   úP/var/www/html/env/lib/python3.10/site-packages/djcelery/tests/test_schedulers.pyÚcreate_model_interval   ó   
r   c                 K   r   )Nr	   r   )r   r   r   r   )r   r   r	   r   r   r   Úcreate_model_crontab   r   r   c              	   K   sD   t d ttƒ¡d ttƒ¡dddddd�}| d	i t |fi |¤Ž¤ŽS )
Nz	thefoo{0}zdjcelery.unittest.add{0}z[2, 2]z{"callback": "foo"}ÚxazÚcpuÚfoo)ÚnameÚtaskÚargsr   ÚqueueÚrouting_keyÚexchanger   )ÚdictÚformatÚnextÚ_ids)ÚModelr   Úentryr   r   r   r   "   s   úr   c                       s(   e Zd Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚEntryTrackSavec                    s    d| _ tt| ƒj|i |¤Ž d S ©Nr   )ÚsavedÚsuperr/   Ú__init__©Úselfr%   r   ©Ú	__class__r   r   r3   /   s   zEntryTrackSave.__init__c                    s    |  j d7  _ tt| ƒ ¡  d S ©Né   )r1   r2   r/   r   ©r5   r6   r   r   r   3   s   zEntryTrackSave.save)Ú__name__Ú
__module__Ú__qualname__r3   r   Ú__classcell__r   r   r6   r   r/   -   s    r/   c                   @   s   e Zd Zdd„ ZdS )ÚEntrySaveRaisesc                 C   s   t dƒ‚)Nzthis is expected)ÚRuntimeErrorr:   r   r   r   r   :   s   zEntrySaveRaises.saveN)r;   r<   r=   r   r   r   r   r   r?   8   s    r?   c                   @   ó    e Zd ZeZdd„ Zdd„ ZdS )ÚTrackingSchedulerc                 O   s$   d| _ tjj| g|¢R i |¤Ž d S r0   )Úflushedr   ÚDatabaseSchedulerr3   r4   r   r   r   r3   A   s   zTrackingScheduler.__init__c                 C   s   |  j d7  _ tj | ¡ d S r8   )rC   r   rD   Úsyncr:   r   r   r   rE   E   s   zTrackingScheduler.syncN)r;   r<   r=   r/   ÚEntryr3   rE   r   r   r   r   rB   >   s    rB   c                   @   rA   )Útest_ModelEntryc                 C   ó   t j ¡  ¡  d S ©N)r   ÚobjectsÚallÚdeleter:   r   r   r   ÚtearDownM   ó   ztest_ModelEntry.tearDownc                 C   sê   t ttdd�ƒƒ}|  |¡}|  |jddg¡ |  |jddi¡ |  |j¡ |  	|j
d¡ |  |jt¡ |  dddd	œ|j¡ t ¡ }t ttdd�ƒ|d
�}|  |j¡ |  |¡}|  |j|¡ | ¡ }|  |j|j¡ |  	|j
d¡ d S )Né
   ©Úsecondsé   Úcallbackr"   r   r    r!   )r&   r(   r'   )Úlast_run_atr9   )r   r   r   rF   ÚassertListEqualr%   ÚassertDictEqualr   Ú
assertTrueÚassertEqualÚtotal_run_countÚassertIsInstancerT   r   ÚassertDictContainsSubsetÚoptionsr   ÚnowÚassertIsr+   ÚassertGreater)r5   ÚmÚeÚ	right_nowÚm2Úe2Úe3r   r   r   Ú
test_entryP   s.   
þþÿ
ztest_ModelEntry.test_entryN)r;   r<   r=   r/   rF   rM   rf   r   r   r   r   rG   J   s    rG   c                   @   sp   e Zd ZeZdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Útest_DatabaseSchedulerc                 C   s²   t j ¡  ¡  tjj| _i tj_tt	t
dd�ƒƒ}tt	t
dd�ƒƒ}ttdd�ƒ}|||fD ]}| ¡  q.| jtd�| _t jj|jd�| _t jj|jd�| _t jj|jd�| _d S )	NrO   rP   é   )Úminutesz2,4,5)Úminuter   )r#   )r   rJ   rK   rL   r   ÚconfÚCELERYBEAT_SCHEDULEÚprev_scheduler   r   r   r   r	   r   Ú	Schedulerr   ÚsÚgetr#   Úm1rc   Úm3)r5   rq   rc   rr   Úobjr   r   r   ÚsetUpl   s   

ztest_DatabaseScheduler.setUpc                 C   s   | j tj_tj ¡  ¡  d S rI   )rm   r   rk   rl   r   rJ   rK   rL   r:   r   r   r   rM   z   s   
ztest_DatabaseScheduler.tearDownc                 C   s0   |   | jjt¡ |  | jj¡ |  | jj¡ d S rI   )rZ   ro   Ú_dirtyÚsetÚassertIsNoneÚ
_last_syncrW   Ú
sync_everyr:   r   r   r   Útest_constructor~   s   z'test_DatabaseScheduler.test_constructorc                 C   sT   | j j}|  |¡ |  t|ƒd¡ |  d|¡ | ¡ D ]\}}|  || j j¡ qd S )Né   zcelery.backend_cleanup)	ro   r   rW   rX   ÚlenÚassertInÚitemsrZ   rF   )r5   ÚschedÚnra   r   r   r   Útest_all_as_scheduleƒ   s   
ÿz+test_DatabaseScheduler.test_all_as_schedulec                 C   s°   d| j _| j  ¡  | jj| j j }|  |jddg¡ d| j_| j ¡  | jj| jj }|  |jddg¡ | jj| jj }|  |jddg¡ | j 	¡  |  
t| jjj| jj¡ d S )Nú[16, 16]é   z[32, 32]é    )rc   r%   r   ro   r   r#   rU   rq   rr   rL   ÚassertRaisesÚKeyErrorÚ__getitem__)r5   rd   Úe1r   r   r   Útest_schedule_changed‹   s   


z,test_DatabaseScheduler.test_schedule_changedc                 C   sR   |   | j ¡ ¡ tƒ | j_|  | j ¡ ¡ | j j| jj8  _|   | j ¡ ¡ d S rI   )rW   ro   Úshould_syncr   rx   ÚassertFalsery   r:   r   r   r   Útest_should_sync›   s
   
z'test_DatabaseScheduler.test_should_syncc                 C   sˆ   | j j| jj }| j  |¡| j j| jj< |  | j jd¡ | j j| jj }| j  |¡| j j| jj< |  | j jd¡ |  | jj| j j	¡ d S r8   )
ro   r   rq   r#   ÚreserverX   rC   rc   r}   ru   )r5   rˆ   rd   r   r   r   Útest_reserve¢   s   z#test_DatabaseScheduler.test_reservec                 C   sj   | j j| jj }|j}|tdd� }||j_| j j | jj¡ | j  	¡  | j j| jj }|  
|j|¡ d S )Nr9   )Údays)ro   r   rc   r#   rT   r   Úmodelru   ÚaddrE   rX   )r5   rˆ   Úlast_runÚ	last_run2rd   r   r   r   Útest_sync_saves_last_run_at¬   s   
z2test_DatabaseScheduler.test_sync_saves_last_run_atc                 C   sª   | j j| jj }tƒ | j _| j  |¡ }| j j|j< |  | j jd¡ t	j
j| jjd�}d|_| ¡  | j j| jj }|  | j jd¡ |  |j|j¡ |  |jddg¡ d S )Nr9   )Úpkr‚   rR   rƒ   )ro   r   rc   r#   r   rx   r�   rX   rC   r   rJ   rp   r•   r%   r   rT   rU   )r5   rˆ   rd   rc   re   r   r   r   Útest_sync_syncs_before_save·   s   
z2test_DatabaseScheduler.test_sync_syncs_before_savec                 C   s   | j j ¡  | j  ¡  d S rI   )ro   ru   ÚclearrE   r:   r   r   r   Útest_sync_not_dirtyÍ   s   z*test_DatabaseScheduler.test_sync_not_dirtyc                 C   s   | j j d¡ | j  ¡  d S )Nzdoes-not-exist)ro   ru   r‘   rE   r:   r   r   r   Útest_sync_object_goneÑ   s   z,test_DatabaseScheduler.test_sync_object_gonec                 C   s<   t | jƒ| jj| jj< | jj | jj¡ |  t| jj	¡ d S rI   )
r?   rq   ro   r   r#   ru   r‘   r…   r@   rE   r:   r   r   r   Ú test_sync_rollback_on_save_errorÕ   s   z7test_DatabaseScheduler.test_sync_rollback_on_save_errorN)r;   r<   r=   rB   rn   rt   rM   rz   r�   r‰   rŒ   rŽ   r”   r–   r˜   r™   rš   r   r   r   r   rg   i   s    
rg   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )Útest_modelsc                 C   s4   |   ttddd�ƒd¡ |   ttddd�ƒd¡ d S )Nr9   rQ   )ÚeveryÚperiodzevery secondrO   zevery 10 seconds)rX   r   r   r:   r   r   r   Útest_IntervalSchedule_unicodeÝ   s   ÿÿz)test_models.test_IntervalSchedule_unicodec              
   C   s<   |   ttddd d�ƒd¡ |   ttdddddd�ƒd¡ d S )	Né   )rj   ÚhourÚday_of_weekz3 3 * * * (m/h/d/dM/MY)Útuez*/2z4,6©rj   r    r¡   Úday_of_monthÚmonth_of_yearz3 3 tue */2 4,6 (m/h/d/dM/MY))rX   r   r   r:   r   r   r   Útest_CrontabSchedule_unicodeã   s   
þý
üûz(test_models.test_CrontabSchedule_unicodec                 C   s.   t ttdd�ƒƒ}|  t|ƒd |j¡¡ d S )NrO   rP   z{0}: every 10 seconds)r   r   r   rX   r   r*   r#   ©r5   Úpr   r   r   Ú"test_PeriodicTask_unicode_intervalï   s   

ÿz.test_models.test_PeriodicTask_unicode_intervalc                 C   s,   t tddd�ƒ}|  t|ƒd |j¡¡ d S )Nú4, 5)r    r¡   z {0}: * 4,5 4,5 * * (m/h/d/dM/MY))r   r	   rX   r   r*   r#   r§   r   r   r   Ú!test_PeriodicTask_unicode_crontabô   s   

ÿz-test_models.test_PeriodicTask_unicode_crontabc                 C   s¶   t ttdd�ƒƒ}|j}|  t|jƒd¡ ttddddd�ƒ}|j}|  |j	t
dd	gƒ¡ |  |jt
g d
¢ƒ¡ |  |jt
g d¢ƒ¡ |  |jt
g d¢ƒ¡ |  |jt
g d¢ƒ¡ d S )NrO   rP   rª   z10,20,30z1-7z*/3)r    rj   r¤   r¥   r{   é   )rO   rh   é   ©r   r9   rR   rŸ   r{   r¬   é   )r9   rR   rŸ   r{   r¬   r¯   é   )r9   r{   r°   rO   )r   r   r   rX   r
   Ú	run_everyr   r	   ÚassertSetEqualr    rv   rj   r¡   r¤   r¥   )r5   Úp1Ús1Úp2Ús2r   r   r   Ú#test_PeriodicTask_schedule_propertyù   s   ýz/test_models.test_PeriodicTask_schedule_propertyc                 C   s"   t ƒ }|  t|ƒd |j¡¡ d S )Nz{0}: {{no schedule}})r   rX   r   r*   r#   r§   r   r   r   Ú%test_PeriodicTask_unicode_no_schedule	  s   z1test_models.test_PeriodicTask_unicode_no_schedulec                 C   sŽ   t dddddd�}|  |jjtddgƒ¡ |  |jjtdd	gƒ¡ |  |jjtg d
¢ƒ¡ |  |jjtddgƒ¡ |  |jjtddgƒ¡ d S )Nz3, 7z3, 4Ú*z1, 16z1, 7r£   rŸ   r°   r{   r®   r9   rƒ   )	r   rX   r   rj   rv   r    r¡   r¤   r¥   )r5   ro   r   r   r   Útest_CrontabSchedule_schedule  s   ÿz)test_models.test_CrontabSchedule_scheduleN)
r;   r<   r=   rž   r¦   r©   r«   r·   r¸   rº   r   r   r   r   r›   Û   s    r›   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Útest_model_PeriodicTasksc                 C   rH   rI   )r   rJ   rK   rL   r:   r   r   r   rt     rN   ztest_model_PeriodicTasks.setUpc                 C   sj   |   t ¡ ¡ tttdd�ƒƒ}| ¡  t ¡ }|  |¡ d|_| ¡  t ¡ }|  |¡ |  	||¡ d S )NrO   rP   z(23, 24))
rw   r   Úlast_changer   r   r   r   rW   r%   r_   )r5   rq   ÚxÚyr   r   r   Útest_track_changes  s   

z+test_model_PeriodicTasks.test_track_changesN)r;   r<   r=   rt   r¿   r   r   r   r   r»     s    r»   N)*Ú
__future__r   r   r   r   Ú	itertoolsr   Úcelery.fiver   Úcelery.schedulesr   r	   Úcelery.utils.timeutilsr
   Údjceleryr   r   Údjcelery.appr   Údjcelery.modelsr   r   r   r   Údjcelery.tests.utilsr   Údjcelery.compatr   r   r   r,   r   Ú
ModelEntryr/   r?   rD   rB   ÚTestCaserG   rg   r›   r»   r   r   r   r   Ú<module>   s0    r<