Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
supervisor / __pycache__ / options.cpython-38.pyc
Size: Mime:
U

B]¿Tã@s¢ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlmZddlmZddlmZmZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlm Z dd
lm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddlm&Z&ddlm'Z'ddlm(Z(ddlm)Z)ddlm*Z*ddlm+Z+ddlm,Z,ddlm-Z-ddlm.Z.ddlm/Z/ddlm0Z0ddlm1Z1ddlm2Z2ddlm3Z3dd l4m5Z5dd!l4m6Z6dd"l4m7Z7dd#l4m8Z8d$d%„Z9e9ƒZ:d&d'„Z;Gd(d)„d)ƒZ<Gd*d+„d+ƒZ=Gd,d-„d-e=ƒZ>Gd.d/„d/e=ƒZ?gZ@Gd0d1„d1ejAƒZBGd2d3„d3eCƒZDGd4d5„d5eDƒZEGd6d7„d7eEƒZFGd8d9„d9eEƒZGGd:d;„d;eDƒZHGd<d=„d=eDƒZIGd>d?„d?eHƒZJd@dA„ZKdBdC„ZLdDdE„ZMdaNdFdG„ZOdHdI„ZPGdJdK„dKƒZQdLdM„ZRdNdO„ZSdPdQ„ZTGdRdS„dSeUƒZVGdTdU„dUeVƒZWGdVdW„dWeVƒZXGdXdY„dYeVƒZYGdZd[„d[eVƒZZdS)\éN)ÚPY2)ÚConfigParser)Úas_bytesÚ	as_string)Ú	xmlrpclib)ÚStringIO)Ú
basestring)Úasyncore_25)Úprocess_or_group_name)Úboolean)Úinteger)Úname_to_uid)Úgid_for_uid)Úexisting_dirpath)Ú	byte_size)Ú
signal_number)Úlist_of_exitcodes)Údict_of_key_value_pairs)Úlogfile_name)Úlist_of_strings)Ú
octal_type)Úexisting_directory)Ú
logging_level)Úcolon_separated_user_group)Úinet_address)ÚInetStreamSocketConfig)ÚUnixStreamSocketConfig)Úurl)Ú	Automatic)Úauto_restart)Úprofile_options)Úloggers)Ústates)Úxmlrpc)Úpollerc
CsPtj tj t¡¡}tj |d¡}t|dƒ}| ¡ ¡W5QR£SQRXdS)Nzversion.txtÚr)	ÚosÚpathÚabspathÚdirnameÚ__file__ÚjoinÚopenÚreadÚstrip)ZmydirZversion_txtÚf©r0ú!./build/lib/supervisor/options.pyÚ_read_version_txt9sr2cCstj tj tj |¡¡¡S©N)r&r'Únormpathr(Ú
expanduser)Úvr0r0r1Únormalize_path@sr7c@seZdZdS)ÚDummyN)Ú__name__Ú
__module__Ú__qualname__r0r0r0r1r8Csr8c	@sºeZdZejZejZejZeZdZZ	ej
dZdZdZ
dZdZdZddd„Zdd„Zdd	„Zd
d„Zd dd
„Zdd„Zd!dd„Zd"dd„Zdd„Zdd„Zd#dd„Zdd„Zdd„ZdS)$ÚOptionsNrTcCsÌg|_g|_g|_i|_i|_i|_i|_i|_||_| 	dddd|j
¡| 	dddd¡tj 
tj 
tjd¡¡}tj |dd	¡tj |d	¡d	d
ddg}||_i|_tj ¡D]\}}||jd
|<q°dS)znConstructor.

        Params:
        require_configfile -- whether we should fail on no config file.
        NÚhÚhelpÚ
configfilezc:zconfiguration=rÚetczsupervisord.confzetc/supervisord.confz/etc/supervisord.confz /etc/supervisor/supervisord.confzENV_%s)Ú
names_listÚ
short_optionsÚlong_optionsÚoptions_mapÚdefault_mapÚrequired_mapÚenviron_mapÚattr_prioritiesÚrequire_configfileÚaddr>r&r'r)ÚsysÚargvr+ÚsearchpathsÚenviron_expansionsÚenvironÚitems)ÚselfrIÚhererMÚkr6r0r0r1Ú__init__Xs.ûzOptions.__init__cCsLd}|jD]}tj |¡r
|}q$q
|dkrH|jrH| dd |j¡¡|S)z=Return the name of the found config file or print usage/exit.NzjNo config file found at default paths (%s); use the -c option to specify a config file at a different pathú, )rMr&r'ÚexistsrIÚusager+)rQÚconfigr'r0r0r1Údefault_configfilexs

þzOptions.default_configfilecCs@|jd}| d¡dkr&| d|j¡}|j |¡| d¡dS)zxPrint a long help message to stdout and exit(0).

        Occurrences of "%s" in are replaced by self.progname.
        Ú
z%srN)ÚdocÚfindÚreplaceÚprognameÚstdoutÚwriteÚexit)rQÚdummyr>r0r0r1r>…s

zOptions.helpcCs4|j dt|ƒ¡|j d|j¡| d¡dS)z2Print a brief error message to stderr and exit(2).z
Error: %s
zFor help, use %s -h
éN)Ústderrr`Ústrr^ra©rQÚmsgr0r0r1rWsz
Options.usagec
Csæ|dk	r`|dk	rtdƒ‚|s(|s(tdƒ‚|r>| d¡r>tdƒ‚|rT| d¡rTtdƒ‚|fdd„}|rŒ|rŒ| d¡| d¡krŒtd||fƒ‚|r|d	d
kr¦tdƒ‚|dd…|dd…}
}|d
krÐtdƒ‚d
|
}
|
|jkrîtd|
ƒ‚||f|j|
<|j |¡|r||d	d
kr$tdƒ‚|}
|
ddkrB|
dd…}
d|
}
|
|jkrbtd|
ƒ‚||f|j|
<|j |¡|	r||f|j|	<|rât||ƒs®t||dƒ|j	 ||f¡|dk	rÒ||j
|<|râ||j|<dS)aŽAdd information about a configuration option.

        This can take several forms:

        add(name, confname)
            Configuration option 'confname' maps to attribute 'name'
        add(name, None, short, long)
            Command line option '-short' or '--long' maps to 'name'
        add(None, None, short, long, handler)
            Command line option calls handler
        add(name, None, short, long, handler)
            Assign handler return value to attribute 'name'

        In addition, one of the following keyword arguments may be given:

        default=...  -- if not None, the default value
        required=... -- if nonempty, an error message if no value provided
        flag=...     -- if not None, flag value for command line option
        env=...      -- if not None, name of environment variable that
                        overrides the configuration file or default
        Nz%use at most one of flag= and handler=z"flag= requires a command line flagú:ú=cSs|Sr3r0)ÚargÚflagr0r0r1Ú<lambda>¿ózOptions.add.<locals>.<lambda>z&inconsistent short/long options: %r %rrú-z&short option should not start with '-'é)Úrhz"short option should be 'x' or 'x:'zduplicate short option key '%s'z%long option should not start with '-'éÿÿÿÿz--zduplicate long option key '%s')Ú
ValueErrorÚendswithrDrBÚappendrCrGÚhasattrÚsetattrrArErF)rQÚnameÚconfnameZshortZlongÚhandlerÚdefaultZrequiredrkÚenvÚkeyÚrestr0r0r1rJ–s` ÿ


zOptions.addcCs0|j |d¡}||kr,t|||ƒ||j|<dS)Nrq)rHÚgetrv)rQÚattrÚvalueZprioZcurrentr0r0r1Ú_setêszOptions._setc
CsT|dkrtjdd…}|dkr(tjd}|dkrXzddl}|j}Wntk
rVYnX||_||_g|_g|_z$t	 	|d 
|j¡|j¡\|_|_Wn2t	j
k
rÆ}z| t|ƒ¡W5d}~XYnX|jrè|jsè| dt|jƒ¡|jD]ž\}}|j|\}}	|	dk	rTz|	|ƒ}Wn8tk
rR}
z| d|||
f¡W5d}
~
XYnX|rî|dk	rît||ƒdk	r~| d|¡| ||d¡qî|j ¡D]˜}|j|\}}	|tjkr˜tj|}|	dk	rz|	|ƒ}Wn8tk
r}
z| d	|||
f¡W5d}
~
XYnX|r˜|dk	r˜| ||d¡q˜|jdkrH| ¡|_| ¡dS)
zôRealize a configuration.

        Optional arguments:

        args     -- the command line arguments, less the program name
                    (default is sys.argv[1:])

        doc      -- usage message (default is __main__.__doc__)
        Nrorrpz*positional arguments are not supported: %szinvalid value for %s %r: %sz"conflicting command line option %rrcz'invalid environment value for %s %r: %s)rKrLÚ__main__Ú__doc__Ú	Exceptionr^r[ÚoptionsÚargsÚgetoptr+rBrCÚerrorrWreÚpositional_args_allowedrDrrÚgetattrrrGÚkeysr&rOr?rYÚprocess_config)
rQr†r[r^r‚ÚexcÚoptrjrwryrgZenvvarr€r0r0r1Úrealizeðsf


ÿ 
&

ÿ
zOptions.realizec	CsÀ|jr| |¡|jD]J\}}|r| d¡}|j}|D]}|dkrFqRt||ƒ}q6| ||d¡q|j ¡D]"\}}t||ƒdkrlt	|||ƒql|j
 ¡D] \}}t||ƒdkrš| |¡qšdS)z}Process configuration data structure.

        This includes reading config file if necessary, setting defaults etc.
        Ú.Nr)r?Úprocess_config_filerAÚsplitÚ
configrootrŠrrErPrvrFrW)	rQÚdo_usagerwrxÚpartsÚobjÚpartr€Úmessager0r0r1rŒ6s"

zOptions.process_configc
Csxt|jdƒs$tj tj |j¡¡|_z| |j¡Wn>tk
rr}z |rZ| 	t
|ƒ¡nt|ƒ‚W5d}~XYnXdS)Nr-)rur?r&r'r(r)rRÚread_configrrrWre)rQr”rgr0r0r1r‘UszOptions.process_config_filecCstj |¡Sr3)r&r'rV©rQr'r0r0r1rVcszOptions.existsr%cCs
t||ƒSr3)r,)rQÚfnÚmoder0r0r1r,fszOptions.openc	CsÈg}| ¡D]¶}| |¡sq| dd¡d}| ||d¡}|dkrRtd||fƒ‚z| |¡}Wn$tk
r„td||fƒ‚YnXi}	| |¡D]}
|
|kr”| ||
¡|	|
<q”| |||	f¡q|S)Nrhroz"section [%s] does not specify a %sú!%s cannot be resolved within [%s])	ÚsectionsÚ
startswithr’ÚsanegetrrÚimport_specÚImportErrorr…rt)rQÚparserZfactory_keyZsection_prefixZ	factoriesÚsectionrwZfactory_specÚfactoryZextrasrSr0r0r1Úget_pluginsis.
ÿÿzOptions.get_pluginscCs0tj d|¡}t|dƒr"| ¡S| d¡SdS)Nzx=ÚresolveF)Ú
pkg_resourcesZ
EntryPointÚparserur§Úload)rQÚspecZepr0r0r1r¡ƒs
zOptions.import_spec)T)	NNNNNNNNN)NNN)T)r%)r9r:r;rKrdr_raÚwarningsÚuidÚgidrLr^r?Z	schemadirr“rRr‰rTrYr>rWrJrrrŒr‘rVr,r¦r¡r0r0r0r1r<FsB

 
÷
T
F

r<c@seZdZdZdZdZdZdZdZdZ	dZ
dZdZdZ
dZejjZdd„Zdd„Zdd	„Zd
d„Zdd
„Zdudd„Zdd„Zdd„Zdd„Zdvdd„Zdwdd„Zdd„Zdd„Zdd „Z d!d"„Z!d#d$„Z"d%d&„Z#d'd(„Z$d)d*„Z%d+d,„Z&d-d.„Z'd/d0„Z(d1d2„Z)d3d4„Z*d5d6„Z+d7d8„Z,d9d:„Z-d;d<„Z.d=d>„Z/d?d@„Z0dAdB„Z1dCdD„Z2dEdF„Z3dGdH„Z4dIdJ„Z5dKdL„Z6dMdN„Z7dOdP„Z8dQdR„Z9dSdT„Z:dUdV„Z;dWdX„Z<dYdZ„Z=d[d\„Z>d]d^„Z?d_d`„Z@dadb„ZAdcdd„ZBdedf„ZCdgdh„ZDdidj„ZEdkdl„ZFdmdn„ZGdxdodp„ZHdqdr„ZIdsdt„ZJdS)yÚ
ServerOptionsNr0FcCsÀt |¡tƒ|_tƒ|j_| dddd|j¡|jddddddd| d	d
dd¡|jd
dddtdd| ddddt¡|jddddt	dd|jddddt
d d|jd!d"d#d$td%d|jd&d'd(d)td*d|jd+d,d-d.t	d/d|jd0d1d2d3t
d4d|jd5d6d7d8tt ¡d|jd9d:d;d<td=d|jd>d?d@dAtdBd|jdCdDdEdCddd|jdFdGdHdFddd|jdIdJd@dKtddi|_g|_g|_g|_g|_tƒ|_t |¡|_dS)LNr6ÚversionÚnodaemonzsupervisord.nodaemonÚnror©rkrzÚuserzsupervisord.userúu:zuser=Úumaskzsupervisord.umaskzm:zumask=Ú022©rzÚ	directoryzsupervisord.directoryzd:z
directory=Úlogfilezsupervisord.logfilezl:zlogfile=úsupervisord.logÚlogfile_maxbyteszsupervisord.logfile_maxbyteszy:zlogfile_maxbytes=i Úlogfile_backupszsupervisord.logfile_backupszz:zlogfile_backups=é
Úloglevelzsupervisord.loglevelze:z	loglevel=ÚinfoÚpidfilezsupervisord.pidfilezj:zpidfile=úsupervisord.pidÚ
identifierzsupervisord.identifierzi:zidentifier=Ú
supervisorÚchildlogdirzsupervisord.childlogdirzq:zchildlogdir=Úminfdszsupervisord.minfdsza:zminfds=éÚminprocszsupervisord.minprocsrpz	minprocs=éÈÚ	nocleanupzsupervisord.nocleanuprSÚ
strip_ansizsupervisord.strip_ansiÚtr zsupervisord.profile_optionszprofile_options=)r<rTr8r“ÚsupervisordrJr°rrrrrrreÚtempfileÚ
gettempdirÚintr Z
pidhistoryÚprocess_group_configsÚparse_criticalsÚparse_warningsÚparse_infosÚSignalReceiverÚsignal_receiverr$ZPoller©rQr0r0r1rTœs¨

ÿÿÿÿþÿÿÿÿÿÿÿÿÿÿzServerOptions.__init__cCs|j dt¡| d¡dS)z-Print version to stdout and exit(0).
        ú%s
rN)r_r`ÚVERSIONra)rQrbr0r0r1r°ÊszServerOptions.versioncOstj||ŽSr3)r!Ú	getLogger©rQr†Úkwargsr0r0r1rÚÑszServerOptions.getLoggercCs"t ¡dkr|j d¡t |¡S)NraSupervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.)r&Úgetuidr¬Úwarnr<rYr×r0r0r1rYÔs
ÿz ServerOptions.default_configfilec

OsTtj|f|ž|Ž|jj}|jdk	rpzt|jƒ}Wn,tk
r^}z| |¡W5d}~XYnX||_t	|ƒ|_
|js~|j|_|jrŒ|j}n|j}t
|ƒ|_|jrª|j}n|j}t
|ƒ|_|j|_d|_|j|_}dd„|DƒD]}	|	d}
d|
|_qþqâ|jdkrHdd„|DƒD].}	|	d}|	d}|s6d}d	||f|_q|j|_dS)
NcSsg|]}|dtjkr|‘qS©Úfamily)ÚsocketÚAF_UNIX©Ú.0rXr0r0r1Ú
<listcomp>sÿz)ServerOptions.realize.<locals>.<listcomp>Úfileú	unix://%scSsg|]}|dtjkr|‘qSrß)ráÚAF_INETrãr0r0r1råsÿÚhostÚportZ	localhostzhttp://%s:%s)r<rr“rÍr´r
rrrWr­rr®r¿rºr7rÁÚrpcinterface_factoriesÚ	serverurlÚserver_configsrÃ)
rQrjÚkwr¤r­rgrºrÁZsconfigsrXr'rérêr0r0r1ràsD




zServerOptions.realizeTcCs"tj||d|jjj}||_dS)N)r”)r<rŒr“rÍrÑ)rQr”Únewr0r0r1rŒs
zServerOptions.process_configcsg|_g|_g|_|jj}d}t|dƒsx| |¡s>td|ƒ‚z| |d¡}d}Wn$t	t
fk
rvtd|ƒ‚YnXtƒ‰|jˆ_
zhz2zˆ |¡Wntk
r¶ˆ |¡YnXWn0tjk
rê}ztt|ƒƒ‚W5d}~XYnXW5|rü| ¡Xt ¡}|j|dœ}| |j¡ˆ d¡rNˆ |j¡ˆ dd	¡sLtd
ƒ‚ˆ dd	¡}t||dƒ}| ¡}t|dƒrtj  !tj  "|j#¡¡}nd
}|D]´}	tj  $||	¡}	t% %|	¡}
|
sÎ|j &d|	¡q˜t'|
ƒD]r}|j &d|¡zˆ (|¡Wn2tjk
r*}ztt|ƒƒ‚W5d}~XYnXˆ tj  "tj  !|¡¡¡q֐q˜ˆ )¡}d|krhtdƒ‚d|ji‰‡‡fdd„}
t*|
ddƒƒ|_+t*|
ddƒƒ|_,|
ddƒ}|dkr¼d|_-n
t.|ƒ|_-|
ddƒ|_/t0|
ddƒƒ|_1t2|
ddƒƒ|_3t4|
dd ƒƒ|_5t*|
d!d"ƒƒ|_6t7|
d#d$ƒƒ|_8t2|
d%d&ƒƒ|_9|
d'd(ƒ|_:t;|
d)d*ƒƒ|_<t= >¡}t.|
d+|ƒƒ|_?t;|
d,d*ƒƒ|_@t;|
d-d*ƒƒ|_A|
d.d/ƒ}t||d.ƒ}tB|ƒ|_C| Dˆd0d1¡|_E| Fˆ¡|_G|jGD]0}|jHD]"}|jC I¡}| |jC¡||_CqҐqÈ| Jˆ¡|_Kd|_L|S)2NFr-úcould not find config file %sr%Túcould not read config file %s)rRÚhost_node_nameZincludeÚfilesz5.ini file has [include] section, but no files settingz
include.filesrwrz No file matches via include "%s"z'Included extra file "%s" during parsingrÍz..ini file does not include supervisord sectionrRcs.| di¡}| ˆ¡||d<ˆj||f|ŽS©NÚ
expansions)r~ÚupdateÚ
getdefault)rŽrzrÜrõ©Zcommon_expansionsr£r0r1r~is
z&ServerOptions.read_config.<locals>.getrÆrÇrÈrÉr¹r´r¶r·rºr»r¼Ú50MBr½r¾r¿rÀrÁrÂrÃrÄr±ÚfalserÅrÊrËÚenvironmentrpzsupervisor.rpcinterface_factoryz
rpcinterface:)MrÒrÓrÔr“rÍrurVrrr,ÚIOErrorÚOSErrorÚUnhosedConfigParserrNrõÚcloseÚ	read_fileÚAttributeErrorÚreadfprZParsingErrorreÚplatformÚnoderRröZhas_sectionÚexpand_hereZ
has_optionr~Úexpandr’r&r'r)r(rwr+ÚglobrtÚsortedr-ržrrÆrÈr¹rr´rr¶rrºrr¼r½rr¿rÁrÃrr±rÎrÏrÅrÊrËrrûr¦rëÚprocess_groups_from_parserrÑÚprocess_configsÚcopyÚserver_configs_from_parserrír )rQÚfpr¤Ú
need_closeÚwhyròrõróÚbaseÚpatternÚ	filenamesÚfilenameržr~r¹ZtempdirZenviron_strÚgroupÚprocr{r0rør1r™"sÆ

"
ÿ
ÿÿÿ






ý


zServerOptions.read_configc"sæg}ˆ ¡}g}d|ji‰‡‡fdd„}|D]ê}| d¡s<q,t| dd¡dƒ}t||ddƒƒ}t||dd	ƒƒ}	g}
|D]ˆ}d
|}d|}
||kr¬|
|kr¬td||fƒ‚||krÌ|
|krÌtd
||fƒ‚||krØ|n|
}| |¡| 	ˆ||t
¡}|
 |¡qx| t|||	|
ƒ¡q,|D]h}| d¡r||kr:qt| dd¡dƒ}t||dd	ƒƒ}	| 	ˆ||t
¡}| t|||	|ƒ¡q|D]n}| d¡s qŠ| dd¡d}t||ddƒƒ}	t||ddƒƒ}|dkrêtd||fƒ‚||ddƒ}z| 
|¡}Wn&tk
r*td||fƒ‚YnXdd„t||ddƒƒDƒ}t|ƒ}|s`td|ƒ‚ddlm}g}|D]6}t||dƒ}|dkržtd||fƒ‚| |¡qtt||dd ƒƒ}|rÎtd!|ƒ‚| 	ˆ||t¡}| t|||	||||ƒ¡qŠ|D]Ö}| d"¡r||kr qt| dd¡dƒ}t||dd	ƒƒ}	d#|i}||d$dƒ}|dkrhd}nt|ƒ}||d%dƒ}|dk	r®t|ƒ}|dks¢|d&kr®td'|ƒ‚||d(dƒ}|dk	rôzt|ƒ}Wn"tk
ròtd)|ƒ‚YnX||d*dƒ}|dk	r>zt|ƒ}Wn&ttfk
r<td+|ƒ‚YnX||d,d|d-}|s`td.|ƒ‚z| |||||¡} Wn8tk
r®}!ztd/t|!ƒ|fƒ‚W5d}!~!XYnX| 	ˆ||t¡}| t|||	|| ƒ¡q| ¡|S)0NrRcs0| di¡}| ˆ¡||d<ˆj|||f|ŽSrô©r~rör )r¤rŽrzrÜrõrør0r1r~¡s
z5ServerOptions.process_groups_from_parser.<locals>.getzgroup:rhroÚprogramsÚpriorityéçz
program:%szfcgi-program:%sz-[%s] names unknown program or fcgi-program %sz>[%s] name %s is ambiguous (exists as program and fcgi-program)zprogram:zeventlistener:rqÚbuffer_sizer¾z*[%s] section sets invalid buffer_size (%d)Úresult_handlerz&supervisor.dispatchers:default_handlerrcSsg|]}| ¡‘qSr0)Úupper)räÚxr0r0r1råçsz<ServerOptions.process_groups_from_parser.<locals>.<listcomp>Úeventsrpz&[%s] section requires an "events" liner)Ú
EventTypesz$Unknown event type %s in [%s] eventsÚredirect_stderrrúzx[%s] section sets redirect_stderr=true but this is not allowed because it will interfere with the eventlistener protocolz
fcgi-program:Úprogram_namer´Úsocket_backlogéÿÿzInvalid socket_backlog value %sÚsocket_ownerzInvalid socket_owner value %sÚsocket_modezInvalid socket_mode value %srá©rõz%[%s] section requires a "socket" linez%s in [%s] socket)ržrRrŸr
r’rrrrrtÚprocesses_from_sectionÚ
ProcessConfigÚextendÚProcessGroupConfigr¡r¢ÚsetZsupervisor.eventsrrŠrÚEventListenerConfigÚEventListenerPoolConfigr
rrÚ	TypeErrorÚparse_fcgi_socketreÚFastCGIProcessConfigÚFastCGIGroupConfigÚsort)"rQr£ÚgroupsZall_sectionsZhomogeneous_excluder~r¤Ú
group_namerrZgroup_processesZprogramZprogram_sectionZfcgi_sectionZ	processesr!Z	pool_namerrZpool_event_namesrÚpool_eventsZpool_event_nameZ
pool_eventr Zfcgi_expansionsZ	proc_userÚproc_uidr"r$r%ráÚ
socket_configÚer0rør1r	›s<


ÿÿÿ
ÿÿÿ
ÿÿ

ÿÿÿÿÿ
ÿþ
ÿ
þÿ
ÿ

ÿ
ÿ
ÿÿþ&
ÿ
ÿÿz(ServerOptions.process_groups_from_parsercCsØ| d¡r||dd…}tj |¡s,td|ƒ‚t|ƒ}|dkr`t ¡}|dk	r`||kr`|t|ƒf}|dkrld}t||||dS|dk	sŒ|dk	r”tdƒ‚t	 
d|¡}|rÊ| d¡}	t| d	¡ƒ}
t
|	|
|d
Std|ƒ‚dS)Núunix://éz+Unix socket path %s is not an absolute pathéÀ)ÚownerrœÚbacklogzQsocket_owner and socket_mode params should only be used with a Unix domain socketztcp://([^\s:]+):(\d+)$rorc)r=zBad socket format %s)rŸr&r'Úisabsrrr7rÝrrÚreÚmatchrrÐr)rQZsockr6r$r%r"r'r­Úmrérêr0r0r1r/Ds6
ÿþ
ÿzServerOptions.parse_fcgi_socketc
Cs\z| ||||¡WStk
rV}z&|j ||j¡}td|||fƒ‚W5d}~XYnXdS)Nz%s in section %r (file: %r))Ú_processes_from_sectionrrÚsection_to_filer~r?)rQr£r¤r4Úklassr8rr0r0r1r'gsÿÿz$ServerOptions.processes_from_sectionc0"s|dkrt}g}t| dd¡dƒ}t ¡}|j|||dœ‰‡‡fdd„}t||ddƒƒ}	t||dd	ƒƒ}
t||d
dƒƒ}t||ddƒƒ}t||d
dƒƒ}
t	||ddƒƒ}t||ddƒƒ}t||ddƒƒ}t||d|ƒƒ}t
||ddƒƒ}t||ddƒƒ}t||ddƒƒ}t||ddƒƒ}||dddd}t||d dƒƒ}t||d!dƒƒ}t||d"dƒƒ}t||d#dƒƒ}||d$dƒ}|r’| ¡ 
¡d%kr’d}||d&dƒ}|dkr®d}nt|ƒ}||d'dƒ}|dk	rÔt|ƒ}t||d(d)ddƒ}|dkrd*|krtd+ƒ‚|r|std,ƒ‚t|||ƒD]Þ} ˆ}!|! d-| i¡|! |j¡tt||!dƒƒ}"||d.dƒ}#i}$d/D]Æ}%d0|%}&|||&tƒ}'t|'tƒržt|'|!|&ƒ}'t|'ƒ}'|'|$|&<d1|%}(t|||(dƒƒ})|)|$|(<d2|%}*t|||*d3ƒƒ}+|+|$|*<d4|%},t|||,dƒƒ}-|-|$|,<|'tkrn|+sn|j d5||&f¡qn|rf|$d6tdfkr^|j d7|¡d|$d6<||d8d|!d9}.|.dkrŒtd:|ƒ‚||t||!d(ƒ|.|#||	|
|||
||$d;|||$d<|$d=|$d>|$d6|||$d?|$d@|$dA|||||||"|dB}/| |/¡q&| ¡|S)CNrhro)rRr!ròr4cs2| di¡}| ˆ¡||d<ˆj||f|ž|ŽSrôr)r¤rŽr†rÜrõrør0r1r~}s
z2ServerOptions._processes_from_section.<locals>.getrrÚ	autostartÚtrueÚautorestartZ
unexpectedÚ	startsecsÚstartretrieséÚ
stopsignalZTERMÚstopwaitsecsr¾ÚstopasgrouprúÚkillasgroupÚ	exitcodesÚ0r ÚnumprocsÚnumprocs_startrrûrpF)Ú	do_expandÚstdout_capture_maxbytesÚstdout_events_enabledÚstderr_capture_maxbytesÚstderr_events_enabledrìZAUTOr´r¶Úprocess_namez%(program_name)sz%(process_num)zD%(process_num) must be present within process_name when numprocs > 1z1Cannot set stopasgroup=true and killasgroup=falseÚprocess_numr¹)r_rdz
%s_logfilez%s_logfile_backupsz%s_logfile_maxbytesrùz	%s_syslogztFor [%s], AUTO logging used for %s without rollover, set maxbytes > 0 to avoid filling up filesystem unintentionallyÚstderr_logfilezpFor [%s], redirect_stderr=true but stderr_logfile has also been set to a filename, the filename has been ignoredÚcommandr&z-program section %s does not specify a commandÚstdout_logfileÚstdout_logfile_backupsÚstdout_logfile_maxbytesÚ
stdout_syslogÚstderr_logfile_backupsÚstderr_logfile_maxbytesÚ
stderr_syslog)rwr[r¹r¶rrErGrHrIr­r\rTrUr]r^r_rZrVrWr`rarbrKrLrMrNrOr rûrì)r(r
r’rrrRrrrrrrr.rr
rrrÚrangerörNrrrÚ
isinstancerrrÓrtr2)0rQr£r¤r4rDrr!ròr~rrErGrHrIrKrLrMrNrOr rQrRZenvironment_strZstdout_cmaxbytesZ
stdout_eventsZstderr_cmaxbytesZ
stderr_eventsrìr´r­r¶rXrYrõrûr¹ZlogfilesrSr²Zlf_valZbu_keyÚbackupsZmb_keyÚmaxbytesZsy_keyZsyslogr[Zpconfigr0rør1rBqsý

ÿ

ÿÿ
ÿþÿþÿ
ÿ
á!z%ServerOptions._processes_from_sectioncCsTg}| ¡D]B}| |¡r| dd¡}t|ƒdkr<|d}nd}| ||f¡q|S)Nrhro)ržrŸr’Úlenrt)rQr£Ústyper…r¤r•rwr0r0r1Ú_parse_servernamess

z ServerOptions._parse_servernamescCsT|j}||ddƒ}||ddƒ}|dk	s.|dk	rJ|dks>|dkrJtd|ƒ‚||dœS)NÚusernameÚpasswordz‹Section [%s] contains incomplete authentication: If a username or a password is specified, both the username and password must be specified)rjrk)r rr)rQr£r¤r~rjrkr0r0r1Ú_parse_username_and_passwordsþÿz*ServerOptions._parse_username_and_passwordc
Csäg}| |d¡}|D]„\}}i}|j}| | ||¡¡||d<tj|d<||ddƒ}|dkrjtd|ƒ‚t|ƒ\}	}|	|d<||d<||d<| |¡q| |d¡}
|
D]2\}}i}|j}||d	dd
|j	id}|dkrètd|ƒ‚| 
¡}||d<tj|d<t|ƒ|d	<| | ||¡¡||d
dƒ}|dk	rhzt
|ƒ}Wn"tk
rdtd|ƒ‚YnXnd}||d
<||ddƒ}
|
dk	rÀzt|
ƒ}
Wn&ttfk
r¼td|
ƒ‚YnXnd}
|
|d<||d<| |¡qª|S)NZinet_http_serverrwràrêzsection [%s] has no port valuerér¤Zunix_http_serverrærRr&zsection [%s] has no file valueÚchownzInvalid sockchown value %s)rqrqÚchmodzInvalid chmod value %sr;)rir rörlrárèrrrrtrRr.râr7rrr.)rQr£ZconfigsZinet_serverdefsrwr¤rXr~rêréZunix_serverdefsZsfilermrnr0r0r1r's^



z(ServerOptions.server_configs_from_parsercCs |j ¡| ¡|j ¡dSr3)r$Zbefore_daemonizeÚ
_daemonizeZafter_daemonizer×r0r0r1Ú	daemonize\s
zServerOptions.daemonizec
Cst ¡}|dkr&|j d¡t d¡|j d¡|jr”zt |j¡Wn8tk
r€}z|j 	d|j|f¡W5d}~XYnX|j d|j¡t 
d¡tdƒ|_t
_t
_t 
d¡tddƒ|_t
_t
_t 
d	¡tddƒ|_t
_t
_t ¡t |j¡dS)
Nrz"supervisord forked; parent exitingz#daemonizing the supervisord processzcan't chdir into %r: %szset current directory: %rz	/dev/nullroÚwrc)r&ÚforkÚloggerÚblatherÚ_exitrÀr¹ÚchdirrýÚcriticalrÿr,ÚstdinrKÚ	__stdin__r_Ú
__stdout__rdÚ
__stderr__Úsetsidr¶)rQÚpidÚerrr0r0r1roas.
ÿÿ


zServerOptions._daemonizec	Csxt ¡}z*t|jdƒ}| d|¡W5QRXWn*ttfk
r\|j d|j¡YnXd|_	|j 
d|¡dS)NrqrØzcould not write pidfile %sTzsupervisord started with pid %s)r&Úgetpidr,rÁr`rürýrsrwÚunlink_pidfilerÀ)rQr}r/r0r0r1Ú
write_pidfile•szServerOptions.write_pidfilecCsV|jD].\}}|dtjkr|jr|d}| |¡q|jrH| |j¡|j ¡dS)Nràræ)	ÚhttpserversrárâÚunlink_socketfilesÚ_try_unlinkr€rÁr$rÿ)rQrXÚserverZ
socketnamer0r0r1Úcleanup szServerOptions.cleanupcCs(zt |¡Wntk
r"YnXdSr3)r&Úunlinkrýršr0r0r1r„ªszServerOptions._try_unlinkcCsbg}|jD]@\}}| ¡| ¡ ¡D]"}t|ddƒ}||kr&| |¡q&q
|D]}| ¡qPdS)Nr…)r‚rÿÚget_socket_mapÚvaluesrŠrt)rQZdispatcher_serversrXr…Ú
dispatcherZdispatcher_serverr0r0r1Úclose_httpservers°szServerOptions.close_httpserverscCs|j ¡dSr3)rsrÿr×r0r0r1Úclose_loggerÇszServerOptions.close_loggercCs`|jj}t tj|¡t tj|¡t tj|¡t tj|¡t tj|¡t tj|¡dSr3)	rÖÚreceiveÚsignalÚSIGTERMÚSIGINTÚSIGQUITÚSIGHUPÚSIGCHLDÚSIGUSR2)rQrr0r0r1Ú
setsignalsÊszServerOptions.setsignalscCs
|j ¡Sr3)rÖÚ
get_signalr×r0r0r1r–ÓszServerOptions.get_signalc
CsÞz| |¡|_d|_WnÂtjk
r¨}zr|jdtjkrF| d¡nRd}tj	 
|jd¡}|dkr~| d||jdf¡n| d|||jdf¡W5d}~XYn2tk
rØ}z| |jd¡W5d}~XYnXdS)NTrzœAnother program is already listening on a port that one of our HTTP servers is configured to use.  Shut this program down first before starting supervisord.z1Cannot open an HTTP server: socket.error reportedz%s %sz%s errno.%s (%d))Úmake_http_serversr‚rƒrárˆr†ÚerrnoZ
EADDRINUSErWZ	errorcoder~rr)rQrÍrr>Z	errornamer0r0r1ÚopenhttpserversÖs
ÿzServerOptions.openhttpserverscCs$d|||f}|jd||jd}|S)Nz%s-%s---%s-z.log)ÚsuffixÚprefixÚdir)Ú
mktempfilerÅ)rQrwrÃZchannelr›rºr0r0r1Úget_autochildlog_nameësýz#ServerOptions.get_autochildlog_namec
Csª|j}t d|j¡}zt |¡}Wn&ttfk
rJ|j 	d¡YdSX|D]T}| 
|¡rPtj ||¡}z| 
|¡WqPttfk
r¢|j 	d|¡YqPXqPdS)Nz.+?---%s-\S+\.log\.{0,1}\d{0,4}zCould not clear childlog dirzFailed to clean up %r)rÅr?ÚcompilerÃr&ÚlistdirrürýrsrÞr@r'r+Úremove)rQrÅZfnrerrÚpathnamer0r0r1Úclear_autochildlogdirós
z#ServerOptions.clear_autochildlogdircCstjSr3)ÚasyncoreZ
socket_mapr×r0r0r1rˆszServerOptions.get_socket_mapc	Cs>d}t||jƒD](}zt |¡Wqtk
r6YqXqdS)Né)rcrÆr&rÿrý)rQÚstartrr0r0r1Úcleanup_fdsszServerOptions.cleanup_fdscCst ||¡dSr3)r&Úkill)rQr}rŽr0r0r1r¨szServerOptions.killc
CsŠzt dtj¡\}}Wnjtk
r€}zL|jd}|tjtjfkrR|j 	d|¡|tjkrh|j 
d¡d\}}W5d}~XYnX||fS)Nrqrz:waitpid error %r; a process may not be cleaned up properlyzEINTR during reap)NN)r&ÚwaitpidÚWNOHANGrýr†r˜ZECHILDÚEINTRrsrwrt)rQr}ÚstsrÚcoder0r0r1r©s

ÿÿ
zServerOptions.waitpidcsNˆdkrdSztˆƒ}WnLtk
rdzt ˆ¡}Wn tk
rVdˆYYSX|d}Yn.Xzt |¡}Wntk
rd|YSXt ¡}||kr¦dS|dkr²dS|d}ttd	ƒr|d‰‡fd
d„t	 
¡Dƒ}| d|¡zt |¡Wnt
k
rYdSXzt |¡Wnt
k
r>Yd
SXt |¡dS)züDrop privileges to become the specified user, which may be a
        username or uid.  Called for supervisord startup and when spawning
        subprocesses.  Returns None on success or a string error message if
        privileges could not be dropped.NzNo user specified to setuid to!zCan't find username %rrczCan't find uid %rrz$Can't drop privilege as nonroot userrJÚ	setgroupscs g|]}ˆ|dkr|d‘qS)rJrcr0)räZgrprec©r´r0r1råRs
ÿz1ServerOptions.drop_privileges.<locals>.<listcomp>z&Could not set groups of effective userz(Could not set group id of effective user)rÐrrÚpwdÚgetpwnamÚKeyErrorÚgetpwuidr&rÝruÚgrpZgetgrallÚinsertr®rýÚsetgidÚsetuid)rQr´r­ZpwrecZcurrent_uidr®r3r0r¯r1Údrop_privileges,sBzServerOptions.drop_privilegescCsZ|jdkr$t ¡dkrV|j d¡n2| |j¡}|dkrL|j d|j¡n
| |¡dS)zµSet the uid of the supervisord process.  Called during supervisord
        startup only.  No return value.  Exits the process via usage() if
        privileges could not be dropped.NrzËSupervisor is running as root.  Privileges were not dropped because no user is specified in the config file.  If you intend to run as root, you can set user=root in the config file to avoid this message.zSet uid to user %s succeeded)r­r&rÝrÒrtr¸rÔrWrfr0r0r1Úset_uid_or_exites
ÿzServerOptions.set_uid_or_exitc	
Csþg}ttdƒr&| d|jtjddœ¡ttdƒrH| d|jtjddœ¡|D]¬}|d}|d}|d}|d	}|}t |¡\}}||krL|d
krL||kr¦|d
kr¦|}z&t |||f¡|j	 dt
ƒ¡WqLtjtfk
rö| 
|t
ƒ¡YqLXqLdS)
z¶Set the rlimits of the supervisord process.  Called during
        supervisord startup only.  No return value.  Exits the process via
        usage() if any rlimits could not be set.Ú
RLIMIT_NOFILEaŒThe minimum number of file descriptors required to run this process is %(min_limit)s as per the "minfds" command-line argument or config file setting. The current environment will only allow you to open %(hard)s file descriptors.  Either raise the number of usable file descriptors in your environment (see README.rst) or lower the minfds setting in the config file to allow the process to start.)rgÚminÚresourcerwÚRLIMIT_NPROCa…The minimum number of available processes required to run this program is %(min_limit)s as per the "minprocs" command-line argument or config file setting. The current environment will only allow you to open %(hard)s processes.  Either raise the number of usable processes in your environment (see README.rst) or lower the minprocs setting in the config file to allow the program to start.r»r¼rgrwrqz)Increased %(name)s limit to %(min_limit)sN)rur¼rtrÆrºrÈr½Z	getrlimitZ	setrlimitrÔÚlocalsrˆrrrW)	rQZlimitsÚlimitZ	min_limitÚresrgrwZsoftZhardr0r0r1Úset_rlimits_or_exitxsD
	ôÿ
	ôÿÿ
z!ServerOptions.set_rlimits_or_exitcCs–d}t |j¡|_|jr&t |j|¡tj|j|j||j|j|j	d|j
D]}|j |¡qP|jD]}|j 
|¡qh|jD]}|j |¡q€dS)Nz&%(asctime)s %(levelname)s %(message)s
)Zrotatingrfre)r!rÚr¿rsr±Z
handle_stdoutZhandle_filerºr¼r½rÒrwrÓrÞrÔrÀ)rQÚformatrgr0r0r1Úmake_logger´s$ú


zServerOptions.make_loggercCsddlm}|||ƒS)Nr)r—)Zsupervisor.httpr—)rQrÍr—r0r0r1r—ÉszServerOptions.make_http_serverscCs(zt |¡Wntk
r"YnXdSr3)r&rÿrý)rQÚfdr0r0r1Úclose_fdÍszServerOptions.close_fdcCst ¡Sr3)r&rrr×r0r0r1rrÓszServerOptions.forkcCst ||¡Sr3)r&Údup2)rQZfrmÚtor0r0r1rÆÖszServerOptions.dup2cCst ¡Sr3)r&Úsetpgrpr×r0r0r1rÈÙszServerOptions.setpgrpcCs
t |¡Sr3)r&Ústat)rQrr0r0r1rÉÜszServerOptions.statcCst |t|ƒ¡Sr3)r&r`r)rQrÄÚdatar0r0r1r`ßszServerOptions.writecCst |||¡Sr3)r&Úexecve)rQrrLr{r0r0r1rËâszServerOptions.execvecCs&dt_t |||¡\}}t |¡|Sr3)r&Z
_urandomfdrÎZmkstemprÿ)rQršr›rœrÄrr0r0r1rås
zServerOptions.mktempfilecCst |¡dSr3)r&r¡ršr0r0r1r¡îszServerOptions.removecCst |¡dSr3)r&ru)rQr­r0r0r1ruñszServerOptions._exitcCst |¡dSr3)r&r¶)rQÚmaskr0r0r1ÚsetumaskôszServerOptions.setumaskcCs2dddg}dtjkr.tjd}|r.| tj¡}|S)z3Return a list corresponding to $PATH, or a default.z/binz/usr/binz/usr/local/binÚPATH)r&rOr’Úpathsep)rQr'Úpr0r0r1Úget_path÷s


zServerOptions.get_pathcCst ¡Sr3)r&rr×r0r0r1Úget_pidszServerOptions.get_pidcCst|dkrtd|ƒ‚nZt |tj¡r4td|ƒ‚n<t |tj¡d@sVtd|ƒ‚nt |tj¡spt	d|ƒ‚dS)Nzcan't find command %rzcommand at %r is a directoryéIzcommand at %r is not executablezno permission to run command %r)
ÚNotFoundrÉÚS_ISDIRÚST_MODEÚ
NotExecutableÚS_IMODEr&ÚaccessÚX_OKÚNoPermission)rQrrLÚstr0r0r1Úcheck_execv_argsszServerOptions.check_execv_argscCs0|j d¡|jjD]}t|dƒr| ¡qdS)Nzsupervisord logreopenÚreopen)rsrÀZhandlersrurÞ)rQryr0r0r1Ú
reopenlogss
zServerOptions.reopenlogsc
CsXzt |d¡}WnBtk
rR}z$|jdtjtjtjfkr>‚d}W5d}~XYnX|S)Nirrm)r&r-rýr†r˜ZEWOULDBLOCKZEBADFr«)rQrÄrÊrr0r0r1ÚreadfdszServerOptions.readfdcCstj |jpi¡dSr3)r&rOrörûr×r0r0r1Úprocess_environmentsz!ServerOptions.process_environmentcCst |¡dSr3)r&rv)rQrœr0r0r1rv"szServerOptions.chdirc
Csúdddddddœ}z¬t ¡\}}|||d<|d<t ¡\}}|||d<|d<|rrt ¡\}}|||d<|d<|d|d|dfD]0}|dk	rˆt |tj¡tjB}	t |tj|	¡qˆ|WStk
rô| ¡D]}|dk	rÖ| |¡qւYnXdS)	zç Create pipes for parent to child stdin/stdout/stderr
        communications.  Open fd in non-blocking mode so we can read them
        in the mainloop without blocking.  If stderr is False, don't
        create a pipe for stderr. N)Úchild_stdinrxr_Úchild_stdoutrdÚchild_stderrrârxr_rãrdrä)	r&ÚpipeÚfcntlZF_GETFLÚO_NDELAYZF_SETFLrýr‰rÅ)
rQrdÚpipesrxrâr_rãrärÄÚflagsr0r0r1Ú
make_pipes%s2ûzServerOptions.make_pipescCs*dD] }| |¡}|dk	r| |¡qdS)N)rxr_rd©r~rÅ©rQrèZfdnamerÄr0r0r1Úclose_parent_pipesDs
z ServerOptions.close_parent_pipescCs*dD] }| |¡}|dk	r| |¡qdS)N)rârãrärërìr0r0r1Úclose_child_pipesJs
zServerOptions.close_child_pipes)T)N)N)T)Kr9r:r;r´Z	sockchownZ	sockchmodrºr¿rÁZ
passwdfiler±rûr‚r€rƒr"ZSupervisorStatesZRUNNINGZmoodrTr°rÚrYrrŒr™r	r/r'rBrirlrrprorr†r„r‹rŒr•r–r™ržr£rˆr§r¨r©r¸r¹rÁrÃr—rÅrrrÆrÈrÉr`rËrr¡rurÍrÑrÒrÝrßràrárvrêrírîr0r0r0r1r¯s’.<
y*$ÿ
ÿ
54
		9<		
	
r¯c@sHeZdZdZdZdZdZdZdZdZ	dd„Z
dd„Zdd„Zd	d
„Z
dS)Ú
ClientOptionsroNcCsêtj|ddtƒ|_tƒ|j_d|jj_d|jj_d|jj_d|jj_d|jj_	d|jj_
ddlm}d|if}|g|_
|jddd	dd
dd|jdd
dd|jddddtdd| dddd¡| dddd¡| dddd¡dS) NF)rIrÄr)ÚDefaultControllerPluginrzÚinteractivezsupervisorctl.interactiveÚiror³Úpromptzsupervisorctl.promptr¸rìzsupervisorctl.serverurlzs:z
serverurl=úhttp://localhost:9001rjzsupervisorctl.usernamerµz	username=rkzsupervisorctl.passwordzp:z	password=Úhistoryzsupervisorctl.history_filezr:z
history_file=)r<rTr8r“Ú
supervisorctlrñrórìrjrkÚhistory_fileZsupervisor.supervisorctlrðÚplugin_factoriesrJr)rQrðÚdefault_factoryr0r0r1rTZs2








ÿÿzClientOptions.__init__cOs"tj|f|ž|Ž|jsd|_dS)Nro)r<rr†rñ)rQrjrîr0r0r1rtszClientOptions.realizec		Csª|jj}d}t|dƒsxtj t|ƒ¡|_| |¡s>t	d|ƒ‚z| 
|d¡}d}Wn$ttfk
rvt	d|ƒ‚YnXt
ƒ}|j|_d|_z| |¡Wntk
r¸| |¡YnX|rÆ| ¡| ¡}d|krÞt	dƒ‚|jd	d
d|jid}| d
¡rt|dd…ƒ}d|}||_| d|j¡|_| d|j¡|_| d|j¡|_|jd|jd|jid}|r‚t|ƒ}||_||_nd|_d|_|j| |dd¡7_|S)NFr-rðr%Trñröz0.ini file does not include supervisorctl sectionrìrôrRr&r9r:rçrórjrkr÷zsupervisor.ctl_factoryz
ctlplugin:)r“rörur&r'r)r7rRrVrrr,rürýrþrNrõÚ	mysectionrrrrÿržr÷rŸrìrórjrkr÷rør¦)	rQr
r¤rr£ržrìr'r÷r0r0r1r™ys`

ÿ
ÿ
ýzClientOptions.read_configcCstjdt |j|j|j¡dS)Nzhttp://127.0.0.1)Z	transport)rZServerProxyr#ZSupervisorTransportrjrkrìr×r0r0r1ÚgetServerProxy²sþûzClientOptions.getServerProxy)r9r:r;r‰rñrórìrjrkr÷rTrr™rûr0r0r0r1rïPs9rïc@sPeZdZdZdd„Zddd„Zdd„Zed	ifd
d„Zeifdd
„Z	dd„Z
dS)rþrÍcOsHts$d|krd|d<d|kr$d|d<tjj|f|ž|Ži|_i|_dS)NZinline_comment_prefixes)ú;ú#ÚstrictF)rrÚRawConfigParserrTrCrõrÛr0r0r1rTÂszUnhosedConfigParser.__init__ú<string>cCs:ztj |||¡WStk
r4| t|ƒ¡YSXdS)z‚Parse configuration data from a string.  This is intended
        to be used in tests only.  We add this method for Py 2/3 compat.N)rrÿÚread_stringrrr)rQÚstringÚsourcer0r0r1rÒsÿzUnhosedConfigParser.read_stringcKslt|tƒr|g}g}|D]N}|j ¡}| tjj||gf|Ž¡t|jƒt|ƒ}|D]}||j	|<qVq|S)a%Attempt to read and parse a list of filenames, returning a list
        of filenames which were successfully parsed.  This is a method of
        RawConfigParser that is overridden to build self.section_to_file,
        which is a mapping of section names to the files they came from.
        )
rdrZ	_sectionsrr)rrÿr-Ú	frozensetrC)rQrrÜZok_filenamesrZ
sections_origZdiffr¤r0r0r1r-Ûs

ÿzUnhosedConfigParser.readTcCs|z| ||¡}Wn&tjk
r6|tkr.‚n|}YnX|rxt|tƒrxtt|j 	¡ƒt| 	¡ƒƒ}t
||d||fƒ}|S)Nz%s.%s)r~rZ
NoOptionErrorÚ_markerrdrÚdictÚlistrõrPr)rQr¤ÚoptionrzrSrõZoptvalZcombined_expansionsr0r0r1r ðs
ÿ
ÿzUnhosedConfigParser.sanegetcKs|j|j|f||dœ|—ŽS)N)rzrõ)r rú)rQrrzrõrÜr0r0r1r÷s
ÿÿzUnhosedConfigParser.getdefaultcCs\d}| ¡D]J}| |¡D]:\}}||kr|dk	s:tdƒ‚| ||¡}| |||¡qqdS)Nz%(here)szhere has not been set to a path)ržrPÚAssertionErrorr]r+)rQrRZHERE_FORMATr¤r|r€r0r0r1rszUnhosedConfigParser.expand_hereN)r)r9r:r;rúrTrr-rr r÷rr0r0r0r1rþ¿s
	ÿ
rþc@s<eZdZdd„Zdd„Zdd„Zdd„Zd	d
„Zdd„Zd
S)ÚConfigcCs| |¡Sr3)Ú__eq__©rQÚotherr0r0r1Ú__ne__sz
Config.__ne__cCs$|j|jkr|j|jkS|j|jkSr3©rrwrr0r0r1Ú__lt__sz
Config.__lt__cCs$|j|jkr|j|jkS|j|jkSr3rrr0r0r1Ú__le__sz
Config.__le__cCs$|j|jkr|j|jkS|j|jkSr3rrr0r0r1Ú__gt__!sz
Config.__gt__cCs$|j|jkr|j|jkS|j|jkSr3rrr0r0r1Ú__ge__'sz
Config.__ge__cCsd|jt|ƒ|jfS)Nz<%s instance at %s named %s>)Ú	__class__Úidrwr×r0r0r1Ú__repr__-sÿzConfig.__repr__N)	r9r:r;rrrrrrr0r0r0r1r
sr
c@s‚eZdZddddddddd	d
ddd
dddddddddddddddgZddgZdd „Zd!d"„Zd#d$„Zd%d&„Zd,d(d)„Z	d*d+„Z
d'S)-r(rwr­r[r¹r¶rrErGrHrIr\rTrUr_r]r^rZrVr`rarWrbrKrLrMrNrOr rûrìcKsF||_|jD]}t||||ƒq|jD]}t||| |d¡ƒq(dSr3)r…Úreq_param_namesrvÚoptional_param_namesr~)rQr…Zparamsrwr0r0r1rT?s


zProcessConfig.__init__cCsXt|tƒsdS|j|jD]8}tt||ƒt||ƒfkr8qt||ƒt||ƒkrdSqdS©NFT)rdr(rrrrŠ)rQr
rwr0r0r1rFs
zProcessConfig.__eq__cCs4|jdk	r*|j d¡}|dk	r*| tj¡S|j ¡S)z|Return a list corresponding to $PATH that is configured to be set
        in the process environment, or the system default.NrÎ)rûr~r’r&rÏr…rÑršr0r0r1rÑRs

zProcessConfig.get_pathcCsJ|jj}|jj}|j}|jtkr.|||dƒ|_|jtkrF|||dƒ|_dS)Nr_rd)r…ržrÃrwr\rrZ)rQZget_autonameZsidrwr0r0r1Úcreate_autochildlogs[s

z"ProcessConfig.create_autochildlogsNcCsddlm}||ƒ}||_|S)Nr)Ú
Subprocess)Úsupervisor.processrr)rQrrÚprocessr0r0r1Úmake_processeszProcessConfig.make_processcCs´|j}|j |¡}|d|d|d}}}i}ddlm}ddlm}	ddlm}
|dk	rv|
j}||||ƒ||<|dk	r”|
j	}||||ƒ||<|dk	r¬|	|d|ƒ||<||fS)Nr_rdrxr©ÚPOutputDispatcher©ÚPInputDispatcher©r)
r r…rêÚsupervisor.dispatchersr r"rÄrZProcessCommunicationStdoutEventÚProcessCommunicationStderrEvent)rQrÚ
use_stderrrÐÚ	stdout_fdÚ	stderr_fdÚstdin_fdÚdispatchersr r"rÚetyper0r0r1Úmake_dispatchersks zProcessConfig.make_dispatchers)N)r9r:r;rrrTrrÑrrr,r0r0r0r1r(1sHö	

r(c@seZdZdd„ZdS)r,c
Cs¶d}|j |¡}|d|d|d}}}i}ddlm}ddlm}	ddlm}
dd	lm}|dk	rx||d|ƒ||<|dk	r–|j}|
|||ƒ||<|dk	r®|	|d|ƒ||<||fS)
NTr_rdrxr)ÚPEventListenerDispatcherr!rr#)	r…rêr$r-r"r rÄrr%)
rQrr&rÐr'r(r)r*r-r"r rr+r0r0r1r,~s$ÿz$EventListenerConfig.make_dispatchersN)r9r:r;r,r0r0r0r1r,}sr,c@seZdZddd„Zdd„ZdS)r0NcCs.|dkrtdƒ‚ddlm}||ƒ}||_|S)Nz FastCGI programs require a groupr)ÚFastCGISubprocess)ÚNotImplementedErrorrr.r)rQrr.rr0r0r1r•sz!FastCGIProcessConfig.make_processcCs4t ||¡\}}|d}|dk	r,|| ¡||fS)Nrx)r(r,rÿ)rQrr*rÐr)r0r0r1r,s
z%FastCGIProcessConfig.make_dispatchers)N)r9r:r;rr,r0r0r0r1r0“s
r0c@s,eZdZdd„Zdd„Zdd„Zdd„Zd	S)
r*cCs||_||_||_||_dSr3)r…rwrr
)rQr…rwrr
r0r0r1rT¨szProcessGroupConfig.__init__cCsBt|tƒsdS|j|jkrdS|j|jkr.dS|j|jkr>dSdSr)rdr*rwrr
rr0r0r1r®s
zProcessGroupConfig.__eq__cCs|jD]}| ¡qdSr3©r
r©rQrXr0r0r1Úafter_setuid»s
zProcessGroupConfig.after_setuidcCsddlm}||ƒS)Nr)ÚProcessGroup)rr3)rQr3r0r0r1Ú
make_group¿szProcessGroupConfig.make_groupN©r9r:r;rTrr2r4r0r0r0r1r*§s
r*c@s,eZdZdd„Zdd„Zdd„Zdd„Zd	S)
r-cCs.||_||_||_||_||_||_||_dSr3)r…rwrr
rr5r)rQr…rwrr
rr5rr0r0r1rTÄsz EventListenerPoolConfig.__init__cCs^t|tƒsdS|j|jkrZ|j|jkrZ|j|jkrZ|j|jkrZ|j|jkrZ|j|jkrZdSdSr)rdr-rwrr
rr5rrr0r0r1rÎs

ÿ
þ
ý
ü
ûzEventListenerPoolConfig.__eq__cCs|jD]}| ¡qdSr3r0r1r0r0r1r2Üs
z$EventListenerPoolConfig.after_setuidcCsddlm}||ƒS)Nr)ÚEventListenerPool)rr6)rQr6r0r0r1r4àsz"EventListenerPoolConfig.make_groupNr5r0r0r0r1r-Ãs
r-c@s$eZdZdd„Zdd„Zdd„ZdS)r1cCst |||||¡||_dSr3)r*rTr7)rQr…rwrr
r7r0r0r1rTåsûzFastCGIGroupConfig.__init__cCs*t|tƒsdS|j|jkrdSt ||¡S)NF)rdr1r7r*rrr0r0r1rïs

zFastCGIGroupConfig.__eq__cCsddlm}||ƒS)Nr)ÚFastCGIProcessGroup)rr7)rQr7r0r0r1r4øszFastCGIGroupConfig.make_groupN)r9r:r;rTrr4r0r0r0r1r1äs
	r1c		Csæt|ƒ}t|ƒ}z°t|dƒœ}||krt|r2tdƒ‚| dd¡| ¡}t||ƒ}|dkr^d}| |¡| |¡}n@||kr„tdƒ‚|dkr | |¡| ¡}n| |¡| |¡}W5QRXWn ttfk
ràtdƒ‚YnX|S)zJ Read length bytes from the file named by filename starting at
    offset ÚrbZ
BAD_ARGUMENTSrrcZFAILED)	Úabsr,rrÚseekÚtellrÐr-rýrü)	rÚoffsetÚlengthZ	absoffsetZ	abslengthr/ÚszÚposrÊr0r0r1ÚreadFileüs0



r@c
CsìzÄt|dƒ°}d}| dd¡| ¡}|||kr>d}|d}|||krb||dkrZd}||}|dkrnd}|dkrzd}|dkrˆd}n| |¡| |¡}|}t|ƒ||gW5QR£WSQRXWn"ttfk
ræd|dgYSXd	S)
a
    Read length bytes from the file named by filename starting at
    offset, automatically increasing offset and setting overflow
    flag if log size has grown beyond (offset + length).  If length
    bytes are not available, as many bytes as are available are returned.
    r8FrrcTrormrpN)r,r:r;r-rrýrü)rr<r=r/Zoverflowr>rÊr0r0r1ÚtailFiles0

&rAcCsŽt |¡r(t |¡d@}d|}||fSt |¡rzt |¡}dt|ƒ}ttdƒr^t |¡}n|d@}|rr|d7}d|fSd|}d|fSd	S)
a*Decode the status returned by wait() or waitpid().

    Return a tuple (exitstatus, message) where exitstatus is the exit
    status, or -1 if the process was killed by a signal; and message
    is a message telling what happened.  It is the caller's
    responsibility to display the message.
    r#zexit status %szterminated by %sÚ	WCOREDUMPé€z (core dumped)rqz unknown termination cause 0x%04xN)r&Ú	WIFEXITEDÚWEXITSTATUSÚWIFSIGNALEDÚWTERMSIGÚsignamerurB)r¬ZesrgÚsigZiscorer0r0r1Údecode_wait_statusGs



rJcCs tdkrtƒt |¡pd|S)z‚Return a symbolic name for a signal.

    Return "signal NNN" if there is no corresponding SIG name in the
    signal module.
    Nz	signal %d)Ú	_signamesÚ_init_signamesr~)rIr0r0r1rHcsrHcCsNi}tj ¡D]6\}}t|ddƒ}|dkr,q|dƒr|dƒs|||<q|adS)NrŸZSIGZSIG_)rŽÚ__dict__rPrŠrK)ÚdrSr6Zk_startswithr0r0r1rLns
rLc@s$eZdZdd„Zdd„Zdd„ZdS)rÕcCs
g|_dSr3)Ú_signals_recvdr×r0r0r1rTzszSignalReceiver.__init__cCs||jkr|j |¡dSr3)rOrt)rQrIÚframer0r0r1r}s
zSignalReceiver.receivecCs|jr|j d¡}nd}|S)Nr)rOÚpop)rQrIr0r0r1r–szSignalReceiver.get_signalN)r9r:r;rTrr–r0r0r0r1rÕysrÕcCsšz
||WStk
r^}z6t| ¡ƒ}| ¡td||t|ƒd |¡fƒ‚W5d}~XYn8tk
r”}ztd||t|ƒfƒ‚W5d}~XYnXdS)NzYFormat string %r for %r contains names (%s) which cannot be expanded. Available names: %srUz.Format string %r for %r is badly formatted: %s)r²rr‹r2rrrer+r„)ÚsrõrwÚexZ	availabler0r0r1rŠs 
þÿÿÿrcCs||kr|}nd||f}|S)Nz%s:%sr0)r4rXrwr0r0r1Ú
make_namespecšsrTcCsD| dd¡}t|ƒdkr2|\}}|r,|dkr<d}n
||}}||fS)NrhrorcÚ*)r’rg)ZnamespecÚnamesr4rXr0r0r1Úsplit_namespec¤s
rWc@seZdZdZdS)ÚProcessExceptionz@ Specialized exceptions used when attempting to start a process N©r9r:r;rƒr0r0r0r1rX²srXc@seZdZdZdS)Ú
BadCommandz5 Indicates the command could not be parsed properly. NrYr0r0r0r1rZµsrZc@seZdZdZdS)r×zŠ Indicates that the filespec cannot be executed because its path
    resolves to a file which is not executable, or which is a directory. NrYr0r0r0r1r׸sr×c@seZdZdZdS)rÔzR Indicates that the filespec cannot be executed because it could not
    be found NrYr0r0r0r1rÔ¼srÔc@seZdZdZdS)rÛz¤ Indicates that the file cannot be executed because the supervisor
    process does not possess the appropriate UNIX filesystem permission
    to execute the file. NrYr0r0r0r1rÛÀsrÛ)[rár‡r&rKrÎr˜rŽr?r°r´r¼rÉr¨rrr¬ræZsupervisor.compatrrrrrrrZsupervisor.medusar	r¤Zsupervisor.datatypesr
rrr
rrrrrrrrrrrrrrrrrrr rÄr!r"r#r$r2rÙr7r8r<r¯rïrrÿrþÚobjectr
r(r,r0r*r-r1r@rArJrKrHrLrÕrrTrWr„rXrZr×rÔrÛr0r0r0r1Ú<module>s¸ILmR L!")