
    >i                     J   d Z ddlZddlZddlZddlmZ ddlmZ ddlmZm	Z	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 dd	lmZmZ e	r)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   G d de      Z!dZ"dZ#deddfdZ$ddZ%d ddde&ded   fdZ' G d d      Z( G d d      Z)y)!zDjango-specific customization.    N)datetime)import_module)IOTYPE_CHECKINGAnyListOptionalcastsymbol_by_name)cached_property)_statesignals)FixupWarningImproperlyConfigured)
ModuleType)Protocol)ConnectionHandler)Celery)Taskc                       e Zd ZU eed<   y)DjangoDBModuleconnectionsN)__name__
__module____qualname__r   __annotations__     p/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/celery/fixups/django.pyr   r      s    &&r   r   )DjangoFixupfixupzpEnvironment variable DJANGO_SETTINGS_MODULE is defined
but Django isn't installed.  Won't apply Django fix-ups!
fhreturnc                     	 t        j                  | j                                y # t        t        t
        f$ r Y y w xY wN)osclosefilenoAttributeErrorOSError	TypeError)r#   s    r    _maybe_close_fdr-   $   s2    
GY/ s   #& ==c                 8    | j                   dk  rt        d      y )N)      z)Celery 5.x requires Django 1.11 or later.)VERSIONr   )djangos    r    _verify_django_versionr3   ,   s    ~~"#NOO  r   appr   envr!   c                 2   t         j                  j                  |      }|rEd| j                  j	                         vr)	 ddl}t        |       t        |       j                         S y# t        $ r% t        j                  t        t                     Y yw xY w)z;Install Django fixup if settings module environment is set.r2   r   N)r'   environget
loader_clslowerr2   r3   r!   installImportErrorwarningswarnr   ERR_NOT_INSTALLED)r4   r5   SETTINGS_MODULEr2   s       r    r"   r"   1   s|    jjnnS)O83>>+?+?+AA	. #6*s#++--  	;MM,'89: 	;s   A( (+BBc                       e Zd ZdZddZddZedd       Zej                  dd       Zde	ddfd	Z
de	ddfd
ZddedefdZdee   fdZedefd       Zy)r!   z"Fixup installed when using Django.c                 t    || _         t        j                  | j                   j                          d | _        y r&   )r4   r   default_appset_default_worker_fixupselfr4   s     r    __init__zDjangoFixup.__init__B   s-    %HH  "<@r   r$   c                 x   t         j                  j                  dt        j                                t        d      | _        | j                  | j                  j                  _        t        j                  j                  | j                         t        j                  j                  | j                         | S )Nr   django.conf:settings)syspathinsertr'   getcwdr   	_settingsnowr4   loaderr   import_modulesconnecton_import_modulesworker_initon_worker_initrG   s    r    r;   zDjangoFixup.installH   sv     	299;''(>?"hh&&t'='=>##D$7$78r   c                 f    | j                   t        | j                        | _         | j                   S r&   )rE   DjangoWorkerFixupr4   rW   s    r    worker_fixupzDjangoFixup.worker_fixupU   s+    %!2488!<D!!!r   Nc                     || _         y r&   )rE   )rG   values     r    rZ   zDjangoFixup.worker_fixup[   s
    "r   kwargsc                 8    | j                   j                          y r&   )rZ   validate_modelsrG   r]   s     r    rT   zDjangoFixup.on_import_modules_   s    ))+r   c                 8    | j                   j                          y r&   )rZ   r;   r`   s     r    rV   zDjangoFixup.on_worker_initc   s    !!#r   utcc                 N    |rt        j                         S | j                         S r&   )r   utcnow_now)rG   rb   s     r    rP   zDjangoFixup.nowf   s    $'x 8TYY[8r   c                 h    ddl m} |j                         D cg c]  }|j                   c}S c c}w )Nr   )apps)django.appsrg   get_app_configsname)rG   rg   configs      r    autodiscover_taskszDjangoFixup.autodiscover_tasksi   s&    $*.*>*>*@AAAAs   /c                     t        d      S )Nzdjango.utils.timezone:nowr   rW   s    r    re   zDjangoFixup._nowm   s    9::r   )r4   r   )r$   r!   r$   rY   )r\   rY   r$   NF)r   r   r   __doc__rH   r;   propertyrZ   setterr   rT   rV   boolr   rP   r   strrl   r   re   r   r   r    r!   r!   ?   s    ,A " "
 # #,# ,$ ,$s $t $9t 9 9BDI B ;h ; ;r   c                       e Zd ZdZddZddZddZddZdeddfd	Z	d
e
ddfdZdddeddfdZdddeddfdZdeddfdZddeddfdZddZy)rY   r   r$   Nc                    || _         | j                   j                  j                  dd       | _        t	        dt        d            | _        t        d      | _        t        d      | _	        t        d      f| _
        t        d      | _        y )NCELERY_DB_REUSE_MAXr   z	django.dbzdjango.core.cacherJ   zdjango.db.utils.InterfaceErrorzdjango.db:DatabaseError)r4   confr8   db_reuse_maxr
   r   _db_cacher   rO   interface_errorsDatabaseErrorrF   s     r    rH   zDjangoWorkerFixup.__init__u   sz     HHMM--.CTJ(-*DE#$78'(>? ;<!
 ,,EFr   c                 ,    dd l }|j                          y )Nr   )r2   setup)rG   r2   s     r    django_setupzDjangoWorkerFixup.django_setup   s    r   c                 ~    ddl m} | j                          t        j                  j                  d      s |        y y )Nr   )
run_checksCELERY_SKIP_CHECKS)django.core.checksr   r   r'   r7   r8   )rG   r   s     r    r_   z!DjangoWorkerFixup.validate_models   s,    1zz~~23L 4r   c                    t         j                  j                  | j                         t         j                  j                  | j
                         t         j                  j                  | j                         t         j                  j                  | j                         | j                          | j                          | S r&   )r   beat_embedded_initrS   close_databasetask_prerunon_task_preruntask_postrunon_task_postrunworker_process_initon_worker_process_initclose_cacherW   s    r    r;   zDjangoWorkerFixup.install   s    ""**4+>+>?##D$7$78$$T%9%9:##++D,G,GHr   r]   c                 N   t         j                  j                  d      r| j                          | j                  j
                  j                         D ]-  }|s|j                  s| j                  |j                         / | j                  d       | j                          y )NFORKED_BY_MULTIPROCESSINGT)force)r'   r7   r8   r_   rz   r   all
connection_maybe_close_db_fd_close_databaser   )rG   r]   cs      r    r   z(DjangoWorkerFixup.on_worker_process_init   s     ::>>56  " %%))+ 	6AQ\\''5	6
 	4(r   fdc                 F    	 t        |       y # | j                  $ r Y y w xY wr&   )r-   r|   )rG   r   s     r    r   z$DjangoWorkerFixup._maybe_close_db_fd   s'    	B$$ 		s      senderr   c                 T    t        |j                  dd      s| j                          yy)zCalled before every task.is_eagerFN)getattrrequestr   rG   r   r]   s      r    r   z DjangoWorkerFixup.on_task_prerun   s#    v~~z59! :r   c                 t    t        |j                  dd      s!| j                          | j                          y y )Nr   F)r   r   r   r   r   s      r    r   z!DjangoWorkerFixup.on_task_postrun   s/    v~~z59! :r   c                     | j                   s| j                         S | j                  | j                   dz  k\  rd| _        | j                          | xj                  dz  c_        y )N   r   r/   )ry   r   _db_recyclesr`   s     r    r   z DjangoWorkerFixup.close_database   sX      '')) 1 1A 55 !D  "Qr   r   c                    | j                   j                  j                         D ]&  }	 |r|j                          n|j	                          ( y # | j
                  $ r Y ;| j                  $ r}t        |      }d|vrd|vr Y d }~bd }~ww xY w)Nclosedznot connected)rz   r   r   r(   close_if_unusable_or_obsoleter|   r}   rt   )rG   r   connexcstr_excs        r    r   z!DjangoWorkerFixup._close_database   s    HH((,,. 	D
JJL668	 (( %% c(7*g/Ms   #AB B.BBc                 d    	 | j                   j                          y # t        t        f$ r Y y w xY wr&   )r{   close_cachesr,   r*   rW   s    r    r   zDjangoWorkerFixup.close_cache   s.    	KK$$&>* 		s    //)r4   r   r$   N)r$   Nrn   ro   )r   r   r   r   rH   r   r_   r;   r   r   r   r   r   r   r   rs   r   r   r   r   r    rY   rY   r   s    L
Gs t ,R D "V "s "t "
f   s t T d r   rY   )r2   r   r$   N)DJANGO_SETTINGS_MODULE)*rp   r'   rK   r=   r   	importlibr   typingr   r   r   r   r	   r
   kombu.utils.importsr   kombu.utils.objectsr   celeryr   r   celery.exceptionsr   r   typesr   r   django.db.utilsr   celery.app.baser   celery.app.taskr   r   __all__r?   r-   r3   rt   r"   r!   rY   r   r   r    <module>r      s    $ 	 
   # ? ? . / " @ 1&$' ' #  t P
x c -AX 0; 0;fc cr   