
    hs3                        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
 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mZ ddlmZ ddlmZmZmZmZm Z m!Z!m"Z" dZ#dZ$ ejJ                  dejL                        Z'dZ(dZ)dZ*d Z+ G d de      Z,ejZ                  fdZ.ejZ                  fdZ/ edd      Z0 e0e ee/e(      Z1 e0eee.e)      Z2	 	 d$dZ3 G d d      Z4d Z5d  Z6d! Z7d" Z8eefd#Z9y)%z?App utilities: Compat settings, bug-report tool, pickling apps.    N)
namedtuple)Mapping)deepcopy)
ModuleType)maybe_sanitize_url)ImproperlyConfigured)pyimplementation)ConfigurationView)import_from_cwdqualnamesymbol_by_namepretty   )_OLD_DEFAULTS_OLD_SETTING_KEYS_TO_NEW_KEY_TO_OLD_KEYDEFAULTSSETTING_KEYSfind)Settingsappstr	bugreportfilter_hidden_settingsfind_appa   
software -> celery:{celery_v} kombu:{kombu_v} py:{py_v}
            billiard:{billiard_v} {driver_v}
platform -> system:{system} arch:{arch}
            kernel version:{kernel_version} imp:{py_i}
loader   -> {loader}
settings -> transport:{transport} results:{results}

{human_settings}
zHAPI|TOKEN|KEY|SECRET|PASS|PROFANITIES_LIST|SIGNATURE|DATABASE|BEAT_DBURIzk

Cannot mix new and old setting keys, please rename the
following settings to the new format:

{renames}

z

Cannot mix new setting names with old setting names, please
rename the following settings to use the old format:

{renames}

Or change all of the settings to use the new format :)

z{replace:<36} -> {with_}c                 @    | j                   xs d dt        |       dS )z1String used in __repr__ etc, to id app instances.__main__z at z#x)mainid)apps    L/var/www/Befach/backend/env/lib/python3.12/site-packages/celery/app/utils.pyr   r   A   s#    hh$*%T"S'"66    c                        e Zd ZdZdd fd
Zed        Zed        Zed        Zed        Z	ed	        Z
ed
        Zed        Zd Zd ZddZddZd Zd ZddZddZd Z xZS )r   zsCelery settings object.

    .. seealso:

        :ref:`configuration` for a full list of configuration keys.

    N)deprecated_settingsc                2    t        |   |i | || _        y N)super__init__r%   )selfr%   argskwargs	__class__s       r"   r)   zSettings.__init__O   s    $)&)#6 r#   c                     t         j                  j                  d      xs | j                  d      xs | j                  S )NCELERY_BROKER_READ_URLbroker_read_urlosenvironget
broker_urlr*   s    r"   r0   zSettings.broker_read_urlT   s8     JJNN34 HH&'OO	
r#   c                     t         j                  j                  d      xs | j                  d      xs | j                  S )NCELERY_BROKER_WRITE_URLbroker_write_urlr1   r6   s    r"   r9   zSettings.broker_write_url\   s8     JJNN45 HH'(OO	
r#   c                 h    t         j                  j                  d      xs | j                  dd      S )NCELERY_BROKER_URLr5   broker_hostr2   r3   r4   firstr6   s    r"   r5   zSettings.broker_urld   s-     JJNN./ 4JJ|]3	
r#   c                 h    t         j                  j                  d      xs | j                  dd      S )NCELERY_RESULT_BACKENDresult_backendr=   r6   s    r"   rA   zSettings.result_backendk   s0     JJNN23 BJJ')@A	
r#   c                 &    | j                  dd      S )Ntask_default_exchangetask_default_queuer>   r6   s    r"   rC   zSettings.task_default_exchanger   s    zz# 
 	
r#   c                 &    | j                  dd      S )Ntask_default_routing_keyrD   rE   r6   s    r"   rG   z!Settings.task_default_routing_keyy   s    zz& 
 	
r#   c                 &    | j                  dd      S )Ntimezone	TIME_ZONErE   r6   s    r"   rI   zSettings.timezone   s     zz*k22r#   c                 4    t        i | j                  dd       S )z7Return the current configuration, but without defaults.N)r   mapsr6   s    r"   without_defaultszSettings.without_defaults   s     DIIcrN++r#   c                 &    || j                         v S r'   )rN   )r*   keys     r"   value_set_forzSettings.value_set_for   s    d++---r#   c                     t        ||      S )a  Search for option by name.

        Example:
            >>> from proj.celery import app
            >>> app.conf.find_option('disable_rate_limits')
            ('worker', 'prefetch_multiplier',
             <Option: type->bool default->False>))

        Arguments:
            name (str): Name of option, cannot be partial.
            namespace (str): Preferred name-space (``None`` by default).
        Returns:
            Tuple: of ``(namespace, key, type)``.
        )r   r*   name	namespaces      r"   find_optionzSettings.find_option   s     D)$$r#   c                 F     | j                   | j                  ||      dd  S )z6Shortcut to ``get_by_parts(*find_option(name)[:-1])``.NrL   )get_by_partsrV   rS   s      r"   find_value_for_keyzSettings.find_value_for_key   s)     t  $"2"24"CCR"HIIr#   c                 8    | dj                  d |D                 S )zReturn the current value for setting specified as a path.

        Example:
            >>> from proj.celery import app
            >>> app.conf.get_by_parts('worker', 'disable_rate_limits')
            False
        _c              3   &   K   | ]	  }|s|  y wr'    ).0parts     r"   	<genexpr>z(Settings.get_by_parts.<locals>.<genexpr>   s     <dtT<   )join)r*   partss     r"   rX   zSettings.get_by_parts   s     CHH<e<<==r#   c                 2    	 | d    | S # t         $ r Y | S w xY w)N	__bogus__)KeyErrorr6   s    r"   finalizezSettings.finalize   s/    	   		s   	 	c           	         |rt         nd }t        t              }| j                          |r| n| j	                         } ||j                         D ci c]  \  }}|j                  d      s||vr|| c}}      S c c}}w )Nc                     | S r'   r]   )vs    r"   <lambda>z Settings.table.<locals>.<lambda>   s    r#   r[   )r   dirdictrg   rN   items
startswith)r*   with_defaultscensoredfiltdict_memberssettingskrj   s           r"   tablezSettings.table   sz    )1%{4y(4d.C.C.E%^^-
Q<<$,)> qD
  	 
s   "A>
c                 n    dj                  d | j                  ||      j                         D              S )z;Return a human readable text showing configuration changes.
c              3   F   K   | ]  \  }}| d t        |d         yw)z: 2   )widthNr   )r^   rP   values      r"   r`   z$Settings.humanize.<locals>.<genexpr>   s1      KU e2fU"-./Ks   !)rb   rv   rn   )r*   rp   rq   s      r"   humanizezSettings.humanize   s8    yy K"jjAGGIK K 	Kr#   c                     | j                   r=ddlm} ddlm} | j                   D ]!  }|j                  d|ddd||    d	       # y
y)Nr   )r   )
deprecatedzThe z settingz6.0.0zUse the z instead)descriptionremovalalternativeTF)r%   celery.app.defaultsr   celery.utilsr   warn)r*   r   r   settings       r"   maybe_warn_deprecated_settingsz'Settings.maybe_warn_deprecated_settings   s[    ##7/33d7+X,F(/.6{77K6LH,U   W 4
 r#   ) )celery)FT)__name__
__module____qualname____doc__r)   propertyr0   r9   r5   rA   rC   rG   rI   rN   rQ   rV   rY   rX   rg   rv   r}   r   __classcell__)r-   s   @r"   r   r   F   s     37 7
 
 
 
 
 
 
 
 
 
 
 
 
 3 3,
.%"J>Kr#   r   c                      || |       S r'   r]   rP   converts     r"   _new_key_to_oldr          3r#   c                      || |       S r'   r]   r   s     r"   _old_key_to_newr      r   r#   settings_info_t)defaultsr   key_t	mix_errorc           
         |si n|}|s
t               n|}|st        n|}|st        n|}| }| |i } }t        |j                               |z
  }|j	                  |      }|j	                  |      }	d |r+t
        |	c}
|	r t        |	      t        |      kD  r	t        |c}
|	r.s	t        |c}
|r*t        |      t        |	      kD  rt
        |	c}
n	t
        |	c}
|rt
        t               c}

D ch c]  }j                  |   |vs| }}|rFt        j                  j                  dj                  fdt        |      D                          |j                         D ci c]"  \  }}j                  j                  ||      |$ }}}t!        t#        j$                        fi |}t'        || |gt(        t*        f|	|      S c c}w c c}}w )Nrx   c              3   f   K   | ](  }t         j                  |j                  |           * yw))replacewith_N)FMT_REPLACE_SETTINGformatr   )r^   rP   infos     r"   r`   z"detect_settings.<locals>.<genexpr>  s4      K
  &&s$,,s:K&LK
s   .1)renames)r%   prefix)setr   r   keysintersection_settings_infolen_old_settings_infor   r   r   r   rb   sortedrn   r4   rm   r   r   r   r   r   )confpreconfignore_keysr   all_keysold_keyssourcehave	is_in_new	is_in_oldleftrP   really_leftru   rj   r   r   s                   @r"   detect_settingsr      s   bWG*#%K#+|H(0 hHF|v{{}+D!!(+I!!(+ID#Y
dY#i.8+YJD$+YJD$Y#i.8'JD$ $Y
d#SU
d #'H3$,,s*;4*G3HKH #4>>#8#8 K
k*K
 B
#8 $  	
 6=]]_ETQt||1%q(EGEHT]]+7w7H$!	/*%	  I Fs   /GG''Gc                   2    e Zd ZdZd Zd Zd Z	 ddZd Zy)	
AppPicklerz*Old application pickler/unpickler (< 3.1).c                 p     | j                   | } | j                  |fi |} | j                  |fi | |S r'   )build_kwargs	constructprepare)r*   clsr+   r,   r!   s        r"   __call__zAppPickler.__call__$  sA    """D)dnnS+F+S#F#
r#   c                 @    |j                   j                  |d          y )Nchanges)r   update)r*   r!   r,   s      r"   r   zAppPickler.prepare*  s    y)*r#   c                       | j                   | S r'   )build_standard_kwargs)r*   r+   s     r"   r   zAppPickler.build_kwargs-  s    )t))400r#   Nc                     ||||||||d|
d
S )NF)
r   loaderbackendamqpr   eventslogcontrolset_as_currentconfig_sourcer]   )r*   r   r   r   r   r   r   r   r   accept_magic_kwargsr   s              r"   r   z AppPickler.build_standard_kwargs0  s&     7Fw%!.0 	0r#   c                      |di |S )Nr]   r]   )r*   r   r,   s      r"   r   zAppPickler.construct8  s    }V}r#   r'   )	r   r   r   r   r   r   r   r   r   r]   r#   r"   r   r   !  s#    4+1
 -10r#   r   c                       |       | g| S )zRebuild app for versions 2.5+.r]   )r   picklerr+   s      r"   _unpickle_appr   <  s    79S 4  r#   c                     d|d<    | di |S )zRebuild app for versions 3.1+.Fr   r]   r]   )r   r,   s     r"   _unpickle_app_v2r   A  s    $F==r#   c           	      l    dd}| j                         D ci c]  \  }}| |||       c}}S c c}}w )zFilter sensitive settings.c                 (   t        |t              rt        |      S t        | t              rft        j                  |       r|S d| j                         v rddlm}  ||      j                  |      S d| j                         v rt        ||      S |S )Nr5   r   )
Connection)maskr   )
isinstancer   r   strHIDDEN_SETTINGSsearchlowerkombur   as_urir   )rP   r|   r   r   s       r"   maybe_censorz,filter_hidden_settings.<locals>.maybe_censorI  s~    eW%)%00c3%%c*,,!%(//T/::ciik))%d;;r#   )z********)rn   )r   r   ru   rj   s       r"   r   r   G  s3     /3jjl;daA|Aq!!;;;s   0c                    ddl }ddl}ddl}	 | j                         }dj	                  |j
                  j                  |j
                  j                               }|j                  }t        j	                  t        j                         dj                  d t        j                         D              t        j                         t!               |j"                  |j$                  |j$                  t        j&                         ||t)        | j*                  j,                  xs d      | j*                  j/                         t1        | j2                  j4                              S # t        $ r dx}}Y w xY w)	z=Return a string containing information useful in bug-reports.r   Nz{}:{}r   z, c              3   &   K   | ]	  }|s|  y wr'   r]   )r^   xs     r"   r`   zbugreport.<locals>.<genexpr>k  s     @Qaq@ra   disabled)systemarchkernel_versionpy_icelery_vkombu_v
billiard_vpy_vdriver_v	transportresultshuman_settingsr   )billiardr   r   
connectionr   r   driver_namedriver_versiontransport_cls	ExceptionBUGREPORT_INFO	_platformr   rb   architecturereleaser	   VERSION_BANNER__version__python_versionr   r   rA   r}   r   r   r-   )r!   r   r   r   connr   r   s          r"   r   r   Z  s&   "~~>>$.."<"<"&.."?"?"AC&&	   !YY@)"8"8":@@ ((*&&!!''%%'"388#:#:#HjIxx((*

,,- !    "!!	H"s   AE$ $E54E5c                 *   ddl m} 	  || |      }t        |t              r.d| vr*	 |j
                  }t        |t              r
t               	 |S |S # t        $ r  ||       }Y Sw xY w# t        $ r 	 |j                  }t        |t              rt        d      	 |cY S # t        $ rf t        |dd      r%	 t        |  d||	      cY cY S # t        $ r Y nw xY wt        |      j                         D ]  }t        ||      s|c cY cY S   w xY ww xY w)
zFind app by name.r   )Celery)imp:zBattribute 'celery' is the celery module not the instance of celery__path__Nz.celery)r   r   )baser   AttributeErrorr   r   r!   r   getattrr   ImportErrorvarsvalues)r!   r   r   r   symfoundsuspects          r"   r   r   z  s6   Sc* #z"s#~	GGE%,$&& -0 LJ?  #h  	

eZ0(\^ ^ 1"  " 3
D1'"e7O+9s   ' #Cy//1G!'62&  2 	sp   
A &A) A&%A&)	D3'BDD6CDD	CDC+DDDDD)NNNNN):r   r2   platformr   recollectionsr   collections.abcr   copyr   typesr   kombu.utils.urlr   celery.exceptionsr   celery.platformsr	   celery.utils.collectionsr
   celery.utils.importsr   r   r   celery.utils.textr   r   r   r   r   r   r   r   r   __all__r   compile
IGNORECASEr   E_MIX_OLD_INTO_NEWE_MIX_NEW_INTO_OLDr   r   r   r4   r   r   _settings_info_tr   r   r   r   r   r   r   r   r   r]   r#   r"   <module>r     s+   E 	  	 " #   . 2 - 6 J J $ n n n	 "**NMM
 	  1 7
K  K\ "-  "-  / 2   "k?,> &;1C 
 BF,06r 6!
<&@ "0_ %r#   