o
    b                  
   @   s0  d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZ ejdZdejv rUejd ZedkrTejeZnedkr\dZnejedZdd	 Zd
d Zejdk rud\ZZnd\ZZdd Zdd Ze Zde  Z G dd de!Z"dd Z#dd Z$dd Z%dd Z&dd Z'd d! Z(d"d# Z)ej*e+e
j,e'e%e(d$d% d&d% e)d'	Z-d(d) Z.dDd+d,Z/d-d. Z0d/d0 Z1ej2d1d2 Z3d3d4 Z4G d5d6 d6ej5Z5G d7d8 d8ej6Z6G d9d: d:ej7Z8G d;d< d<Z9G d=d> d>Z:G d?d@ d@e9e:Z;dAej<dfdBdCZ=dS )EzIutilities for Pylint configuration :

* pylintrc
* pylint.d (PYLINTHOME)
    )print_functionN)utils~Z
PYLINTHOMEz	.pylint.dc                 C   s&   |  tjd} tjtd| |df S )N_z%s%s%sz.stats)replaceosseppathjoinPYLINT_HOME)	base_nameZrecurs r   L/var/www/secure340b-portal/env/lib/python3.10/site-packages/pylint/config.py_get_pdata_pathH   s   r   c                 C   s^   t | d}zt|t}t|W  d    W S 1 sw   Y  W d S  ty.   i  Y S w )N   )r   open
_PICK_LOADpickleload	Exception)base	data_filestreamr   r   r   load_resultsM   s   
(r   )   r   )wr)wbrbc              
   C   s   t jts zt t W n ty   tdt tjd Y nw t	|d}z t
|t}t| | W d    W d S 1 s>w   Y  W d S  ttfye } ztd||f tjd W Y d }~d S d }~ww )NzUnable to create directory %sfiler   zUnable to create file %s: %s)r   r	   existsr   mkdirOSErrorprintsysstderrr   r   
_PICK_DUMPr   dumpIOError)resultsr   r   r   exr   r   r   save_results\   s   
&$r,   c                  C   sj  t jdrt jdS t jdrt jdS t jdrkt jt  } t jt j| drkt jt j| d} t jt j| drNt j| dS t jt j| dr`t j| dS t jt j| ds1dt jv rt jt jd rt jd }n"t jd}|dv rd}nt j|d}t j|st j|dd}t j|st jd	rd	}|S d
}|S )zKsearch the pylint rc file and return its path if it find it, else None
    pylintrcz	.pylintrcz__init__.pyz..PYLINTRCr   )r   z/rootz.configz/etc/pylintrcN)	r   r	   r!   abspathisfilegetcwdr
   environ
expanduser)curdirr-   Z	user_homer   r   r   find_pylintrcj   s6   r5   af  
The following environment variables are used:
    * PYLINTHOME
    Path to the directory where persistent data for the run will be stored. If
not found, it defaults to ~/.pylint.d/ or .pylint.d (in the current working
directory).
    * PYLINTRC
    Path to the configuration file. See the documentation for the method used
to search for configuration file.
c                   @   s   e Zd ZdZdS )UnsupportedActionzBraised by set_option when it doesn't know what to do for an actionN)__name__
__module____qualname____doc__r   r   r   r   r6      s    r6   c                 C   s8   t |}|D ]}|| vrd}t|||| f q|S Nz-option %s: invalid value: %r, should be in %s)r   
_check_csvoptparseOptionValueError)choicesnamevaluevaluesZ	csv_valuemsgr   r   r   _multiple_choice_validator   s   
rD   c                 C   s$   || vrd}t |||| f |S r;   )r=   r>   )r?   r@   rA   rC   r   r   r   _choice_validator   s   rE   c                 C   s
   t |S N)r   r<   r   r@   rA   r   r   r   _csv_validator   s   
rH   c                 C   s   t |dr|S t|S )Npattern)hasattrrecompilerG   r   r   r   _regexp_validator   s   

rM   c                    s    fddt  |D S )Nc                    s   g | ]}t  |qS r   )rM   ).0valr   r@   r   r   
<listcomp>   s    z)_regexp_csv_validator.<locals>.<listcomp>)rH   rG   r   rP   r   _regexp_csv_validator   s   rR   c                 C   s@   t |tr	t|S |dv rdS |dv rdS d}t|| |f )N)yyesT)nnoFz<option %s: invalid yn value %r, should be in (y, yes, n, no))
isinstanceintboolr=   r>   optr   rA   rC   r   r   r   _yn_validator   s   
r\   c                 C   s   |s	d}t |t|S )Nzindent string can't be empty.)r=   r>   r   _unquoterZ   r   r   r   _non_empty_string_validator   s   

r^   c                 C      t | d ||S Nr?   )rE   r[   r@   rA   r   r   r   <lambda>   s    rb   c                 C   r_   r`   )rD   ra   r   r   r   rb      s    
)	stringrX   regexp
regexp_csvcsvynchoicemultiple_choicenon_empty_stringc                 C   sl   | t vr
td|  z	t |  |||W S  ty5   z	t |  |W  Y S  ty4   td||| f w w )NzUnsupported type "%s"z"%s value (%r) should be of type %s)
VALIDATORSr   	TypeErrorr=   r>   )ZopttypeoptdictoptionrA   r   r   r   _call_validator   s   ro    c                 C   s2   z|d }W n t y   |  Y S w t|||| S )zreturn a validated value for an option according to its type

    optional argument name is only used for error message formatting
    type)KeyErrorro   )rA   rm   r@   _typer   r   r   	_validate   s   rt   c                    s    fdd| j D S )Nc                    s0   g | ]}t |d dpd kr|jtjur|qS )levelr   )getattrhelpr=   SUPPRESS_HELPrN   rn   outputlevelr   r   rQ      s    
z"_level_options.<locals>.<listcomp>)option_list)groupr{   r   rz   r   _level_options   s   
r~   c                 C   s   | j du s| js|jS |jd dd }z	| j jj| }W n ty(   d}Y nw ||}|||}t	|j
||}t||}|tju sH|sK| j}|j| jt|S )zPatch OptionParser.expand_default with custom behaviour

    This will handle defaults to avoid overriding values in the
    configuration file.
    Nr      )parserdefault_tagrw   
_long_optsoptions_manager_all_optionsrr   get_option_defoption_attrnamerv   configr   Z_format_option_valuer=   
NO_DEFAULTNO_DEFAULT_VALUEr   str)selfrn   optnameproviderrA   rm   r   r   r   _expand_default  s   
r   c                  c   s0    t j} ztt j_d V  W | t j_d S | t j_w rF   )r=   HelpFormatterr   expand_default)Zorig_defaultr   r   r   _patch_optparse  s   r   c                 C   s   t | j||S rF   )rD   r?   ra   r   r   r   #_multiple_choices_validating_option(  s   r   c                   @   s   e Zd Zejjd Zejjddg ZeejjZe	ed< e
ed< eed< eed< eed< eed	< d
d Zdd Zeejjd< dd ZdS )Option)rd   re   rf   rg   ri   rj   hideru   rd   re   rf   rg   ri   rj   c                 O   s>   t jj| g|R i | t| dr| jrt j| _d S d S d S )Nr   )r=   r   __init__rJ   r   rx   rw   )r   optsattrsr   r   r   r   ?  s   zOption.__init__c                 C   sx   | j dv r,| jd u rtd| t| jttfs*tdtt | jdd  | d S | jd ur:td| j  | d S )N)rh   ri   z/must supply a list of choices for type 'choice'z1choices must be a list of strings ('%s' supplied)'r   z#must not supply choices for type %r)	rq   r?   r=   OptionErrorrW   tuplelistr   splitr   r   r   r   _check_choiceD  s$   



zOption._check_choicer   c                 C   sL   |  ||}| jdkrt|| j}|r|| |}| | j| j||||S )Nnamed)convert_valuerq   rv   destupdatetake_actionaction)r   r[   rA   rB   r   Zexistentr   r   r   processX  s   

zOption.processN)r7   r8   r9   r=   r   TYPESATTRScopyTYPE_CHECKERrM   rR   rH   r\   r   r^   r   r   CHECK_METHODSr   r   r   r   r   r   -  s    r   c                   @   s&   e Zd Zdd ZdddZdd ZdS )	OptionParserc                 O   s"   t jj| g|R dti| d S )Noption_class)r=   r   r   r   )r   r   argskwargsr   r   r   r   h  s   "zOptionParser.__init__Nc                 C   s   |d u r| j }t|dd}||  g }||d |  | jr2|tj	| | |d | j
D ]}|j|krQ|jsDt||rQ||| |d q5|  d|d d S )Noutput_levelr   Options
rp   )	formatterrv   store_option_stringsappendformat_headingindentr|   r=   OptionContainerformat_option_helpoption_groupsru   descriptionr~   format_helpdedentr
   )r   r   r{   resultr}   r   r   r   r   k  s*   




zOptionParser.format_option_helpc                 C   s   || j vr
t||S )zDisable abbreviations.)	_long_optr=   BadOptionErrorr   r[   r   r   r   _match_long_opt  s   

zOptionParser._match_long_optrF   )r7   r8   r9   r   r   r   r   r   r   r   r   g  s    
r   c                   @   sv   e Zd Z	dddZdd Zdd	 Zd
d ZdddZedd Z	edd Z
edd Zedd Zedd ZdS )_ManHelpFormatterr      O   c                 C   s   t j| |||| d S rF   )r=   r   r   )r   indent_incrementmax_help_positionwidthshort_firstr   r   r   r     s   
z_ManHelpFormatter.__init__c                 C   s   d|   S )Nz.SH %s
)upper)r   headingr   r   r   r     s   z _ManHelpFormatter.format_headingc                 C   s   |S rF   r   )r   r   r   r   r   format_description  s   z$_ManHelpFormatter.format_descriptionc                 C   sz   z|j }W n ty   | |}Y nw |jr5| |}ddd | D }|dd}|dd}nd}d	||f S )
N c                 S   s   g | ]}|  qS r   strip)rN   lr   r   r   rQ     s    z3_ManHelpFormatter.format_option.<locals>.<listcomp>\z\\z	[current:z	[default:rp   z.IP "%s"
%s
)option_stringsAttributeErrorformat_option_stringsrw   r   r
   
splitlinesr   )r   rn   	optstring	help_texthelp_stringr   r   r   format_option  s    

z_ManHelpFormatter.format_optionr   c                 C   sp   d}z|  }W n ty   | }Y nw | ||j}t|dr)| ||j}d| |||| 	||f S )Nrp   	long_descz%s
%s
%s
%s)
Z_get_prog_namer   get_prog_nameformat_short_descriptionr   rJ   format_long_descriptionr   format_titleformat_synopsis)r   	optparserpkginfosectionr   pgm
short_descr   r   r   format_head  s   

z_ManHelpFormatter.format_headc                 C   s$   dt  d d  }d| ||| f S )Nz%d-%02d-%02dr   z.TH %s %s "%s" %s)time	localtime)r   r   dater   r   r   r     s   z_ManHelpFormatter.format_titlec                 C   s   d| |  f S )Nz.SH NAME
.B %s
\- %s
r   )r   r   r   r   r   r     s
   z*_ManHelpFormatter.format_short_descriptionc                 C   s   d|  S )Nz6.SH SYNOPSIS
.B  %s
[
.I OPTIONS
] [
.I <arguments>
]
r   )r   r   r   r   r     s   z!_ManHelpFormatter.format_synopsisc                 C   sR   d dd | D }|dd}| | r!|t| d  }d| | f S )Nr   c                 s   s    | ]}|  V  qd S rF   )lstrip)rN   liner   r   r   	<genexpr>  s    z<_ManHelpFormatter.format_long_description.<locals>.<genexpr>z
.
z

z.SH DESCRIPTION
.B %s
%s
)r
   r   r   lower
startswithlenr   )r   r   r   r   r   r     s   z)_ManHelpFormatter.format_long_descriptionc                 C   s<   dt | d| j| j| j| jf }t| dr|d| j 7 }|S )Nz}.SH SEE ALSO
/usr/share/doc/pythonX.Y-%s/

.SH BUGS
Please report bugs on the project's mailing list:
%s

.SH AUTHOR
%s <%s>
Zdebian_name	copyrightz
.SH COPYRIGHT
%s
)rv   modnameZmailinglistauthorauthor_emailrJ   r   )r   tailr   r   r   format_tail  s   

z_ManHelpFormatter.format_tailN)r   r   r   r   )r   )r7   r8   r9   r   r   r   r   r   staticmethodr   r   r   r   r   r   r   r   r   r     s"    



	

r   c                   @   s   e Zd ZdZd,ddZd-ddZd.d	d
Zdd Zdd Zdd Z	dd Z
dd Zd/ddZd0ddZdd Zd,ddZdd  Zd!d" Zd#d$ Zd1d%d&Zd2d(d)Zd2d*d+ZdS )3OptionsManagerMixInzLHandle configuration from both a configuration file and command line optionsNc                 C   s@   || _ | j||d g | _t | _i | _i | _i | _d| _	d S )N)versionr   )
config_filereset_parsersoptions_providerscollectionsOrderedDictr   _short_options_nocallback_options	_mygroups	_maxlevel)r   usager   r   r   r   r   r     s   

zOptionsManagerMixIn.__init__rp   c                 C   s:   t jdd| _tt||d| _| | j_t| jjj	| _
d S )N)#;)inline_comment_prefixes)r  r   )configparserConfigParsercfgfile_parserr   r   cmdline_parserr   setr   r   _optik_option_attrs)r   r  r   r   r   r   r     s   z!OptionsManagerMixIn.reset_parsersTc           
         s   |j dks	J dtt| jD ]}|j | j| j kr$| j||  nq| j| dd |jD }t|dd}|rJ|rJ| |j	
 |j|| n|D ]\}}| || j|| qL|D ]\ } 
   fdd|jD }	|  ||	| q\dS )	zregister an options providerr   z!provider's priority can't be >= 0c                 S   s   g | ]
}d |d vr|qS )r}   r   r   ry   r   r   r   rQ   &  s
    zAOptionsManagerMixIn.register_options_provider.<locals>.<listcomp>r   r   c                    s(   g | ]}|d   dd  kr|qS )r   r}   rp   )getr   ry   gnamer   r   rQ   6  s    N)priorityranger   r   insertr   optionsrv   add_option_groupr@   r   r:   add_optik_optionr  )
r   r   	own_groupiZnon_group_spec_optionsgroupsr[   rm   ZgdocZgoptionsr   r  r   register_options_provider  s6   
z-OptionsManagerMixIn.register_options_providerc                 C   s   || j v r| j | }n)tj| j| d}| j| |j|_|| j |< |dkr4|| jjvr4| j	| |D ]\}}| 
|||| q6d S )N)titleDEFAULT)r   r=   OptionGroupr  
capitalizer  ru   r  	_sectionsadd_sectionr  )r   
group_namer   r  r   r}   r[   rm   r   r   r   r  =  s    



z$OptionsManagerMixIn.add_option_groupc                 C   sD   |  |||\}}|j|i |}|| j|< t| j|jpd| _d S Nr   )optik_option
add_optionr   maxr   ru   )r   r   Zoptikcontainerr[   rm   r   rn   r   r   r   r  R  s   
z$OptionsManagerMixIn.add_optik_optionc                 C   s   t  |}d|v r|| j|< n	d|d< | j|d< d|v r8d|v r5|ddur5|d dvr5|d  d7  < |d= dt| g}d	|v rV|| j|d	 < |d
|d	   |d	= t| D ]}|| j	vrh|
| q\||fS )zjget our personal option definition and return a suitable form for
        use with optik/optparse
        r   callbackdefaultrw   N)
store_truestore_falsez [current: %default]--short-)r   r   cb_set_provider_optionr  r   r   r   r   keysr
  pop)r   r   r[   rm   r   keyr   r   r   r   X  s0   




z OptionsManagerMixIn.optik_optionc                 C   sF   | dr|dd }n	| j|dd  }|du rd}| || dS )z!optik callback for option settingr'  r   Nr   )r   r   global_set_option)r   rn   r[   rA   r   r   r   r   r*  w  s   
z*OptionsManagerMixIn.cb_set_provider_optionc                 C   s   | j | || dS )z)set option on the correct option providerN)r   
set_option)r   r[   rA   r   r   r   r.    s   z%OptionsManagerMixIn.global_set_optionr   c                 C   s   i }g }| j D ]4}| D ]-\}}|du r|j}||v rqdd |D }|s'q||vr0|| ||g }	|	|7 }	qq|p@tj}d}
|D ]}|
rOtd|d t	||
 t||  d}
qEdS )zrwrite a configuration file according to the current configuration
        into the given stream or stdout
        Nc                 S   s4   g | ]\}}}| d dur| ds|||fqS )rq   N
deprecated)r  )rN   rU   dvr   r   r   rQ     s    z7OptionsManagerMixIn.generate_config.<locals>.<listcomp>Fr   r   T)r   options_by_sectionr@   r   
setdefaultr%   stdoutr$   r   Zformat_sectionr   sorted)r   r   Zskipsectionsencodingr3  sectionsr   r   r  Z
alloptionsZprintedr   r   r   generate_config  s8   



z#OptionsManagerMixIn.generate_configr   c                 C   sH   t   t| j|||ptj| jd W d    d S 1 sw   Y  d S )N)r   ru   )r   _generate_manpager  r%   r5  r   )r   r   r   r   r   r   r   generate_manpage  s   "z$OptionsManagerMixIn.generate_manpagec                 C   s   | j D ]}|  qdS )z-initialize configuration using default valuesN)r   load_defaults)r   r   r   r   r   load_provider_defaults  s   

z*OptionsManagerMixIn.load_provider_defaultsc                    s  d}| j krPddg| d }| jv rn9|f fdd	}ddd	g|  }d
||d} jd } | j|| | j||ff7  _|d7 }| j ks|du rW j}|durntj	
|}tj	|sntd||outj	|}	|	r j}
tj|ddd}|
| W d   n1 sw   Y  t|
j D ]\}}| s|r||
j| < q|sdS |	rdtj	|}nd}t|tjd dS )zrread the configuration file but do not load it (i.e. dispatching
        values to each options provider)
        r   r)  longz-helpc                    s   t  | td d S r  )r$   rw   r%   exit)rn   r[   rO   pru   r   r   r   helpfunc  s   z6OptionsManagerMixIn.read_config_file.<locals>.helpfuncz%s verbose help.r   morer#  )r   r#  rw   r   Nz#The config file {:s} doesn't exist!r   Z	utf_8_sig)r7  zUsing config file {}z1No config file found, using default configurationr   )r   r
   r   r   r  r  r  r   r   r	   r3   r!   r)   formatr  ior   	read_filer   r  itemsisupperr   r/   r$   r%   r&   )r   r   verboseZ	helplevelr[   rA  Zhelpmsgrm   r   Zuse_config_filer   fpsectrB   rC   r   r   r   read_config_file  sF   



z$OptionsManagerMixIn.read_config_filec                 C   sT   | j }| D ] }||D ]\}}z| || W q ttjfy&   Y qw qdS )zddispatch values previously read from a configuration file to each
        options provider)
        N)r  r8  rF  r.  rr   r=   r   )r   r   r   rn   rA   r   r   r   load_config_file  s   z$OptionsManagerMixIn.load_config_filec                 K   s
   |  |S )z4override configuration according to given parameters)load_configuration_from_config)r   r   r   r   r   load_configuration  s   
z&OptionsManagerMixIn.load_configurationc                 C   s8   |  D ]\}}|dd}| j| }||| qd S )Nr   r)  )rF  r   r   r/  )r   r   r[   Z	opt_valuer   r   r   r   rM    s
   
z2OptionsManagerMixIn.load_configuration_from_configc                 C   s   t  E |du rtjdd }nt|}| jj|d\}}| jD ]}|j}|j	 D ]}t
||d}|du r7q*t||| q*q |W  d   S 1 sKw   Y  dS )ziOverride configuration according to command line parameters

        return additional arguments
        Nr   )r   )r   r%   argvr   r  
parse_argsr   r   __dict__r+  rv   setattr)r   r   r  r   r   attrrA   r   r   r   load_command_line_configuration   s   
$z3OptionsManagerMixIn.load_command_line_configurationr   c                 C   s:   t j| j| |d}||_t| j|| _| j| dS )z,add a dummy option section for help purpose )r  r   N)r=   r  r  r  ru   r"  r   r  )r   r  r   ru   r}   r   r   r   add_help_section  s   z$OptionsManagerMixIn.add_help_sectionc                 C   s>   || j j_t  | j  W  d   S 1 sw   Y  dS )z.return the usage string for available options N)r  r   r   r   r   )r   ru   r   r   r   rw     s   
$zOptionsManagerMixIn.helpNN)rp   N)T)Nr   N)r   NrF   )r   )r7   r8   r9   r:   r   r   r  r  r  r   r*  r.  r9  r;  r=  rK  rL  rN  rM  rT  rU  rw   r   r   r   r   r     s(    



 

!

1

	r   c                   @   sf   e Zd ZdZdZdZdZdZdd Zdd	 Z	dddZ
dd ZdddZdd Zdd ZdddZd
S )OptionsProviderMixInz-Mixin to provide options to an OptionsManagerr   r$  r   r   c                 C   s   t  | _|   d S rF   )r=   Valuesr   r<  r   r   r   r   r   -  s   
zOptionsProviderMixIn.__init__c                 C   sR   | j D ]#\}}|d}|dkr&|du r| |}|d}| |||| qdS )z,initialize the provider using default valuesr   r#  Nr$  )r  r  r   r/  )r   r[   rm   r   r$  r   r   r   r<  1  s   


z"OptionsProviderMixIn.load_defaultsNc                 C   s&   |du r	|  |}|d|ddS )z-get the config attribute corresponding to optNr   r)  r   )r   r  r   )r   r[   rm   r   r   r   r   <  s   
z$OptionsProviderMixIn.option_attrnamec                 C   s   t | j| |dS )z*get the current value for the given optionN)rv   r   r   r   r   r   r   option_valueB  s   z!OptionsProviderMixIn.option_valuec                 C   s\  |du r	|  |}|durt|||}|du r|dd}|dkr.t| j| ||| dS |dv r?t| j| ||d dS |dkrPt| j| ||d dS |dkr| ||}t| j|d}|du rt|tt	fro|}n|durzg }|
| t| j|| dS t|t	rt| j|||f  dS |
| dS |d	kr|d	 d||d dS t|)
z?method called to set an option (registered in the options list)Nr   store)r%  countr   r&  r   r   r#  )r   rt   r  rR  r   r   rv   rW   r   r   r   r6   )r   r   rA   r   rm   Z_listr   r   r   r/  F  s8   


zOptionsProviderMixIn.set_optionc                 C   sD   | j sJ | j D ]}|d |kr|d   S qtd|| jf |)z7return the dictionary defining an option given its namer   r   zno such option %s in section %r)r  r=   r   r@   )r   r[   rn   r   r   r   r   g  s   

z#OptionsProviderMixIn.get_option_defc                 c   sz    i }| j D ]\}}||dg ||| |f qd|v r)d|dfV  t| D ]\}}| |fV  q/dS )ztreturn an iterator on options grouped by section

        (section, [list of (optname, optdict, optvalue)])
        r}   N)	r  r4  r  r   rY  r,  r6  rF  r   )r   r8  r   rm   r   r  r   r   r   r3  q  s   z'OptionsProviderMixIn.options_by_sectionc                 c   s4    |d u r| j }|D ]\}}||| |fV  q
d S rF   )r  rY  )r   r  r   rm   r   r   r   options_and_values  s   z'OptionsProviderMixIn.options_and_valuesrF   rV  )r7   r8   r9   r:   r  r@   r  ru   r   r<  r   rY  r/  r   r3  r\  r   r   r   r   rW  $  s    

!
rW  c                   @   s   e Zd ZdZdd ZdS )ConfigurationMixInz]basic mixin for simple configurations which don't need the
    manager / providers model
    c              	   O   s   |s| dd tj| g|R i | t|  t| dd sIg | _| jD ]#\}}z
|d  df}W n	 ty<   Y q%w || jvrH| j	| q%| j
| dd d S )Nr  rp   r   r}   F)r  )r4  r   r   rW  rv   r   r  r   rr   r   r  )r   r   r   r   rm   Zgdefr   r   r   r     s    

zConfigurationMixIn.__init__N)r7   r8   r9   r:   r   r   r   r   r   r]    s    r]  r   c                 C   sP   t  }||_| |_t|| |||d t| ||d t|||d d S )Nr   )r   r   r   r$   r   r   r   )r   r   r   r   ru   r   r   r   r   r:    s   r:  )rp   )>r:   
__future__r   
contextlibr   r   rD  r=   r   r   rK   r%   r   r  Zpylintr   r	   r3   Z	USER_HOMEr2   r   dirnamer
   r   r   version_infor'   r   r,   r5   r.   globalsZENV_HELPr   r6   rD   rE   rH   rM   rR   r\   r^   r]   rX   rL   rk   ro   rt   r~   r   contextmanagerr   r   r   r   r   r   r   rW  r]  r5  r:  r   r   r   r   <module>   s   	


	
"
	
	
	:!{  #c