From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1QPGFe-0002uL-Jr for garchives@archives.gentoo.org; Wed, 25 May 2011 15:44:03 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 503C91C206; Wed, 25 May 2011 15:43:55 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id EB2A91C206 for ; Wed, 25 May 2011 15:43:54 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 40CDB1B4036 for ; Wed, 25 May 2011 15:43:54 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id A7B3080505 for ; Wed, 25 May 2011 15:43:53 +0000 (UTC) From: "Brian Dolbec" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Brian Dolbec" Message-ID: <741125d7a5d1c96e9b848425284650753066bd31.dol-sen@gentoo> Subject: [gentoo-commits] proj/portage:public_api commit in: pym/portage/api/ X-VCS-Repository: proj/portage X-VCS-Files: pym/portage/api/data_connect.py X-VCS-Directories: pym/portage/api/ X-VCS-Committer: dol-sen X-VCS-Committer-Name: Brian Dolbec X-VCS-Revision: 741125d7a5d1c96e9b848425284650753066bd31 Date: Wed, 25 May 2011 15:43:53 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: X-Archives-Hash: e15ad907171d589063ee4fd502bfd187 commit: 741125d7a5d1c96e9b848425284650753066bd31 Author: dol-sen gmail com> AuthorDate: Wed May 25 15:43:16 2011 +0000 Commit: Brian Dolbec gmail com> CommitDate: Wed May 25 15:43:16 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/portage.git;a= =3Dcommit;h=3D741125d7 Add new functions, fix xmatch calls parameters --- pym/portage/api/data_connect.py | 209 +++++++++++++++++++++------------= ------ 1 files changed, 112 insertions(+), 97 deletions(-) diff --git a/pym/portage/api/data_connect.py b/pym/portage/api/data_conne= ct.py index 02634b9..5c73632 100644 --- a/pym/portage/api/data_connect.py +++ b/pym/portage/api/data_connect.py @@ -17,10 +17,18 @@ from portage.api.properties import Properties from portage.util import writemsg_level, grabfile =20 =20 -def get_path(cpv, file=3DNone, vardb=3DTrue, root=3DNone, settings=3Ddef= ault_settings): - """Returns a path to the specified category/package-version in=20 +def ensure_settings(root, settings): + if settings is None: + settings =3D default_settings + if root is None: + root =3D settings.settings["ROOT"] + return root, settings + + +def get_path(cpv, file=3DNone, vardb=3DTrue, root=3DNone, settings=3DNon= e): + """Returns a path to the specified category/package-version in either the vardb or portdb -=09 + @type cpv: string @param cpv: 'cat/pkg-ver' @type file: string @@ -33,8 +41,7 @@ def get_path(cpv, file=3DNone, vardb=3DTrue, root=3DNon= e, settings=3Ddefault_settings): @rtype string @return '/path/to/file' """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) if vardb: return settings.vardb[root].getpath(cpv, file) else: @@ -57,7 +64,7 @@ def xmatch(root, settings, *args, **kwargs): gnome-base/control-center ebuilds for gnome-base/control-= center control-center ebuilds for gnome-base/control-= center >=3Dgnome-base/control-center-2.8.2 only ebuilds with version >=3D= 2.8.2 -=09 + @type root: string @param root: tree root to use @param settings: portage config settings instance. @@ -70,9 +77,9 @@ def xmatch(root, settings, *args, **kwargs): return results =20 =20 -def get_versions(cp, include_masked=3DTrue, root=3DNone, settings=3Ddefa= ult_settings): +def get_versions(cp, include_masked=3DTrue, root=3DNone, settings=3DNone= ): """Returns all available ebuilds for the package -=09 + @type cp: string @param cp: 'cat/pkg' @type root: string @@ -82,20 +89,19 @@ def get_versions(cp, include_masked=3DTrue, root=3DNo= ne, settings=3Ddefault_settings): @rtype @return """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) # Note: this is slow, especially when include_masked is false criterion =3D include_masked and 'match-all' or 'match-visible' - results =3D xmatch(root, criterion, str(cp)) + results =3D xmatch(root, settings, criterion, str(cp)) #writemsg_level( - # "DATA_CONNECT: get_versions(); criterion =3D %s, package =3D %s, resu= lts =3D %s" %(str(criterion),cp,str(results)), + # "DATA_CONNECT: get_versions(); criterion =3D %s, package =3D %s, re= sults =3D %s" %(str(criterion),cp,str(results)), # level=3Dlogging.DEBUG) return results =20 =20 -def get_hard_masked(cp, root=3DNone, settings=3Ddefault_settings): +def get_hard_masked(cp, root=3DNone, settings=3DNone): """ -=09 + @type cp: string @param cp: 'cat/pkg' @type root: string @@ -105,8 +111,7 @@ def get_hard_masked(cp, root=3DNone, settings=3Ddefau= lt_settings): @rtype tuple @return (hard_masked_nocheck, hardmasked) """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) cp =3D str(cp) hardmasked =3D [] try: # newer portage @@ -114,7 +119,7 @@ def get_hard_masked(cp, root=3DNone, settings=3Ddefau= lt_settings): except KeyError: pmaskdict =3D {} for x in pmaskdict: - m =3D xmatch("match-all", x) + m =3D xmatch(root, settings, "match-all", x) for n in m: if n not in hardmasked: hardmasked.append(n) @@ -124,13 +129,13 @@ def get_hard_masked(cp, root=3DNone, settings=3Ddef= ault_settings): except KeyError: punmaskdict =3D {} for x in punmaskdict: - m =3D xmatch(root, "match-all",x) + m =3D xmatch(root, settings, "match-all",x) for n in m: while n in hardmasked: hardmasked.remove(n) return hard_masked_nocheck, hardmasked =20 =20 -def get_installed_files(cpv, root=3DNone, settings=3Ddefault_settings): +def get_installed_files(cpv, root=3DNone, settings=3DNone): """Get a list of installed files for an ebuild, assuming it has been installed. =20 @@ -142,8 +147,7 @@ def get_installed_files(cpv, root=3DNone, settings=3D= default_settings): defaults to portage.api.settings.default_settings @rtype list of strings """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) cat, pv =3D portage.versions.catsplit(cpv) db =3D portage.dblink(cat, pv, root, settings.settings, treetype=3D"vartree", @@ -156,7 +160,7 @@ def get_installed_files(cpv, root=3DNone, settings=3D= default_settings): =20 def best(versions): """returns the best version in the list of supplied versions -=09 + @type versions: list of strings @param versions: a list of cpv's @rtype str @@ -164,9 +168,9 @@ def best(versions): return portage.best(versions) =20 =20 -def get_best_ebuild(cp, root=3DNone, settings=3Ddefault_settings): +def get_best_ebuild(cp, root=3DNone, settings=3DNone): """returns the best available cpv -=09 + @type cp: string @param cp: 'cat/pkg' @type root: string @@ -175,15 +179,14 @@ def get_best_ebuild(cp, root=3DNone, settings=3Ddef= ault_settings): defaults to portage.api.settings.default_settings @rtype str """ - if root is None: - root =3D settings.settings["ROOT"] - return xmatch(root, "bestmatch-visible", cp) + root, settings =3D ensure_settings(root, settings) + return xmatch(root, settings, "bestmatch-visible", cp) =20 =20 -def get_dep_ebuild(dep, root=3DNone, settings=3Ddefault_settings): +def get_dep_ebuild(dep, root=3DNone, settings=3DNone): """Progresively checks for available ebuilds that match the dependency. returns what it finds as up to three options. -=09 + @type dep: string @param dep: a valid dependency @type root: string @@ -193,16 +196,15 @@ def get_dep_ebuild(dep, root=3DNone, settings=3Ddef= ault_settings): @rtype set @return best_ebuild, keyworded_ebuild, masked_ebuild """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) #writemsg_level("DATA_CONNECT: get_dep_ebuild(); dep =3D " + dep, level= =3Dlogging.DEBUG) best_ebuild =3D keyworded_ebuild =3D masked_ebuild =3D '' - best_ebuild =3D xmatch(root, "bestmatch-visible", dep) + best_ebuild =3D xmatch(root, settings, "bestmatch-visible", dep) if best_ebuild =3D=3D '': #writemsg_level("DATA_CONNECT: get_dep_ebuild(); checking masked packa= ges", level=3Dlogging.DEBUG) atomized_dep =3D Atom(dep) hardmasked_nocheck, hardmasked =3D get_hard_masked(atomized_dep.cpv) - matches =3D xmatch(root, "match-all", dep)[:] + matches =3D xmatch(root, settings, "match-all", dep)[:] masked_ebuild =3D best(matches) keyworded =3D [] for m in matches: @@ -215,22 +217,24 @@ def get_dep_ebuild(dep, root=3DNone, settings=3Ddef= ault_settings): return best_ebuild, keyworded_ebuild, masked_ebuild =20 =20 -def get_virtual_dep(atom, settings=3Ddefault_settings): +def get_virtual_dep(atom, settings=3DNone): """Returns the first (prefered) resolved virtual dependency if there is more than 1 possible resolution -=09 + @param atom: dependency string @param settings: optional portage config settings instance. defaults to portage.api.settings.default_settings @rtpye: string @return 'cat/pkg-ver' """ + if settings is None: + settings =3D default_settings return settings.settings.getvirtuals()[atom][0] =20 =20 def get_masking_status(cpv): """Gets the current masking status -=09 + @type cpv: string @param cpv: 'cat/pkg-ver' @rtype str @@ -238,13 +242,13 @@ def get_masking_status(cpv): try: status =3D portage.getmaskingstatus(cpv) except KeyError: - status =3D ['deprecated'] + status =3D ['unavailable'] return status =20 =20 -def get_masking_reason(cpv, root=3DNone, settings=3Ddefault_settings): +def get_masking_reason(cpv, root=3DNone, settings=3DNone): """Strips trailing \n from, and returns the masking reason given by por= tage -=09 + @type cpv: string @param cpv: 'cat/pkg-ver' @type root: string @@ -253,8 +257,7 @@ def get_masking_reason(cpv, root=3DNone, settings=3Dd= efault_settings): defaults to portage.api.settings.default_settings @rtype str """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) reason, location =3D portage.getmaskingreason( cpv, settings=3Dsettings.settings, portdb=3Dsettings.portdb[root], return_location=3DTrue) @@ -273,9 +276,9 @@ def get_masking_reason(cpv, root=3DNone, settings=3Dd= efault_settings): return reason =20 =20 -def get_size(cpv, formatted_string=3DTrue, root=3DNone, settings=3Ddefau= lt_settings): +def get_size(cpv, formatted_string=3DTrue, root=3DNone, settings=3DNone)= : """ Returns size of package to fetch. -=09 + @type cpv: string @param cpv: 'cat/pkg-ver' @param formatted_string: defaults to True @@ -285,8 +288,7 @@ def get_size(cpv, formatted_string=3DTrue, root=3DNon= e, settings=3Ddefault_settings): defaults to portage.api.settings.default_settings @rtype str, or int """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) #This code to calculate size of downloaded files was taken from /usr/bi= n/emerge - BB #writemsg_level( "DATA_CONNECT: get_size; cpv =3D " + cpv, level=3Dlogg= ing.DEBUG) total =3D [0,''] @@ -321,9 +323,9 @@ def get_size(cpv, formatted_string=3DTrue, root=3DNon= e, settings=3Ddefault_settings): return total[0] =20 =20 -def get_properties(cpv, want_dict=3DFalse, root=3DNone, settings=3Ddefau= lt_settings): +def get_properties(cpv, want_dict=3DFalse, root=3DNone, settings=3DNone)= : """Get all ebuild variables in one chunk. -=09 + @type cpv: string @param cpv: 'cat/pkg-ver' @type root: string @@ -333,8 +335,7 @@ def get_properties(cpv, want_dict=3DFalse, root=3DNon= e, settings=3Ddefault_settings): @rtype @return all properties of cpv """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) prop_dict =3D None if settings.portdb[root].cpv_exists(cpv): # if in portage tree try: @@ -350,14 +351,14 @@ def get_properties(cpv, want_dict=3DFalse, root=3DN= one, settings=3Ddefault_settings): if settings.vardb[root].cpv_exists(cpv): # elif in installed pkg tree prop_dict =3D dict(zip(settings.keys, settings.vardb[root].aux_get(cp= v, portage.auxdbkeys))) if want_dict: - # return an empty dict instead of None=20 + # return an empty dict instead of None return prop_dict or {} return Properties(prop_dict) =20 =20 -def is_overlay(cpv, root=3DNone, settings=3Ddefault_settings): # lifted = from gentoolkit +def is_overlay(cpv, root=3DNone, settings=3DNone): # lifted from gentool= kit """Returns true if the package is in an overlay. -=09 + @type cpv: string @param cpv: 'cat/pkg-ver' @type root: string @@ -366,8 +367,7 @@ def is_overlay(cpv, root=3DNone, settings=3Ddefault_s= ettings): # lifted from gentool defaults to portage.api.settings.default_settings @rtype bool """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) try: dir,ovl =3D settings.portdb[root].findname2(cpv) except: @@ -375,9 +375,9 @@ def is_overlay(cpv, root=3DNone, settings=3Ddefault_s= ettings): # lifted from gentool return ovl !=3D settings.portdir =20 =20 -def get_overlay(cpv, root=3DNone, settings=3Ddefault_settings): +def get_overlay(cpv, root=3DNone, settings=3DNone): """Returns a portage overlay id -=09 + @type cpv: string @param cpv: 'cat/pkg-ver' @type root: string @@ -387,8 +387,7 @@ def get_overlay(cpv, root=3DNone, settings=3Ddefault_= settings): @rtype str @return portage overlay id. or 'Deprecated? '""" - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) if '/' not in cpv: return '' try: @@ -398,9 +397,9 @@ def get_overlay(cpv, root=3DNone, settings=3Ddefault_= settings): return ovl =20 =20 -def get_overlay_name(ovl_path=3DNone, cpv=3DNone, root=3DNone, settings=3D= default_settings): +def get_overlay_name(ovl_path=3DNone, cpv=3DNone, root=3DNone, settings=3D= None): """Returns the overlay name for either the overlay path or the cpv of a= pkg -=09 + @param ovl_path: optional portage overlay path @param cpv: optional cat/pkg-ver string @type root: string @@ -409,8 +408,7 @@ def get_overlay_name(ovl_path=3DNone, cpv=3DNone, roo= t=3DNone, settings=3Ddefault_settin @param root: tree root to use @rtype str """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) if not ovl_path and cpv: ovl_path=3D get_overlay(cpv, root) name =3D None @@ -418,29 +416,27 @@ def get_overlay_name(ovl_path=3DNone, cpv=3DNone, r= oot=3DNone, settings=3Ddefault_settin return name or "????" =20 =20 -def get_repositories(root=3DNone, settings=3Ddefault_settings): +def get_repositories(root=3DNone, settings=3DNone): """Returns a list of all repositories for root @param settings: optional portage config settings instance. defaults to portage.api.settings.default_settings """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) return self.portdb[root].getRepositories() =20 =20 -def get_system_pkgs(root=3DNone, settings=3Ddefault_settings): # lifted = from gentoolkit +def get_system_pkgs(root=3DNone, settings=3DNone): # lifted from gentool= kit """Returns a tuple of lists, first list is resolved system packages, second is a list of unresolved packages. -=09 + @type root: string @param root: tree root to use @param settings: optional portage config settings instance. defaults to portage.api.settings.default_settings - @rtype: tuple=20 + @rtype: tuple @return (resolved, unresolved) pkg lists """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) pkglist =3D settings.settings.packages resolved =3D [] unresolved =3D [] @@ -457,10 +453,10 @@ def get_system_pkgs(root=3DNone, settings=3Ddefault= _settings): # lifted from gentool return (resolved, unresolved) =20 =20 -def get_allnodes(root=3DNone, settings=3Ddefault_settings): +def get_allnodes(root=3DNone, settings=3DNone): """Returns a list of all availabe cat/pkg's available from the tree and configured overlays. Subject to masking. -=09 + @type root: string @param root: tree root to use @param settings: optional portage config settings instance. @@ -468,15 +464,14 @@ def get_allnodes(root=3DNone, settings=3Ddefault_se= ttings): @rtpye: list @return: ['cat/pkg1', 'cat/pkg2',...] """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) return settings.portdb[root].cp_all() =20 =20 -def get_installed_list(root=3DNone, settings=3Ddefault_settings): +def get_installed_list(root=3DNone, settings=3DNone): """Returns a list of all installed cat/pkg-ver available from the tree and configured overlays. Subject to masking. -=09 + @type root: string @param root: tree root to use @param settings: optional portage config settings instance. @@ -484,15 +479,22 @@ def get_installed_list(root=3DNone, settings=3Ddefa= ult_settings): @rtpye: list @return: ['cat/pkg1-ver', 'cat/pkg2-ver',...] """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) return settings.vardb[root].cpv_all() =20 =20 -def get_cp_all(root=3DNone, vardb=3DFalse, categories=3DNone, trees=3DNo= ne, settings=3Ddefault_settings): +def is_installed(cpv, root=3DNone, settings=3DNone): + root, settings =3D ensure_settings(root, settings) + if settings.vardb[root].cpv_exists(cpv): + return True + return False + + +def get_cp_all(root=3DNone, vardb=3DFalse, categories=3DNone, + trees=3DNone, settings=3DNone): """ This returns a list of all keys in our tree or trees - @param categories: optional list of categories to search or=20 + @param categories: optional list of categories to search or defaults to settings.portdb.settings.categories @param trees: optional list of trees to search the categories in or defaults to settings.portdb.porttrees @@ -500,8 +502,7 @@ def get_cp_all(root=3DNone, vardb=3DFalse, categories= =3DNone, trees=3DNone, settings=3Ddef defaults to portage.api.settings.default_settings @rtype list of [cat/pkg,...] """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) if vardb: cp_all =3D settings.vardb[root].cp_all() if categories: @@ -513,26 +514,24 @@ def get_cp_all(root=3DNone, vardb=3DFalse, categori= es=3DNone, trees=3DNone, settings=3Ddef return settings.portdb[root].cp_all(categories, trees) =20 =20 -def get_cp_list(root=3DNone, cp=3DNone, trees=3DNone, settings=3Ddefault= _settings): +def get_cp_list(root=3DNone, cp=3DNone, trees=3DNone, settings=3DNone): """ @param settings: optional portage config settings instance. defaults to portage.api.settings.default_settings """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) return settings.portdb[root].cp_list(cp, trees) =20 =20 -def findLicensePath(license_name, root=3DNone, settings=3Ddefault_settin= gs): +def findLicensePath(license_name, root=3DNone, settings=3DNone): """@param settings: optional portage config settings instance. defaults to portage.api.settings.default_settings """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) return settings.portdb[root].findLicensePath(license_name) =20 =20 -def getFetchMap(pkg, useflags=3DNone, tree=3DNone, settings=3Ddefault_se= ttings): +def getFetchMap(pkg, useflags=3DNone, tree=3DNone, settings=3DNone): """ Get the SRC_URI metadata as a dict which maps each file name to a set of alternative URIs. @@ -551,26 +550,42 @@ def getFetchMap(pkg, useflags=3DNone, tree=3DNone, = settings=3Ddefault_settings): URIs. @rtype: dict """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) return settings.portdb[root].getfetchsizes(pkg, useflags, tree) =20 =20 -def getfetchsizes(pkg, useflags=3DNone, root=3DNone, settings=3Ddefault_= settings): +def getfetchsizes(pkg, useflags=3DNone, root=3DNone, settings=3DNone): """Returns a filename:size dictionnary of remaining downloads @param settings: optional portage config settings instance. defaults to portage.api.settings.default_settings """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) return settings.portdb[root].getfetchsizes(pkg, useflags) =20 =20 -def cpv_exists(cpv, root=3DNone, settings=3Ddefault_settings): +def cpv_exists(cpv, root=3DNone, settings=3DNone): """Tells us whether an actual ebuild exists on disk (no masking) @param settings: optional portage config settings instance. defaults to portage.api.settings.default_settings """ - if root is None: - root =3D settings.settings["ROOT"] + root, settings =3D ensure_settings(root, settings) return settings.portdb[root].cpv_exists(cpv) + +def get_category_description(category, root=3DNone, settings=3DNone): + + root, settings =3D ensure_settings(root, settings) + from xml.dom import minidom + data =3D {} + portdir =3D self.settings.settings['PORTDIR'] + myfile =3D os.path.join(portdir, category, "metadata.xml") + if os.access(myfile, os.R_OK) and os.path.isfile(myfile): + doc =3D minidom.parse(myfile) + longdescs =3D doc.getElementsByTagName("longdescription") + for longdesc in longdescs: + data[longdesc.getAttribute("lang").strip()] =3D \ + ' '.join([x.strip() for x in \ + longdesc.firstChild.data.strip().split("\n")]) + + # Only return in plain English since Portage doesn't support i18n/l10n + return data.get('en', "No description") +