i'dWc @s3dZddkZddkZddkZddkZddkZddkZddklZddk l Z l Z dZ dZ dZdZd Zd Zd Zd Zd ZdZdZdZdZdZdZdZdZde fdYZde fdYZde fdYZde fdYZ de fdYZ!d e fd!YZ"d"e fd#YZ#d$e fd%YZ$d&e fd'YZ%d(e fd)YZ&d*e fd+YZ'd,e fd-YZ(d.e fd/YZ)d0e fd1YZ*d2e fd3YZ+d4e fd5YZ,d6e fd7YZ-d8e fd9YZ.d:e fd;YZ/d<e fd=YZ0d>e fd?YZ1d@e fdAYZ2dBe2fdCYZ3dDe2fdEYZ4dFe2fdGYZ5dHe fdIYZ6dJe fdKYZ7dS(Ls Transfer checkpoint data objects. These objects are stored in the data object cache (DOC) and used by the transfer checkpoints. iN(tetree(t DataObjectt ParsingErrortactiont app_callbacktcontentst cpio_argstinstalltIPStips_argst purge_historyt reject_listtsizet software_datat svr4_argst transformttypet uninstallt update_indexcCs"|djo|S|idjS(sYConvert a string from any capitalized version of true/false to True and False tTrueN(tNonet capitalize(tconv_strt default_val((s ../info.pyt convert_to_TF:s tSoftwarecBskeZdZdZdZdZdZd ddZdZ e dZ e d Z e d Z RS( skSubclass of DataObject to contain the transfer checkpoint information in the Data Object Cache. tsoftwaretnameRsAMissing value for %s name element in the manifestRcCs5tt|iti||_|i|_dS(s}Initialize the DataObject object with name software and create a transfer object with the specified name. N(tsuperRt__init__tSOFTWARE_LABELt_nametuppert tran_type(tselfRR((s ../info.pyRNs cCsjtiti}|idj o|iti|in|idj o|iti |in|S(sbMethod to create the xml software element with its associated name (optional). N( RtElementRRRRtsettSOFTWARE_NAME_LABELR!tSOFTWARE_TYPE_LABEL(R"telement((s ../info.pytto_xmlVs cCs|itijotStS(s Returns True if element has: - tag software - a valid transfer type Returns false otherwise. (ttagRRtFalseR(tclsR'((s ../info.pyt can_handleascCst|iti|iti}|iti}|d jotdn|i}x:|D]2}|itjo|djot }|it i }|d jo t i }nt }t } x|iD]} | i d jottidn| it ijo|i| i idq| it ijo| i| i idqqW||_||_| |_n|djot}|iti}|iti} |d jo ti }nti|dd} | |_||_| d j ot| |_qnY|djo`t}|iti}|d jo ti }nti|dd}||_||_n|idjot}|iti }|d jo ti }nti|dd} t!| d jotd n||_| |_nV|id joBt"}|it"i#}|d jo t"i }n||_n|i$|gqiqiW|S( s)Method to create the DOC software elements3No type specified for software node in the manifestRs" tCPIOtsw_typetSVR4tarchivetARCHIVEisJExactly one deployable object name value is required for software archivestcloneN(%RtgetR%R&RRt getchildrenR)t SOFTWARE_DATAtIPSSpectIPS_ACTION_LABELtINSTALLtlistttexttSOFTWARE_DATA_NAME_ERRORtIPS_NAME_LABELtappendtstriptIPS_REJECT_LABELRRR tCPIOSpectCPIOSPEC_ACTION_LABELtCPIOSPEC_SIZE_LABELt get_namelisttintR tSVR4SpectSVR4_ACTION_LABELtlowert ArchiveSpectARCHIVE_ACTION_LABELtlent CloneSpectCLONE_ACTION_LABELtinsert_children(R+R't chkpt_objtvalt sub_elementtsubt transfer_objRtpkg_listR tchildR t file_listtobj_list((s ../info.pytfrom_xmlns          !                          cCs~|idd}g}|D]0}||idj o|iidndq~}d|jotti|n|S(s6Get list of textual components of software_data name elements Input: sw_data - software_data element sw_type - string containing name of software 'type' Returns: list of name elements' text fields Raises: ParsingError if name element exists with no text R)Rs" N(t iterchildrenR:RR>RRR;(R+tsw_dataR.tnamest_[1]Rt name_list((s ../info.pyRCs = N(t__name__t __module__t__doc__RR%R&R;RRR(t classmethodR,RWRC(((s ../info.pyRDs  btSourcecBsDeZdZdZdZdZedZedZRS(smSubclass of DataObject to contain the information needed to determine the source for the transfer tsourcecCstt|itidS(N(RRaRt SOURCE_LABEL(R"((s ../info.pyRscCstiti}|S(s'Method to create the xml source element(RR#RaRc(R"R'((s ../info.pyR(scCs|itijS(sp Returns True if element has: - tag = source Returns false otherwise. (R)RaRc(R+R'((s ../info.pyR,scCs t}|S(sNMethod to create the DOC source element from the xml tree. (Ra(R+R'tobj((s ../info.pyRWs ( R]R^R_RcRR(R`R,RW(((s ../info.pyRas    t DestinationcBsDeZdZdZdZdZedZedZRS(srSubclass of DataObject to contain the information needed to determine the destination for the transfer t destinationcCstt|itidS(N(RReRtDESTINATION_LABEL(R"((s ../info.pyRscCstiti}|S(s,Method to create the xml destination element(RR#ReRg(R"R'((s ../info.pyR( scCs|itijS(st Returns True if element has: - tag = destination Returns false otherwise. (R)ReRg(R+R'((s ../info.pyR,scCs t}|S(s2Method to create the doc element from the xml tree(Re(R+R'Rd((s ../info.pyRWs ( R]R^R_RgRR(R`R,RW(((s ../info.pyRes    tDircBsJeZdZdZdZdZdZedZedZ RS(suSubclass of DataObject to contain the information needed to determine the directory path for the transfer tdirtpathcCs&tt|iti||_dS(N(RRhRt DIR_LABELtdir_path(R"Rj((s ../info.pyR'scCs,titi}|iti|i|S(s$Method to create the xml dir element(RR#RhRkR$tDIR_PATH_LABELRl(R"R'((s ../info.pyR(+scCs|itijS(st Returns True if element has: - tag = destination Returns false otherwise. (R)RhRk(R+R'((s ../info.pyR,2scCst|iti}|S(s2Method to create the doc element from the xml tree(RhR3Rm(R+R'Rd((s ../info.pyRW;s( R]R^R_RkRmRR(R`R,RW(((s ../info.pyRh s   tFilecBsYeZdZdZdZdddgZdZdZedZ edZ RS( suSubclass of DataObject to contain the information needed to determine the uri of the Unified Archive file tfileturithttpthttpscCs&tt|iti||_dS(N(RRnRt FILE_LABELtfile_uri(R"Rp((s ../info.pyRJscCs,titi}|iti|i|S(s%Method to create the xml file element(RR#RnRsR$tFILE_URI_LABELRt(R"R'((s ../info.pyR(NscCs|itijS(s` Returns True if element has tag: "file" Returns False otherwise. (R)RnRs(R+R'((s ../info.pyR,UscCsj|iti}ti|dd}|itijotd|intti|}|S(s2Method to create the doc element from the xml treetschemeRos"Unrecognised File uri scheme: '%s'(R3RnRuturlparseRvtFILE_SUPPORTED_SCHEMESRt urlunparse(R+R'RpturipRd((s ../info.pyRW]s( R]R^R_RsRuRxRR(R`R,RW(((s ../info.pyRnBs  tImagecBseeZdZdZdZdZdZdZdZe dZ dZ e d Z e d ZRS( ssSubclass of DataObject to contain the information needed to determine the destination image attributes. timagetssl_keytssl_certtimg_rootRtindexcCs8tt|iti||_||_||_dS(N(RR{Rt IMAGE_LABELRRR(R"RRR((s ../info.pyRus  cCstiti}|iti}|o|ti|dijo%|i ti|ditinti |dijo%|i ti |diti qn|i dj o|i ti |i n|i ti|i|i tit|i|S(s&Method to create the xml image elementiN(RR#R{Rt get_childrentArgst ARGS_LABELtIMAGE_SSL_KEY_LABELtarg_dictR$tIMAGE_SSL_CERT_LABELRRtIMAGE_IMG_ROOT_LABELtIMAGE_ACTION_LABELRtIMAGE_INDEX_LABELtstrR(R"R'targ_info((s ../info.pyR({s  cCs|itijS(sn Returns True if element has: - tag = image Returns False otherwise. (R)R{R(R+R'((s ../info.pyR,sc Cs|iti}|iti}|iti}t|t}t|iti|iti|}h}|o||tiRR(R+R'RRRRZRUR((s ../info.pyRWs     N(R]R^R_RRRRRRARRBR8RRRR(R`R,RW(((s ../info.pyR@$s  AtP5ISpeccBsMeZdZdZdZedZdZedZ edZ RS(sYSubclass of DataObject to contain the IPS P5i transfer checkpoint information RR cCs&tt|iti||_dS(N(RRRtP5I_TRANSFER_LABELR (R"R ((s ../info.pyRscCstiti}|S(sjMethod to transfer the data object cache IPS P5I checkpoint information to xml format. (RR#RtP5I_SOFTWARE_DATA_LABEL(R"R'((s ../info.pyR(scCstS(sAlways returns False Creation of a P5ISpec should be handled in Software object's can_handle and from_xml() (R*(R+R'((s ../info.pyR,scCs t}|S(s_Method to transfer the IPS P5I checkpoint xml data to the data object cache (R(R+R'Rd((s ../info.pyRWs ( R]R^R_RRR*RR(R`R,RW(((s ../info.pyRs   R6cBsweZdZdZdZdZdZdZdZdZ d d d d e dZ d Z ed Zed ZRS( sSubclass of DataObject to contain the IPS transfer checkpoint information. The following attributes are available: action The transfer action performed. Valid actions: install, uninstall, and transform contents A list containing packages to be transferred or removed. app_callback: Holds the value for an application callback purge_history : boolean to indicate if the history should be purged. (False) RR RRtrejectRRcCsJtt|iti||_||_||_||_||_dS(N( RR6RtIPS_TRANSFER_LABELRRR RR (R"RRR RR ((s ../info.pyRs     cCstiti}|itijo|ititin.|itijo|ititinx/|i D]$}ti |ti }||_ qvW|i dj o6x3|i D]$}ti |ti}||_ qWn|S(sfMethod to transfer the data object cache IPS checkpoint information to xml format. N(RR#R6tIPS_SOFTWARE_DATA_LABELRR8R$R7RRRR<R:R RR?(R"R'tpkgRP((s ../info.pyR(s      cCstS(s) Always returns False (R*(R+R'((s ../info.pyR,scCst}|iti}|djo ti}nt}t}xt|iD]f}|itijo|i |i i dqT|iti jo|i |i i dqTqTW||_ ||_||_|S(s[Method to transfer the IPS checkpoint xml data to the data object cache s" N(R6R3R7RR8R9R4R)R<R=R:R>R?RRR (R+R'RRRRSR RT((s ../info.pyRWs       !   N(R]R^R_RRR7R<R?R8RRR*RR(R`R,RW(((s ../info.pyR6s   RHcBseZdZdZdZdZdZdZdZdZ dZ d d d e d d d d Z d Zed Zed ZRS(sSubclass of DataObject to contain the archive transfer checkpoint information. The following attributes are available: action The transfer action performed. Valid actions: install contents A list containing deployable objects to be transferred app_callback: Holds the value for an application callback purge_history : boolean to indicate if the history should be purged. (False) RRR RR~R}tssl_caRcCs\tt|iti||_||_||_||_||_||_ ||_ dS(N( RRHRtARCHIVE_TRANSFER_LABELRRRR tkeytcerttca_cert(R"RRRR RRR((s ../info.pyR%s      cCstiti}|ititi|io|iti|in|i o|iti |i n|io|iti |i nx/|i D]$}ti|ti}||_qW|S(sjMethod to transfer the data object cache archive checkpoint information to xml format. (RR#RHtARCHIVE_SOFTWARE_DATA_LABELR$RIR8RtARCHIVE_SSL_KEY_LABELRtARCHIVE_SSL_CERT_LABELtARCHIVE_SSL_CA_LABELRRRtARCHIVE_NAME_LABELR:(R"R'RdRP((s ../info.pyR(1s       cCstS(s) Always returns False (R*(R+R'((s ../info.pyR,Csc Cs|iti}|djo ti}n|iti}|iti}|iti}g}|i}x'|D]}|i |i i dq{Wt||dd|||} | S(s_Method to transfer the ARCHIVE checkpoint xml data to the data object cache s" N( R3RHRIRR8RRRR4R=R:R>( R+R'RR}R~RRRZRRR((s ../info.pyRWJs    N(R]R^R_RIRRRRRRR8RR*RR(R`R,RW(((s ../info.pyRHs RKcBsbeZdZdZdZdZdZdZd d dZ dZ e dZ e d Z RS( sSubclass of DataObject encoding the clone transfer checkpoint information. The following attributes are available: action The transfer action performed. Valid actions: install contents The boot environment to clone, default is the active BE RRR RRcCs/tt|iti||_||_dS(N(RRKRtCLONE_TRANSFER_LABELRR(R"RR((s ../info.pyRqs cCs^titi}|ititix/|iD]$}ti|ti }||_ q2W|S(shMethod to transfer the data object cache clone checkpoint information to xml format. ( RR#RKtCLONE_SOFTWARE_DATA_LABELR$RLR8RRtCLONE_NAME_LABELR:(R"R'RdRP((s ../info.pyR(vs    cCstS(sAlways returns False (R*(R+R'((s ../info.pyR,scCsl|iti}|djo ti}ng}|iD]}||iidq=~}t||S(s]Method to transfer the clone checkpoint xml data to the data object cache s" N(R3RKRLRR8R4R:R>(R+R'RR[tnR((s ../info.pyRWs   3N(R]R^R_RLRRRR8RRR(R`R,RW(((s ../info.pyRKcs REcBsheZdZdZdZdZdZdZdZd d dZ dZ e d Z e d ZRS( sUSubclass of DataObject to contain the SVR4 transfer checkpoint information. The following attributes are available: action The transfer action performed. Valid actions: install, uninstall, and transform contents A list containing packages to be transferred or removed. R RRRRRcCs/tt|iti||_||_dS(N(RRERtSVR4_TRANSFER_LABELRR(R"RR((s ../info.pyRs cCs^titi}|iti|ix/|iD]$}ti|t i }||_ q2W|S(sgMethod to transfer the data object cache SVR4 checkpoint information to xml format. ( RR#RERR$RFRRRRR%R:(R"R'tsvr4_pkgRP((s ../info.pyR(s    cCstS(s) Always returns False (R*(R+R'((s ../info.pyR,scCs|iti}t}|djo d}ng}|i}x'|D]}|i|iidqKW||_||_ |S(s\Method to transfer the SVR4 checkpoint xml data to the data object cache Rs" N( R3RERFRR4R=R:R>RR(R+R'RRRRSRZR((s ../info.pyRWs      N(R]R^R_RRRFtSVR4_NAME_LABELR8RRRR(R`R,RW(((s ../info.pyREs RcBsMeZdZdZdZddZdZedZ edZ RS(sVSubclass of Args to contain the transfer implementation specific arguments RRcCs&tt|iti||_dS(N(RRRRR(R"R((s ../info.pyRscCs2titi}|itit|i|S(s%Method to create the xml args element(RR#RRR$tARGS_DICT_LABELRR(R"R'((s ../info.pyR(scCs|itijS(sw Returns True if element has: - tag = destination Returns false otherwise. (R)RR(R+R'((s ../info.pyR,scCst|iti}|S(s2Method to create the doc element from the xml tree(RR3R(R+R'Rd((s ../info.pyRWsN( R]R^R_RRRRR(R`R,RW(((s ../info.pyRs   t PublishercBsMeZdZdZdZddZdZedZ edZ RS(sXSubclass of DataObject to contain the information needed for IPS publishers. t publisherRcCs&tt|iti||_dS(N(RRRtPUBLISHER_LABELR(R"tpublisher_name((s ../info.pyRscCs:titi}|io|iti|in|S(s&Method to create xml publisher element(RR#RRRR$tPUB_NAME_LABEL(R"R'((s ../info.pyR(s cCs|itijS(sq Returns True if element has: - tag = publisher Returns False otherwise (R)RR(R+R'((s ../info.pyR,scCs"|iti}t|}|S(sVMethod to transfer the publisher xml data to the data object cache (R3RR(R+R'RRd((s ../info.pyRWs N( R]R^R_RRRRR(R`R,RW(((s ../info.pyRs   tBootEnvcBsMeZdZdZdZddZdZedZ edZ RS(s=Contains optional boot environment source for Clone transferstboot_envRcCs&tt|iti||_dS(N(RRRt BOOTENV_LABELtbootenv(R"t bootenv_name((s ../info.pyRscCs:titi}|io|iti|in|S(s%Method to create xml boot_env element(RR#RRRR$tBOOTENV_NAME_LABEL(R"R'((s ../info.pyR("s cCs|itijS(sp Returns True if element has: - tag = boot_env Returns False otherwise (R)RR(R+R'((s ../info.pyR,)scCs"|iti}t|}|S(sUMethod to transfer the boot_env xml data to the data object cache (R3RR(R+R'RRd((s ../info.pyRW2s N( R]R^R_RRRRR(R`R,RW(((s ../info.pyRs   tOrigincBsMeZdZdZdZddZdZedZ edZ RS(sUSubclass of DataObject to contain the information needed for IPS Origins. toriginRcCs&tt|iti||_dS(N(RRRt ORIGIN_LABELR(R"t origin_name((s ../info.pyRCscCs,titi}|iti|i|S(s#Method to create xml origin element(RR#RRR$tORIGIN_NAME_LABELR(R"R'((s ../info.pyR(GscCs|itijS(sn Returns True if element has: - tag = origin Returns False otherwise (R)RR(R+R'((s ../info.pyR,MscCs"|iti}t|}|S(sSMethod to transfer the origin xml data to the data object cache (R3RR(R+R'RRd((s ../info.pyRWVs N( R]R^R_RRRRR(R`R,RW(((s ../info.pyR<s   tMirrorcBsMeZdZdZdZddZdZedZ edZ RS(sUSubclass of DataObject to contain the information needed for IPS Mirrors. tmirrorRcCs&tt|iti||_dS(N(RRRt MIRROR_LABELR(R"t mirror_name((s ../info.pyRgscCs:titi}|io|iti|in|S(s#Method to create xml mirror element(RR#RRRR$tMIRROR_NAME_LABEL(R"R'((s ../info.pyR(ks cCs|itijS(sn Returns True if element has: - tag = mirror Returns False otherwise (R)RR(R+R'((s ../info.pyR,rscCs"|iti}t|}|S(sVMethod to transfer the publisher xml data to the data object cache (R3RR(R+R'RRd((s ../info.pyRW{s N( R]R^R_RRRRR(R`R,RW(((s ../info.pyR`s   tCredcBsYeZdZdZdddgZdZdZdZedZ ed Z RS( s^Subclass of DataObject to contain the information needed to store the credentials. t credentialsRqRrtftps /etc/certs/CAcCstt|itidS(N(RRRt CRED_LABEL(R"((s ../info.pyRscCstiti}|S(s(Method to create xml credentials element(RR#RR(R"R'((s ../info.pyR(scCs|itijS(ss Returns True if element has: - tag = credentails Returns False otherwise (R)RR(R+R'((s ../info.pyR,scCs t}|S(sXMethod to transfer the credentials xml data to the data object cache (R(R+R'Rd((s ../info.pyRWs ( R]R^R_Rt PROTOCOLSt CA_CERTS_DIRRR(R`R,RW(((s ../info.pyRs   t KeyOrCertcBseZdZdZdZdZd edZdZ dZ e dZ e dZ d d dZd d Zd ZRS( saSubclass of DataObject to contain the information needed for IPS inlined credentials. tRcCsDtt|i|i||_||_||_t|_dS(N( RRRt ELEMENT_NAMEtvalueRthide_credentialR9t _saved_copies(R"RRR((s ../info.pyRs    cCsPxI|iD]>}tii|o%|iid|ti|q q WdS(sDestructor method to ensure any downloaded certs are deleted from the system before the object gets garbage collected sDeleting credential: N(RtosRjtexiststloggertdebugtunlink(R"tdel_copy((s ../info.pyt__del__s  cCsdti|i}|io|iti|in+|iod|i|_n |i |_|S(sMethod to create xml elements***** %s Hidden ****( RR#RRR$RtSRCRR:R(R"R'((s ../info.pyR(s   cCs|i|ijS(s,Returns True if tag is ELEMENT_NAME (R)R(R+R'((s ../info.pyR,scCs(|iti}||i|}|S(sPMethod to transfer the key xml data to the data object cache (R3RRR:(R+R'RRd((s ../info.pyRWscCstid}|oAtii| o-ti|dti||i|i n5|o-ti |dti||i|i nti d}|o|i i d|tii||}t|dii}zX|~}xH|idD]7} | i} | djoqn|i| dqWWdQXti ||Sti|} tii| i} t| d jotd ntii|| }|i i d | |i id | i| itijo7|i id | | ifti|||i n| idjp| idjoW| iid p| iidotti dii} z| ~ } | i!}WdQX|djpt|d jotdn|idd }|id}|i id||d fti#d|d d|d| idddf} ti| ||i q|i id| | ift$i%| i|n t&dti ||S(s'Retrieves the SSL credentials for a secure software source in the manifest (eg. an IPS publisher or Unified Archive. The manifest credential might point an NFS file (/path), a URI (http://), a relative URI (./path), or be inlined. If it is an inlined credential then the inlined_filename will have a value. Otherwise the filename is retrieved from the basename of cred. Input: value - The SSL credendial to be stored (Key, Cert or CA_Cert) basedir - The directory in which to store credentials. inlined_filename - Filename to use for credential objects that have inlined values from the manifest. Returns: The full path of the saved credential file trootiis!Saving inlined credential file %stws RNis$A credential file must be specified.sSaving credential file %ssurl scheme = ..%s..sDownloading %s from %sRot/t.t service_lists)Unable to read services for relative patht:s!A relative download of %s from %sRqisCopying %s from %ss*Unsupported credential file protocol type.('tpwdtgetpwnamRRjRtmakedirstsolaris_installt secure_chowntpw_uidtpw_gidt secure_chmodtumaskRtinfotjoinRRRtsplittlstriptwriteRwtbasenameRJt ValueErrorRRvRRtnetloctdownload_filest startswithtsystem_temp_pathtreadRRytshutiltcopyfiletIOError(R"Rtbasedirtinlined_filenameRtold_masktfullpath_filenameR[tfobjtlineturltfilenamet_[2]tfptservicest ourservicetservice_components((s ../info.pyt__save_credentialsl &      ')      cCsd}|djo ti}n|io|i|i|}nj|ioSt|to|d}nd|i|i f}|i|i|d|}n t d||i jo|i i |nt i|d|S(sSave an SSL credential to local storage Input: basedir - The directory in which to store credentials. Returns: The full path of the saved credential file s_ca.pems inlined_%s.%sRsOCredential that contains neither a source nor an inlined value can not be savediN(RRRRt_KeyOrCert__save_credentialRRtCA_CertRtFILE_EXTRRR=R R (R"RtcredfileR%((s ../info.pytsave_credential:s       cCs\xI|iD]>}tii|o%|iid|ti|q q Wt|_dS(sremoves a credential filesDeleting credential: N(RRRjRRRRR9(R"R((s ../info.pytremove_credential\s  N(R]R^R_RR.RRRRRR(R`R,RWR,R0R1(((s ../info.pyRs  [ "tKeycBseZdZdZdZRS(sXSubclass of KeyOrCert to contain the information needed for IPS inlined Key. R(R]R^R_RR.(((s ../info.pyR2fstCertcBseZdZdZdZRS(sYSubclass of KeyOrCert to contain the information needed for IPS inlined Cert. Rtcrt(R]R^R_RR.(((s ../info.pyR3nsR-cBseZdZdZdZRS(s\Subclass of KeyOrCert to contain the information needed for IPS inlined CA cert. RR4(R]R^R_RR.(((s ../info.pyR-vst HTTPAuthTokencBsGeZdZdZedZdZedZedZ RS(soSubclass of DataObject to contain the information needed to retrieve Glance stored Unified Archives thttp_auth_tokencCs/tt|iti||_||_dS(N(RR5RtHTTP_AUTH_TOKEN_LABELR6t hide_token(R"R6R8((s ../info.pyRs  cCs@titi}|iod|i|_n |i|_|S(s)Method to create the xml property elements***** %s Hidden ****(RR#R5R7R8R:R6(R"R'((s ../info.pyR(s   cCs|itijS(sq Returns True if element has: - tag = property Returns False otherwise. (R)R5R7(R+R'((s ../info.pyR,scCs|i}t|}|S(s2Method to create the DOC element from the xml tree(R:R5(R+R'R6Rd((s ../info.pyRWs  ( R]R^R_R7RRR(R`R,RW(((s ../info.pyR5~s    t CmdOptionscBsVeZdZdZdZdZedZedZdZ dZ RS(sqSubclass of DataObject to contain the information needed to run set-publisher with arbitrary options. t cmd_optionscCs&tt|iti||_dS(N(RR9RtCMD_OPTIONS_LABELtoptions(R"R<((s ../info.pyRscCs"titi}|i|_|S(s,Method to create the xml cmd_options element(RR#R9R;R<R:(R"R'((s ../info.pyR(s cCs|itijS(ss Returns True if element has: - tag = cmd_options Return False otherwise. (R)R9R;(R+R'((s ../info.pyR,scCs|i}t|}|S(s2Method to create the DOC element from the xml tree(R:R9(R+R'R<Rd((s ../info.pyRWs  cCs%|idj oti|iSgS(s9Returns a list of arguments suitable for passing to PopenN(R<RtshlexR(R"((s ../info.pyt get_arg_listscCsd|ii|ifS(Ns%s: %s(t __class__R]R<(R"((s ../info.pyt__repr__s( R]R^R_R;RR(R`R,RWR>R@(((s ../info.pyR9s    (8R_RRR=RRwR tlxmlRtsolaris_install.data_objectRRtACTIONt APP_CALLBACKtCONTENTSt CPIO_ARGSR8RtIPS_ARGSt PURGE_HISTORYt REJECT_LISTtSIZER5t SVR4_ARGSRtTYPERt UPDATE_INDEXRRRaReRhRnR{RRRR@RR6RHRKRERRRRRRRR2R3R-R5R9(((s ../info.pytsh        "(D*'%z$PQ3=!%#$&$(