mò òDc@s3dkZdkZdklZdklZlZdklZdk l Z l Z l Z dkl ZeiZdkZeideƒydkZdkZWnej od„Zn Xd„Zddd „Zd „Zd e ifd „ƒYZd „ZdklZdk l!Z!de"fd„ƒYZ#dS(N(s implements(sservicesapp(ssob(susagesutilsplugin(spluginsýmktap is obsolete as of Twisted 2.5, and will be officially deprecated in Twisted 2.6. Use Twisted Application Plugins with the 'twistd' command directly, as described in 'Writing a Twisted Application Plugin for twistd' chapter of the Developer Guide.cCsD|dj ot|ƒ}n|dj ot|ƒ}n||fS(N(tuidtNonetinttgid(RR((tm/home/radix/Projects/Twisted/branches/releases/twisted-core-2.5.x-2329-2/Twisted.exp/twisted/scripts/mktap.pytgetids   cCsž|dj o=yt|ƒ}WqJtj oti|ƒd}qJXn|dj o=yt|ƒ}Wq”tj oti|ƒd}q”Xn||fS(Ni( RRRt ValueErrortpwdtgetpwnamRtgrptgetgrnam(RR((RR$s  cCsšh}tid||ƒ}xK|D]C}t|dƒo |i}n|i i dƒd}||| [command options] iRtusThe uid to run as.RtgsThe gid to run as.R R&sNAn existing .tap file to append the plugin to, rather than creating a new one.R2ttRsCThe output format to use; this can be 'pickle', 'xml', or 'source'.tappnametns-The process name to use for this application.R5tesZEncrypt file before writing (will make the extension of the resultant file begin with 'e')Rtds)Show debug information for plugin loadingRtps,Show progress information for plugin loadingthelpthsDisplay this messages_files -g "*.tap"s(pickle xml source)stap file to append tos uid to run ass gid to run ass output formatc Cs›g}x{|iƒD]m\}}ti|ƒo&|i|d|d„|i fƒq|i|d|d„t |ddƒfƒqW|i ƒ||_ dS(NcCs |iƒS(N(tmtoptions(RC((RtxscCs|iƒiƒS(N(tobjtloadtOptions(RF((RRE{st descriptiont(tscRt iteritemsR(RRt providedByR RRItgetattrtsorttselft subCommands(RPRR(RRK((Rtinitss &/ cGs|i|7_dS(N(RPtparamstrest(RPRT((Rt parseArgsscCs dG|GHdS(NsDebug: (tinfo(RPRV((Rt _reportDebug„scCsG|i|ƒ}|o dG|Gn|djoddddGndS(Ns Progress: f1.0s t iO(RPtpbRVts(RPRVRZ((Rt_reportProgress‡s   cCsv|iodSnd}}|do |i}n|do"|i}tiddƒ|_ nyt ||ƒ|_ Wn"t j ot idƒ‚nX|i|i ƒd|_|i|iƒt|dƒ p |dot it|ƒƒ‚nt|dƒo/|iidƒot it|iƒƒ‚n|i i|iƒp#t id d i|i ƒƒ‚ndS( NRRi<f1.0sCouldn't load the plugins file!it subOptionsRAsPlease select one of: RX(RPt recursingRRRRWR[tutilt makeStatBarRYRRtIOErrortusaget UsageErrorRRt parseOptionsRSRtstrR\tgetthas_keyt subCommandtjoin(RPRR((Rt postOptionsŽs*       #(t__name__t __module__tsynopsisR]RSRt optParameterstoptFlagst zsh_actionstzsh_actionDescrRRRURWR[Ri(((RR8QsQ 6 *    c Csótƒ}y|itidƒWnItij o}|GHtidƒn!t j otidƒnX|i |i }t i|ƒp|iƒ}n|i|iƒ}t||i |d|d|d|dt|d|dƒŒdS( NiiR R<R2R5RR(R8RDRctsystargvRaRbR>texittKeyboardInterruptRRgtplgRRMRGt makeServiceR\R,R7R(RuR>R,RD((Rtrun§s (snamedAny(sIPlugint _tapHelpercBsTtZdZeeeƒd„Zd„ZeeƒŒZd„Z ee ƒŒZ RS(sˆ Internal utility class to simplify the definition of "new-style" mktap plugins based on existing, "classic" mktap plugins. cCs(||_||_||_||_dS(N(R(RPRRIR (RPR(RRIR ((Rt__init__Ås   cCsd„}|fS(NcCst|iƒiS(N(tnamedAnyRPRRH(RP((RReÌs(Re(Re((RRDËs cCsd„}|fS(NcCst|iƒiS(N(RzRPRRv(RP((RReÒs(Re(Re((RRvÑs ( RjRkt__doc__t implementstIPluginRRyRDtpropertyRv(((RRx½s     ($RqR!tzope.interfaceR|ttwisted.applicationR$R3ttwisted.persistedR/ttwisted.pythonRaR^tpluginRttwistedRRtwarningstwarntPendingDeprecationWarningRR t ImportErrorRRRR7RHR8Rwttwisted.python.reflectRzttwisted.pluginR}tobjectRx(R/RzR3R R}RRaRxRwR…RRR^RRR8RR7R|RqR$R!((Rt?s*        V