
    `fh3                        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j%        dej&                  Z'dZ(dZ)dZ*d Z+ G d de          Z,ej-        fdZ.ej-        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#Z9dS )%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}
z=API|TOKEN|KEY|SECRET|PASS|PROFANITIES_LIST|SIGNATURE|DATABASEzk

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         pd dt          |           dS )z1String used in __repr__ etc, to id app instances.__main__z at z#x)mainid)apps    B/var/www/html/env/lib/python3.11/site-packages/celery/app/utils.pyr   r   A   s&    h$*66"S''66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                H     t                      j        |i | || _        d S N)super__init__r%   )selfr%   argskwargs	__class__s       r"   r)   zSettings.__init__O   s-    $)&)))#6   r#   c                 x    t           j                            d          p|                     d          p| j        S )NCELERY_BROKER_READ_URLbroker_read_urlosenvironget
broker_urlr*   s    r"   r0   zSettings.broker_read_urlT   s:     JNN344 HH&''O	
r#   c                 x    t           j                            d          p|                     d          p| j        S )NCELERY_BROKER_WRITE_URLbroker_write_urlr1   r6   s    r"   r9   zSettings.broker_write_url\   s:     JNN455 HH'((O	
r#   c                 l    t           j                            d          p|                     dd          S )NCELERY_BROKER_URLr5   broker_hostr2   r3   r4   firstr6   s    r"   r5   zSettings.broker_urld   s1     JNN.// 4JJ|]33	
r#   c                 l    t           j                            d          p|                     dd          S )NCELERY_RESULT_BACKENDresult_backendr=   r6   s    r"   rA   zSettings.result_backendk   s4     JNN233 BJJ')@AA	
r#   c                 .    |                      dd          S )Ntask_default_exchangetask_default_queuer>   r6   s    r"   rC   zSettings.task_default_exchanger   s    zz# 
 
 	
r#   c                 .    |                      dd          S )Ntask_default_routing_keyrD   rE   r6   s    r"   rG   z!Settings.task_default_routing_keyy   s    zz& 
 
 	
r#   c                 .    |                      dd          S )Ntimezone	TIME_ZONErE   r6   s    r"   rI   zSettings.timezone   s     zz*k222r#   c                 <    t          i | j        dd                   S )z7Return the current configuration, but without defaults.N)r   mapsr6   s    r"   without_defaultszSettings.without_defaults   s     DIcrcN+++r#   c                 .    ||                                  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#   celeryc                 N     | j         |                     ||          dd          S )z6Shortcut to ``get_by_parts(*find_option(name)[:-1])``.NrL   )get_by_partsrW   rT   s      r"   find_value_for_keyzSettings.find_value_for_key   s+     t $"2"24"C"CCRC"HIIr#   c                 L    | d                     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   | ]}||V  	d S r'    ).0parts     r"   	<genexpr>z(Settings.get_by_parts.<locals>.<genexpr>   s'      <<dt<T<<<<<<r#   )join)r*   partss     r"   rZ   zSettings.get_by_parts   s*     CHH<<e<<<<<==r#   c                 :    	 | d          n# t           $ r Y nw xY w| S )N	__bogus__)KeyErrorr6   s    r"   finalizezSettings.finalize   s:    	 	 	 	D	s    
FTc                     |rt           nd }t          t                    |                                  |r| n|                                 } |fd|                                D                       S )Nc                     | S r'   r_   )vs    r"   <lambda>z Settings.table.<locals>.<lambda>   s     r#   c                 N    i | ]!\  }}|                     d           s|v||"S )r]   )
startswith)r`   krk   dict_memberss      r"   
<dictcomp>z"Settings.table.<locals>.<dictcomp>   sH     
 
 
Q<<$$
)*,)>)> q)>)>)>r#   )r   dirdictrh   rN   items)r*   with_defaultscensoredfiltsettingsrp   s        @r"   tablezSettings.table   s    )1B%%{{4yy(E44d.C.C.E.Et 
 
 
 
%^^--
 
 
   	r#   c                     d                     d |                     ||                                          D                       S )z;Return a human readable text showing configuration changes.
c              3   H   K   | ]\  }}| d t          |d           V  dS )z: 2   )widthNr   )r`   rP   values      r"   rb   z$Settings.humanize.<locals>.<genexpr>   s]       K KU //fU"---//K K K K K Kr#   )rc   ry   rt   )r*   ru   rv   s      r"   humanizezSettings.humanize   sV    yy K K"jjAAGGIIK K K K K 	Kr#   c                     | j         r>ddlm} ddlm} | j         D ](}|                    d|ddd||          d	           )d
S dS )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77777//////3 W W,F7,F,F,F(/,U{77K,U,U,U   W W W W 4ur#   )rR   )rX   )FT)__name__
__module____qualname____doc__r)   propertyr0   r9   r5   rA   rC   rG   rI   rN   rQ   rW   r[   rZ   rh   ry   r   r   __classcell__)r-   s   @r"   r   r   F   s         37 7 7 7 7 7 7 7
 
 
 X
 
 
 X
 
 
 X
 
 
 X
 
 
 X
 
 
 X
 3 3 X3, , ,
. . .% % % %"J J J J> > >     K K K K      r#   r   c                      || |           S r'   r_   rP   converts     r"   _new_key_to_oldr          73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          |                                          |z
                      |          }                    |          }d |r6t
          |c}	|r*t          |          t          |          k    r
t          |c}	|r9s
t          |c}	|r*t          |          t          |          k    r
t
          |c}	n
t
          |c}	|rt
          t                      c}	fd|	D             }
|
rTt          j	        
                    d                    fdt          |
          D                                           fd|                                D             }t          t          j                  fi |}t#          || |gt$          t&          f||          S )Nc                 2    h | ]}j         |         v|S r_   )r   )r`   rP   haveinfos     r"   	<setcomp>z"detect_settings.<locals>.<setcomp>  s*    HHH3$,s*;4*G*G3*G*G*Gr#   r{   c              3   f   K   | ]+}t                               |j        |                    V  ,dS ))replacewith_N)FMT_REPLACE_SETTINGformatr   )r`   rP   r   s     r"   rb   z"detect_settings.<locals>.<genexpr>  sY       K
 K
  &&s$,s:K&LLK
 K
 K
 K
 K
 K
r#   )renamesc                 N    i | ]!\  }}j                             ||          |"S r_   )r   r4   )r`   ro   rk   r   s      r"   rq   z#detect_settings.<locals>.<dictcomp>  s1    EEETQt|1%%qEEEr#   )r%   prefix)setr   r   keysintersection_settings_infolen_old_settings_infor   r   r   rc   sortedrt   rs   r   r   r   r   r   )confpreconfignore_keysr   all_keysold_keyssource	is_in_new	is_in_oldleftreally_leftr   r   r   s               @@r"   detect_settingsr      sJ   ,bbWG*;#%%%K#+9||H(0>  hHF|v{{}}+D!!(++I!!(++ID 7#Y
d 	7Y#i..88+YJD$ 	/ 	7+YJD$ 	3Y#i..88'JD$ $Y
d +#SUU
d IHHHH$HHHK  #4>#8#8 K
 K
 K
 K
k**K
 K
 K
 B
 B
#8 $ $   	
 FEEEW]]__EEEGHT]++77w77H$!	/*%	   r#   c                   4    e Zd ZdZd Zd Zd Z	 ddZd ZdS )	
AppPicklerz*Old application pickler/unpickler (< 3.1).c                 R     | j         | } | j        |fi |} | j        |fi | |S r'   )build_kwargs	constructprepare)r*   clsr+   r,   r!   s        r"   __call__zAppPickler.__call__$  sI    ""D)dnS++F++S##F###
r#   c                 F    |j                             |d                    d S )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 0 	0r#   c                      |di |S )Nr_   r_   )r*   r   r,   s      r"   r   zAppPickler.construct8  s    s}}V}}r#   r'   )	r   r   r   r   r   r   r   r   r   r_   r#   r"   r   r   !  so        44  + + +1 1 1
 -10 0 0 0    r#   r   c                 $      |            | g|R  S )zRebuild app for versions 2.5+.r_   )r   picklerr+   s      r"   _unpickle_appr   <  s     7799S 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3====r#   c                 L    ddfd|                                  D             S )zFilter sensitive settings.********c                 t   t          |t                    rt          |          S t          | t                    r~t                              |           r|S d|                                 v r%ddlm}  ||          	                    |          S d|                                 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%% 	1)%000c3 	<%%c** <,,,,,,,,!z%((//T/:::ciikk)))%d;;;;r#   c                 0    i | ]\  }}| ||          S r_   r_   )r`   ro   rk   r   s      r"   rq   z*filter_hidden_settings.<locals>.<dictcomp>W  s+    ;;;daA||Aq!!;;;r#   )r   )rt   )r   r   s    @r"   r   r   G  s;        <;;;djjll;;;;r#   c                    ddl }ddl}ddl}	 |                                 }d                    |j        j        |j                                                  }|j        }n# t          $ r dx}}Y nw xY wt                              t          j                    d                    d t          j                    D                       t          j                    t!                      |j        |j        |j        t          j                    ||t)          | j        j        pd          | j                                        t1          | j        j                            S )	z=Return a string containing information useful in bug-reports.r   Nz{}:{}rR   z, c              3      K   | ]}||V  	d S r'   r_   )r`   xs     r"   rb   zbugreport.<locals>.<genexpr>k  s'      @@Qa@q@@@@@@r#   disabled)systemarchkernel_versionpy_icelery_vkombu_v
billiard_vpy_vdriver_v	transportresultshuman_settingsr   )billiardr   rX   
connectionr   r   driver_namedriver_versiontransport_cls	ExceptionBUGREPORT_INFO	_platformr   rc   architecturereleaser	   VERSION_BANNER__version__python_versionr   r   rA   r   r   r   r-   )r!   r   r   rX   connr   r   s          r"   r   r   Z  sR   OOOLLLMMM"~~>>$."<"&."?"?"A"AC C&		 " " "!!	HHH"   !!YY@@)"8":":@@@@@ (**&!'%''"38#:#HjIIx((**
,-- !   s   AA! !A21A2c                 ~   ddl m} 	  || |          }n# t          $ r  ||           }Y nw xY wt          |t                    rd| vr	 |j        }t          |t                    rt                      	 |S # t          $ r 	 |j        }t          |t                    rt          d          	 |cY S # t          $ ry t          |dd          r*	 t          |  d||	          cY cY S # t          $ r Y nw xY wt          |                                          D ]}t          ||          r|c cY cY S  w xY ww xY w|S )
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!   rX   getattrr   ImportErrorvarsvalues)r!   r   r  r  symfoundsuspects          r"   r   r   z  s   nSc***   c#hh #z"" s#~~	GE%,, '$&&&'0 L-  	 	 	
eZ00 ^(\^ ^ ^^"  "   3
D11 '"OOO+9s           '   #Cyy//11 ' 'G!'622 '&'	. Jsf    ..*A8 8
D:+B3/D:3D6C(#D6$D:(
C52D64C55:D6/D:3D66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 E 				     				 " " " " " " # # # # # #             . . . . . . 2 2 2 2 2 2 - - - - - - 6 6 6 6 6 6 J J J J J J J J J J $ $ $ $ $ $ n n n n n n n n n n n n n n n n n n	 "*CM 
 	  1 7 7 7
K K K K K  K K K\ "-     "-     :/ 2    "!k?,>  &%;1C  
 BF,06 6 6 6r       6! ! !
  < < <&  @ "0_ % % % % % %r#   