o
    wvXj�1  ã                   @   sØ  d Z ddlmZm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mZmZ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( zddl)m*Z* W n e+y…   ddlm*Z* Y nw dZ,dZ-e .dej/¡Z0dZ1dZ2dZ3dd„ Z4G dd„ deƒZ5e%j6fdd„Z7e$j6fdd„Z8e	dd ƒZ9e9e&e$e8e1ƒZ:e9e"e%e7e2ƒZ;		d/d!d"„Z<G d#d$„ d$e=ƒZ>d%d&„ Z?d'd(„ Z@d)d*„ ZAd+d,„ ZBeefd-d.„ZCdS )0z?App utilities: Compat settings, bug-report tool, pickling apps.é    )Úabsolute_importÚunicode_literalsN)Ú
namedtuple)Údeepcopy)Ú
ModuleType)Úmaybe_sanitize_url)ÚImproperlyConfigured)ÚitemsÚkeysÚstring_tÚvalues)Ú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)ÚMapping)Ú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   d  | jpdt| ƒ¡S )z1String used in __repr__ etc, to id app instances.z{0} at {1:#x}Ú__main__)ÚformatÚmainÚid)Úapp© r&   úM/var/www/html/myproject/venv/lib/python3.10/site-packages/celery/app/utils.pyr   L   s   r   c                   @   s¬   e Zd Z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$S )(r   zsCelery settings object.

    .. seealso:

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

    c                 C   ó   t j d¡p|  d¡p| jS )NÚCELERY_BROKER_READ_URLÚbroker_read_url©ÚosÚenvironÚgetÚ
broker_url©Úselfr&   r&   r'   r*   Z   ó
   ÿýzSettings.broker_read_urlc                 C   r(   )NÚCELERY_BROKER_WRITE_URLÚbroker_write_urlr+   r0   r&   r&   r'   r4   b   r2   zSettings.broker_write_urlc                 C   s   t j d¡p|  dd¡S )NÚCELERY_BROKER_URLr/   Úbroker_host©r,   r-   r.   Úfirstr0   r&   r&   r'   r/   j   ó   
þzSettings.broker_urlc                 C   s   t j d¡p|  dd¡S )NÚCELERY_RESULT_BACKENDÚresult_backendr7   r0   r&   r&   r'   r;   q   r9   zSettings.result_backendc                 C   ó   |   dd¡S )NÚtask_default_exchangeÚtask_default_queue©r8   r0   r&   r&   r'   r=   x   ó   þzSettings.task_default_exchangec                 C   r<   )NÚtask_default_routing_keyr>   r?   r0   r&   r&   r'   rA      r@   z!Settings.task_default_routing_keyc                 C   r<   )NÚtimezoneÚ	time_zoner?   r0   r&   r&   r'   rB   †   s   zSettings.timezonec                 C   s   t i | jdd… ƒS )z7Return the current configuration, but without defaults.Néÿÿÿÿ)r   Úmapsr0   r&   r&   r'   Úwithout_defaults‹   s   zSettings.without_defaultsc                 C   s   ||   ¡ v S ©N)rF   )r1   Ú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   ©r1   Ú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])``.NrD   )Úget_by_partsrN   rK   r&   r&   r'   Úfind_value_for_key¤   s   zSettings.find_value_for_keyc                 G   s   | d  dd„ |D ƒ¡ S )zÙReturn 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 rG   r&   )Ú.0Úpartr&   r&   r'   Ú	<genexpr>°   ó   € z(Settings.get_by_parts.<locals>.<genexpr>)Újoin)r1   Úpartsr&   r&   r'   rP   ¨   s   zSettings.get_by_partsc                 C   s$   z| d  W | S  t y   Y | S w )NÚ	__bogus__)ÚKeyErrorr0   r&   r&   r'   Úfinalize²   s   
þþzSettings.finalizeFTc                    sF   |rt ndd„ }ttƒ‰ |  ¡  |‡ fdd„t|r| n|  ¡ ƒD ƒƒS )Nc                 S   s   | S rG   r&   )Úvr&   r&   r'   Ú<lambda>¼   s    z Settings.table.<locals>.<lambda>c                    s(   i | ]\}}|  d ¡s|ˆ vr||“qS )rR   )Ú
startswith©rT   Úkr]   ©Údict_membersr&   r'   Ú
<dictcomp>¿   s    ýþz"Settings.table.<locals>.<dictcomp>)r   ÚdirÚdictr\   r	   rF   )r1   Úwith_defaultsÚcensoredÚfiltr&   rb   r'   Útable»   s   ÿÿzSettings.tablec                 C   s    d  dd„ t|  ||¡ƒD ƒ¡S )z;Return a human readable text showing configuration changes.Ú
c                 s   s(   � | ]\}}d   |t|dd�¡V  qdS )z{0}: {1}é2   )ÚwidthN)r"   r   )rT   rH   Úvaluer&   r&   r'   rV   Ç   s
   € ÿ
ÿz$Settings.humanize.<locals>.<genexpr>)rX   r	   rj   )r1   rg   rh   r&   r&   r'   ÚhumanizeÅ   s   
þzSettings.humanizeN)rJ   )rO   )FT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr*   r4   r/   r;   r=   rA   rB   rF   rI   rN   rQ   rP   r\   rj   ro   r&   r&   r&   r'   r   Q   s0    










	
r   c                 C   ó
   || | ƒS rG   r&   ©rH   Úconvertr&   r&   r'   Ú_new_key_to_oldÌ   ó   
rx   c                 C   ru   rG   r&   rv   r&   r&   r'   Ú_old_key_to_newÐ   ry   rz   Úsettings_info_t)Údefaultsrw   Úkey_tÚ	mix_errorc                    sn  |si n|}|st ƒ n|}|stn|}|stn|}| }| d u r$|i }} t t|ƒƒ| ‰ ˆ  |¡}ˆ  |¡}d ‰|rNt|‰}	|rNt|ƒt|ƒkrNt|‰}	|rgˆsWt|‰}	|rft|ƒt|ƒkrft|‰}	nt|‰}	|rttt ƒ ‰}	‡ ‡fdd„|	D ƒ}
|
r•tˆj	j
d ‡fdd„t|
ƒD ƒ¡d�ƒ‚‡fdd„t|ƒD ƒ}ttˆjƒfi |¤Ž}t|| |gttf|d	�S )
Nc                    s   h | ]}ˆj | ˆ vr|’qS r&   )rw   ©rT   rH   ©ÚhaveÚinfor&   r'   Ú	<setcomp>  s    z"detect_settings.<locals>.<setcomp>rk   c                 3   s$   � | ]}t j|ˆ j| d �V  qdS ))ÚreplaceÚwith_N)ÚFMT_REPLACE_SETTINGr"   rw   r   ©r‚   r&   r'   rV   
  s
   € ÿ
ÿz"detect_settings.<locals>.<genexpr>)Úrenamesc                    s    i | ]\}}ˆ j  ||¡|“qS r&   )rw   r.   r`   r‡   r&   r'   rd     s     z#detect_settings.<locals>.<dictcomp>)Úprefix)Úsetr   r   r
   ÚintersectionÚ_settings_infoÚlenÚ_old_settings_infor   r~   r"   rX   Úsortedr	   rf   r   r|   r   rz   rx   )ÚconfÚpreconfÚignore_keysr‰   Úall_keysÚold_keysÚsourceÚ	is_in_newÚ	is_in_oldÚleftÚreally_leftr|   r&   r€   r'   Údetect_settingsà   sH   






€
þý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 rG   )Úbuild_kwargsÚ	constructÚprepare)r1   ÚclsÚargsÚkwargsr%   r&   r&   r'   Ú__call__  s   
zAppPickler.__call__c                 K   s   |j  |d ¡ d S )NÚchanges)r�   Úupdate)r1   r%   r¡   r&   r&   r'   rž   !  s   zAppPickler.preparec                 G   s
   | j |Ž S rG   )Úbuild_standard_kwargs)r1   r    r&   r&   r'   rœ   $  ry   zAppPickler.build_kwargsNc                 C   s   ||||||||d|
dœ
S )NF)
r#   ÚloaderÚbackendÚamqpr£   ÚeventsÚlogÚcontrolÚset_as_currentÚconfig_sourcer&   )r1   r#   r£   r¦   r§   r¨   r©   rª   r«   Úaccept_magic_kwargsr­   r&   r&   r'   r¥   '  s
   ýz AppPickler.build_standard_kwargsc                 K   s   |di |¤ŽS )Nr&   r&   )r1   rŸ   r¡   r&   r&   r'   r�   /  s   zAppPickler.constructrG   )	rp   rq   rr   rs   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_app3  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_v28  s   r±   c                    s    ddd„‰ ‡ fdd„t | ƒ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 )Nr/   r   )Ú
Connection)Úmaskr§   )Ú
isinstancer   r   r   ÚHIDDEN_SETTINGSÚsearchÚlowerÚkombur³   Úas_urir   )rH   rn   r´   r³   r&   r&   r'   Úmaybe_censor@  s   


z,filter_hidden_settings.<locals>.maybe_censorc                    s   i | ]
\}}|ˆ ||ƒ“qS r&   r&   r`   ©r»   r&   r'   rd   N  s    z*filter_hidden_settings.<locals>.<dictcomp>N)r²   )r	   )r�   r&   r¼   r'   r   >  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{0}:{1}rJ   z, c                 s   rS   rG   r&   )rT   Úxr&   r&   r'   rV   a  rW   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¦   )ÚbilliardrO   r¹   Ú
connectionr"   rÈ   Údriver_nameÚdriver_versionÚtransport_clsÚ	ExceptionÚBUGREPORT_INFOÚ	_platformr¿   rX   ÚarchitectureÚreleaser   ÚVERSION_BANNERÚ__version__Úpython_versionr   r�   r;   ro   r   r¦   Ú	__class__)r%   rË   rO   r¹   ÚconnrÇ   rÈ   r&   r&   r'   r   Q  s6   
ÿ
ÿ
ór   c                 C   s  ddl m} z|| |d�}W n ty   || ƒ}Y nw t|tƒrŠd| vrŠz|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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
{0}.celery)r   rÛ   )ÚbaserÚ   ÚAttributeErrorrµ   r   r%   rO   Úgetattrr    r"   ÚImportErrorr   Úvars)r%   r   rÛ   rÚ   ÚsymÚfoundÚsuspectr&   r&   r'   r    p  sL   þ
ÿë
ÿòþÿ
ÿôûr    )NNNNN)Drs   Ú
__future__r   r   r,   ÚplatformrÒ   ÚreÚcollectionsr   Úcopyr   Útypesr   Úkombu.utils.urlr   Úcelery.exceptionsr   Úcelery.fiver	   r
   r   r   Úcelery.platformsr   Úcelery.utils.collectionsr   Úcelery.utils.importsr   r   r   Úcelery.utils.textr   r|   r   r   r   r   r   r   r   Úcollections.abcr   rá   Ú__all__rÑ   ÚcompileÚ
IGNORECASEr¶   ÚE_MIX_OLD_INTO_NEWÚE_MIX_NEW_INTO_OLDr†   r   r   r.   rx   rz   Ú_settings_info_trŒ   rŽ   rš   Úobjectr›   r°   r±   r   r   r    r&   r&   r&   r'   Ú<module>   sd   $þþ	{
ÿÿ
ÿ8