ó vGÂVc@sÌdZddlZddlmZddlmZddlZddlZddljZddl m Z ddl m Z ddl mZdZd Zd Zd „Zed d „Zd„Zed„ZdS(s DDU functions iÿÿÿÿN(tminidom(tNode(tddu_repo_object(tddu_package_object(t ddu_dev_datas/usr/dduiic Csªt|tƒ s"t|ƒdkr4tjdƒ‚nNg}xE|D]=\}}tjdt|fƒ\}}t}|dkrü|j ƒ}xo|D]d}|j dƒ} |j dƒ}| dj dƒ| d<| d|kr‘| d|kr‘t }q‘q‘Wn|r|j t||ƒƒqAtjdt||fƒ\}}|dkrb|j t||ƒƒqAtj|IJtj|ƒ‚qAWt|ƒdkr¦tjdƒ‚n|S( sBuild a list of repository objects to be used by ddu_package_lookup() Arg: ips_repo_list:a list of tuple which represent a IPS package repository each tuple has a repo name and repo url. Return: repo_obj_list: a list of ddu_repo_objects, one object per repository. Dependency: ${ddu directory}/scripts/pkg_relate.sh is$Arg is not a non-empty ips_repo_lists,%s/scripts/pkg_relate.sh list %s 2>/dev/nulls t/is"%s/scripts/pkg_relate.sh add %s %ssNo repositories found(t isinstancetlisttlent ddu_errorstRepositoryNotFoundExceptiontcommandstgetstatusoutputtABSPATHtFalset splitlinestsplittrstriptTruetappendRtsyst __stderr__tRepositoryCreatedException( t ips_repo_listt repo_obj_listt repo_nametrepo_urltstatustoutputt repo_existt split_linestsplit_lineoutputt split_output((sddu_function.pytddu_build_repo_list-s< "      tallcCswtjdtƒ\}}|dkrDtj|IJtjdƒ‚ng}dt|ƒkr¢tj dtƒ}|j dƒ}xò|D]}|j dƒd}xú|j D]ï} | j t jkrðtd| j} t| jƒjd ƒd } ntj| ƒ\}}|dkr-tj|IJtjƒ‚n|jƒ} x[| D]S} | jd ƒ}|rý|td kr“|td kr“|jtd|dd|d d|dd|dd|dd|ddd d|dd|dd|ddt| ƒƒ ƒq“q@|td kr|td krœ|jtd|dd|d d|dd|dd|dd|ddd d|dd|dd|ddt| ƒƒ ƒq“|jtd|dd|d d|dd|dd|dd|dd|d d|dd|dd|ddt| ƒƒ ƒq@|jtd|dd|d d|ddd dd d|dd|dd|d d|ddd dt| ƒƒ ƒq@Wq¨Wq…WnÑ|jd!ƒ}x¿|D]·}tjd"t|fƒ\}}|dkrtj|IJtjƒ‚n|jƒ} x[| D]S} | jd ƒ}|rÕ|td krk|td krk|jtd|dd|d d|dd|dd|dd|ddd d|dd|dd|ddt|ƒƒ ƒqkq|td kr÷|td krt|jtd|dd|d d|dd|dd|dd|ddd d|dd|dd|ddt|ƒƒ ƒqk|jtd|dd|d d|dd|dd|dd|dd|d d|dd|dd|ddt|ƒƒ ƒq|jtd|dd|d d|ddd dd d|dd|dd|d d|ddd dt|ƒƒ ƒqWq¸W|S(#sº Do a device scan. Returns either devices missing their driver, or all devices Dependency: ${ddu directory}/scripts/probe.sh ${ddu directory}/scripts/det_info.sh s%s/scripts/probe.sh initisError initializing for scanR"s%s/data/hdd.xmltcategorytprobeRt it:ttunknowntitem_idtparent_item_idt descriptionit device_idit class_codeitpci_pathit driver_namet instance_idit attach_statusit vendor_idi t device_typeit,s%s/scripts/probe.sh %s(R R R RRR tDevScanNotStarttstrRtparsetgetElementsByTagNamet childNodestnodeTypeRt TEXT_NODEtdataRRtDEVICE_PARENT_FIELDtDEVICE_DRIVER_NAME_FIELDRR(treturn_missing_onlyR3RRtdrv_listt systemxmlR#tcatelistt probehookt probedatatprobecmdt data_typet output_linestlinetcomponent_disctdevice_scan_cnditdevice_scan_index((sddu_function.pyt ddu_devscan`s0                                                                                      cCsƒt}t|ƒdkr!t}ntjdtƒ\}}|dkrbtj|IJtj ƒ‚ny(|j ƒ}|j ƒ}|j ƒ}Wnt k r©tjƒ‚nX|tkrÈd}xR|D]J} y$|t| jƒƒ7}|d7}WqÃt k r tjƒ‚qÃXqÃWtjdt||t||fƒ\}}|dkrvtjdIJtj|IJy=tddƒ} | jdƒ| jt|ƒƒ| jƒWntk r²nXtj|ƒ‚qvn®tjd t|t|fƒ\}}|dkrvtjdIJtj|IJy=tddƒ} | jdƒ| jt|ƒƒ| jƒWntk rcnXtj|ƒ‚nt|ƒdkrštj|ƒ‚n|jd ƒd } |jd ƒd} | d krWtjd | ƒ\}} |dkrvtjd| IJtj| IJyAtddƒ} | jd| ƒ| jt| ƒƒ| jƒWntk rcnXtjdƒ‚ntjd| ƒ\}}|dkr tjd| IJtj|IJyAtddƒ} | jd| ƒ| jt|ƒƒ| jƒWntk r nXtjdƒ‚ntddd| d|ddd| ddd|dtƒS| dkrtjd | ƒ\}} |dkr tjd| IJtj| IJyAtddƒ} | jd| ƒ| jt| ƒƒ| jƒWntk rúnXtjdƒ‚ntjd| ƒ\}}|dkr·tjd| IJtj|IJyAtddƒ} | jd| ƒ| jt|ƒƒ| jƒWntk r¤nXtjdƒ‚ntjj|ƒ}tjj|ƒ}tddd|d|d| d| ddd|dtƒS| dkrÙ| dkrÙtjd | ƒ\}} |dkrÔtjd| IJtj| IJyAtddƒ} | jd| ƒ| jt| ƒƒ| jƒWntk rÁnXtjd ƒ‚ntjd| ƒ\}}|dkr~tjd!| IJtj|IJyAtddƒ} | jd!| ƒ| jt|ƒƒ| jƒWntk rknXtjd"ƒ‚ntjj| ƒ}tjj| ƒ}tddd|d|d|d|ddd|dtƒS| dkrp| dkrpy4tddƒ} | jd#t|ƒƒ| jƒWntk r8nXtddddddddd|ddd|dtƒStj|ƒ‚d$S(%s¶ Lookup a package containing a device driver for a device. Dependency: ${ddu directory}/scripts/probe.sh ${ddu directory}/scripts/comp_lookup.sh /usr/bin/pkg is%s/scripts/probe.sh initR'R%sJ%s/scripts/comp_lookup.sh "%s" "%s" || %s/scripts/comp_lookup.sh "%s" "%s"s'ddu_package_lookup: comp_lookup failed.s/tmp/ddu_err.logtas@%s/scripts/comp_lookup.sh "%s" || %s/scripts/comp_lookup.sh "%s"R&itIPSs/usr/bin/cat /tmp/%s_dlink.tmpsIddu_package_lookup: Error getting package location from /tmp/%s_dlink.tmps"Error getting PKG package locations/usr/bin/cat /tmp/%s_info.tmpsKddu_package_lookup: Error getting package information from /tmp/%s_info.tmps%Error getting PKG package informationtpkg_typetPKGtpkg_namet pkg_locationtinf_linktcompatible_namet flags_64bittdevice_descriptortthird_party_from_searchtSVR4s+Error getting SVR4 package information linksError getting SVR4 package pathtUNKsError getting UNK package pathsHddu_package_lookup: Error getting package location from /tmp/%s_info.tmpsError getting UNK package infosNo proper package found for %sN(RRRR R R RRR R5tget_descriptiontget_compatible_name_stringtget_binding_name_stringtAttributeErrortDDuDevDataNotValidR6t get_repo_nametRepositorylistNotValidtopentwritetclosetIOErrortPackageNoFoundRtPackageInvalidRtostpathtbasenametdirname(tddu_dev_instancet repo_listtrepo_search_allRRRVtdevice_compatibletdevice_bindingt repo_namest repo_indextlogfilet package_typetpackage_locationtdriver_packaget driver_repotmediatlocation((sddu_function.pytddu_package_lookupsŒ                                                      c Cs{|jƒ}|dkr*tj|ƒ‚n|jƒ}|dkrTtjdƒ‚n|jƒ}|dkr“tjj|ƒ}tjj|ƒ}n|j ƒ}|rÃ|t krÃtj |ƒ‚n|dkrÎt j dtƒ\}}|dkrtj|IJtjƒ‚n'||jd ƒkr7tj|ƒ‚nt j d t|||fƒ\}}|dkrwtj|IJy0td d ƒ} | jt|ƒƒ| jƒWntk r¸nXtj|ƒ‚qwn©|dkrwt j d t||||fƒ\}}|dkrwtj|IJy0td d ƒ} | jt|ƒƒ| jƒWntk r^nXtj||ƒ‚qwndS(s­ Install the package specified by the ddu_package_object given Dependency: ${ddu directory}/scripts/pkg_relate.sh ${ddu directory}/scripts/file_check.sh RPRXtDUtP5IR'sblank locationsI%s/scripts/pkg_relate.sh list all | nawk -F" " '{ print $1 }' 2>/dev/nullis s%%s/scripts/file_check.sh IPS %s %s %ss/tmp/ddu_err.logRMs&%s/scripts/file_check.sh %s "%s" %s %sN(sPKGsSVR4RzR{(sSVR4RzR{(t get_pkg_typeR Rftget_pkg_locationt get_pkg_nameRgRhRiRjtget_third_party_from_searchRtPackageInstallNotAllowedR R R RRtRepositoryNotReadyExceptionRtInstallAreaUnaccessiblet __stdout__RaRbR6RcRdtInstallPkgFailtInstallUnkFail( tddu_package_obt root_installtinstall_third_partyRORRRQRWRRRr((sddu_function.pytddu_install_packages`                  (t__doc__R txml.domRRRgRtDDU.ddu_errorsR t DDU.ddu_repoRtDDU.ddu_packageRtDDU.ddu_devdataRR R=R>R!RRLRyRR‰(((sddu_function.pyts     3¿ ý