o
    Dfh3                     @   s  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%dej&Z'dZ(dZ)dZ*dd Z+G dd deZ,ej-fddZ.ej-fddZ/eddZ0e0e ee/e(Z1e0eee.e)Z2		d-dd Z3G d!d" d"Z4d#d$ Z5d%d& Z6d'd( Z7d)d* Z8eefd+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                 C   s   | j pd dt| dS )z1String used in __repr__ etc, to id app instances.__main__z at z#x)mainid)app r    I/home/ubuntu/webapp/venv/lib/python3.10/site-packages/celery/app/utils.pyr   A      r   c                       s   e Zd ZdZdd fdd
Zedd Zedd	 Zed
d Zedd Z	edd Z
edd Zedd Zdd Zdd Zd*ddZd+ddZdd Zd d! Zd,d$d%Zd,d&d'Zd(d) Z  ZS )-r   zsCelery settings object.

    .. seealso:

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

    N)deprecated_settingsc                   s   t  j|i | || _d S N)super__init__r#   )selfr#   argskwargs	__class__r    r!   r&   O   s   
zSettings.__init__c                 C      t jdp| dp| jS )NCELERY_BROKER_READ_URLbroker_read_urlosenvironget
broker_urlr'   r    r    r!   r.   T   
   zSettings.broker_read_urlc                 C   r,   )NCELERY_BROKER_WRITE_URLbroker_write_urlr/   r4   r    r    r!   r7   \   r5   zSettings.broker_write_urlc                 C   s   t jdp| ddS )NCELERY_BROKER_URLr3   broker_hostr0   r1   r2   firstr4   r    r    r!   r3   d      
zSettings.broker_urlc                 C   s   t jdp| ddS )NCELERY_RESULT_BACKENDresult_backendr:   r4   r    r    r!   r>   k   r<   zSettings.result_backendc                 C      |  ddS )Ntask_default_exchangetask_default_queuer;   r4   r    r    r!   r@   r      zSettings.task_default_exchangec                 C   r?   )Ntask_default_routing_keyrA   rB   r4   r    r    r!   rD   y   rC   z!Settings.task_default_routing_keyc                 C   r?   )Ntimezone	TIME_ZONErB   r4   r    r    r!   rE      s   zSettings.timezonec                 C   s   t i | jdd S )z7Return the current configuration, but without defaults.N)r   mapsr4   r    r    r!   without_defaults   s   zSettings.without_defaultsc                 C   s   ||   v S r$   )rI   )r'   keyr    r    r!   value_set_for   s   zSettings.value_set_for c                 C   s
   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	namespacer    r    r!   find_option   s   
zSettings.find_optionceleryc                 C   s   | j | ||dd  S )z6Shortcut to ``get_by_parts(*find_option(name)[:-1])``.NrG   )get_by_partsrP   rM   r    r    r!   find_value_for_key   r"   zSettings.find_value_for_keyc                 G   s   | d 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                 s       | ]}|r|V  qd S r$   r    ).0partr    r    r!   	<genexpr>       z(Settings.get_by_parts.<locals>.<genexpr>)join)r'   partsr    r    r!   rR      s   zSettings.get_by_partsc                 C   s$   z| d  W | S  t y   Y | S w )N	__bogus__)KeyErrorr4   r    r    r!   finalize   s   
zSettings.finalizeFTc                    sJ   |rt ndd }tt |   |r| n|  }| fdd| D S )Nc                 S   s   | S r$   r    )vr    r    r!   <lambda>   s    z Settings.table.<locals>.<lambda>c                    s(   i | ]\}}| d s| vr||qS )rT   )
startswithrV   kr_   dict_membersr    r!   
<dictcomp>   s    z"Settings.table.<locals>.<dictcomp>)r   dirdictr^   rI   items)r'   with_defaultscensoredfiltsettingsr    rd   r!   table   s   zSettings.tablec                 C   s    d dd | || D S )z;Return a human readable text showing configuration changes.
c                 s   s*    | ]\}}| d t |dd V  qdS )z: 2   )widthNr   )rV   rJ   valuer    r    r!   rX      s
    
z$Settings.humanize.<locals>.<genexpr>)rZ   rn   ri   )r'   rj   rk   r    r    r!   humanize   s   
zSettings.humanizec                 C   sV   | j r)ddlm} ddlm} | j D ]}|jd|ddd||  dd	 q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.utilsrt   warn)r'   r   rt   settingr    r    r!   maybe_warn_deprecated_settings   s   
z'Settings.maybe_warn_deprecated_settings)rL   )rQ   )FT)__name__
__module____qualname____doc__r&   propertyr.   r7   r3   r>   r@   rD   rE   rI   rK   rP   rS   rR   r^   rn   rs   r|   __classcell__r    r    r*   r!   r   F   s4    










	

r   c                 C   
   || | S r$   r    rJ   convertr    r    r!   _new_key_to_old      
r   c                 C   r   r$   r    r   r    r    r!   _old_key_to_new   r   r   settings_info_t)defaultsr   key_t	mix_errorc                    sp  |si n|}|st  n|}|stn|}|stn|}| }| d u r$|i }} t | |   |} |}d |rNt|}	|rNt|t|krNt|}	|rgsWt|}	|rft|t|krft|}	nt|}	|rttt  }	 fdd|	D }
|
rtj	j
dfddt|
D dfdd| D }ttjfi |}t|| |gttf||d	S )
Nc                    s   h | ]}j |  vr|qS r    )r   rV   rJ   haveinfor    r!   	<setcomp>  s    z"detect_settings.<locals>.<setcomp>ro   c                 3   s$    | ]}t j| j| d V  qdS ))replacewith_N)FMT_REPLACE_SETTINGformatr   r   r   r    r!   rX     s
    
z"detect_settings.<locals>.<genexpr>)renamesc                    s    i | ]\}} j |||qS r    )r   r2   rb   r   r    r!   rf     s     z#detect_settings.<locals>.<dictcomp>)r#   prefix)setr   r   keysintersection_settings_infolen_old_settings_infor   r   r   rZ   sortedri   rh   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   r!   detect_settings   sJ   







r   c                   @   s<   e Zd ZdZdd Zdd Zdd Z	dd	d
Zdd ZdS )
AppPicklerz*Old application pickler/unpickler (< 3.1).c                 G   s2   | j | }| j|fi |}| j|fi | |S r$   )build_kwargs	constructprepare)r'   clsr(   r)   r   r    r    r!   __call__$  s   
zAppPickler.__call__c                 K   s   |j |d  d S )Nchanges)r   update)r'   r   r)   r    r    r!   r   *  s   zAppPickler.preparec                 G   s
   | j | S r$   )build_standard_kwargs)r'   r(   r    r    r!   r   -  r   zAppPickler.build_kwargsNc                 C   s   ||||||||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   r    r    r!   r   0  s
   z AppPickler.build_standard_kwargsc                 K   s   |di |S )Nr    r    )r'   r   r)   r    r    r!   r   8  s   zAppPickler.constructr$   )	r}   r~   r   r   r   r   r   r   r   r    r    r    r!   r   !  s    
r   c                 G   s   | | g|R  S )zRebuild app for versions 2.5+.r    )r   picklerr(   r    r    r!   _unpickle_app<  s   r   c                 C   s   d|d< | di |S )zRebuild app for versions 3.1+.Fr   Nr    r    )r   r)   r    r    r!   _unpickle_app_v2A  s   r   c                    s    ddd  fdd|   D S )zFilter sensitive settings.********c                 S   sn   t |tr	t|S t | tr5t| r|S d|  v r)ddlm} ||j	|dS d|  v r5t
||dS |S )Nr3   r   )
Connection)maskr   )
isinstancer   r   strHIDDEN_SETTINGSsearchlowerkombur   as_urir   )rJ   rr   r   r   r    r    r!   maybe_censorI  s   


z,filter_hidden_settings.<locals>.maybe_censorc                    s   i | ]
\}}| ||qS r    r    rb   r   r    r!   rf   W  s    z*filter_hidden_settings.<locals>.<dictcomp>N)r   )ri   )r   r    r   r!   r   G  s   
r   c                 C   s   ddl }ddl}ddl}z|  }d|jj|j }|j}W n t	y-   d }}Y nw t
jt ddd t D t t |j|j|jt ||t| jjpTd| j t| jjd	S )
z=Return a string containing information useful in bug-reports.r   Nz{}:{}rL   z, c                 s   rU   r$   r    )rV   xr    r    r!   rX   k  rY   zbugreport.<locals>.<genexpr>disabled)systemarchkernel_versionpy_icelery_vkombu_v
billiard_vpy_vdriver_v	transportresultshuman_settingsr   )billiardr   rQ   
connectionr   r   driver_namedriver_versiontransport_cls	ExceptionBUGREPORT_INFO	_platformr   rZ   architecturereleaser   VERSION_BANNER__version__python_versionr   r   r>   rs   r   r   r+   )r   r   r   rQ   connr   r   r    r    r!   r   Z  s6   


r   c                 C   s  ddl m} z|| |d}W n ty   || }Y nw t|trd| vrz|j}t|tr1t W |S  ty   z|j}t|trGtdW | Y S  ty   t|ddrqzt|  d||d	W  Y  Y S  t	yp   Y nw t
| D ]}t||r|   Y  Y S qw w 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   rQ   getattrr   ImportErrorvarsvalues)r   r   r   r   symfoundsuspectr    r    r!   r   z  sP   


r   )NNNNN):r   r0   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   r2   r   r   _settings_info_tr   r   r   r   r   r   r   r   r   r    r    r    r!   <module>   sZ    $	 

9 