* [gentoo-commits] proj/portage:public_api commit in: pym/portage/api/
@ 2011-05-25 14:45 Brian Dolbec
0 siblings, 0 replies; 5+ messages in thread
From: Brian Dolbec @ 2011-05-25 14:45 UTC (permalink / raw
To: gentoo-commits
commit: 4d1521a7508c8ea86a1af8fb3628448c1b44ea4b
Author: dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Wed May 25 14:45:08 2011 +0000
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed May 25 14:45:08 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=4d1521a7
fix missing os import. Thanks, Detlev Casanova
---
pym/portage/api/settings.py | 26 +++++++++++++++-----------
1 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/pym/portage/api/settings.py b/pym/portage/api/settings.py
index 2abe750..ca81908 100644
--- a/pym/portage/api/settings.py
+++ b/pym/portage/api/settings.py
@@ -5,6 +5,7 @@
"""Portage API settings class for consumer apps."""
+import os
from _emerge.actions import load_emerge_config
import portage
@@ -15,12 +16,12 @@ class PortageSettings:
"""This class hold an instance of the portage settings as
well as some other commonly used data used in/from the api.
"""
-
+
def __init__(self, config_root=None):
# declare some globals
self.portdir = None
self.portdir_overlay = None
- self.ACCEPT_KEYWORDS = None
+ self.ACCEPT_KEYWORDS = None
self.user_config_dir = None
self._world = None
self.SystemUseFlags = None
@@ -30,24 +31,27 @@ class PortageSettings:
if config_root is None:
self.reset()
else:
-
+ self.config_root = config_root
+
def reset_use_flags(self):
"""Resets the SystemUseFlags to any new
changes to their setting.
"""
- #debug.dprint("SETTINGS: Settings.reset_use_flags();")
+ #print("SETTINGS: Settings.reset_use_flags();")
self.SystemUseFlags = self.settings["USE"].split()
- #debug.dprint("SETTINGS: Settings.reset_use_flags(); SystemUseFlags = " + str(SystemUseFlags))
+ #print("SETTINGS: Settings.reset_use_flags(); SystemUseFlags = " +
+ #str(self.SystemUseFlags))
def reset(self):
"""Reset remaining run once variables after a sync or other mods
"""
- #debug.dprint("SETTINGS: reset_globals();")
+ #print("SETTINGS: reset_globals();")
self.settings, self.trees, self.mtimedb = load_emerge_config()
self._load_dbapis()
+ self.root_config = self.trees[self.settings['ROOT']]['root_config']
self.portdir = self.settings.environ()['PORTDIR']
self.config_root = self.settings['PORTAGE_CONFIGROOT']
# is PORTDIR_OVERLAY always defined?
@@ -114,14 +118,14 @@ class PortageSettings:
"""Reloads the world file into memory for quick access
@return boolean
"""
- #debug.dprint("SETTINGS: reset_world();")
+ #print("SETTINGS: reset_world();")
world = []
try:
file = open(os.path.join(portage.root, portage.WORLD_FILE), "r")
world = file.read().split()
file.close()
except:
- #debug.dprint("SETTINGS: get_world(); Failure to locate file: '%s'" %portage.WORLD_FILE)
+ print("SETTINGS: get_world(); Failure to locate file: '%s'" %portage.WORLD_FILE)
return False
self._world = world
return True
@@ -157,12 +161,12 @@ def reload_portage():
Caution, it may not always work correctly due to python caching if
program files are added/deleted between versions. In those cases the
consumer app may need to be closed and restarted."""
- #debug.dprint('SETTINGS: reloading portage')
- #debug.dprint("SETTINGS: old portage version = " + portage.VERSION)
+ #print('SETTINGS: reloading portage')
+ #print("SETTINGS: old portage version = " + portage.VERSION)
try:
reload(portage)
except ImportError:
return False
- #debug.dprint("SETTINGS: new portage version = " + portage.VERSION)
+ #print("SETTINGS: new portage version = " + portage.VERSION)
settings.reset()
return True
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [gentoo-commits] proj/portage:public_api commit in: pym/portage/api/
@ 2011-05-25 15:43 Brian Dolbec
0 siblings, 0 replies; 5+ messages in thread
From: Brian Dolbec @ 2011-05-25 15:43 UTC (permalink / raw
To: gentoo-commits
commit: 741125d7a5d1c96e9b848425284650753066bd31
Author: dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Wed May 25 15:43:16 2011 +0000
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed May 25 15:43:16 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=741125d7
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_connect.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
-def get_path(cpv, file=None, vardb=True, root=None, settings=default_settings):
- """Returns a path to the specified category/package-version in
+def ensure_settings(root, settings):
+ if settings is None:
+ settings = default_settings
+ if root is None:
+ root = settings.settings["ROOT"]
+ return root, settings
+
+
+def get_path(cpv, file=None, vardb=True, root=None, settings=None):
+ """Returns a path to the specified category/package-version in
either the vardb or portdb
-
+
@type cpv: string
@param cpv: 'cat/pkg-ver'
@type file: string
@@ -33,8 +41,7 @@ def get_path(cpv, file=None, vardb=True, root=None, settings=default_settings):
@rtype string
@return '/path/to/file'
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = 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
>=gnome-base/control-center-2.8.2 only ebuilds with version >= 2.8.2
-
+
@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
-def get_versions(cp, include_masked=True, root=None, settings=default_settings):
+def get_versions(cp, include_masked=True, root=None, settings=None):
"""Returns all available ebuilds for the package
-
+
@type cp: string
@param cp: 'cat/pkg'
@type root: string
@@ -82,20 +89,19 @@ def get_versions(cp, include_masked=True, root=None, settings=default_settings):
@rtype
@return
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
# Note: this is slow, especially when include_masked is false
criterion = include_masked and 'match-all' or 'match-visible'
- results = xmatch(root, criterion, str(cp))
+ results = xmatch(root, settings, criterion, str(cp))
#writemsg_level(
- # "DATA_CONNECT: get_versions(); criterion = %s, package = %s, results = %s" %(str(criterion),cp,str(results)),
+ # "DATA_CONNECT: get_versions(); criterion = %s, package = %s, results = %s" %(str(criterion),cp,str(results)),
# level=logging.DEBUG)
return results
-def get_hard_masked(cp, root=None, settings=default_settings):
+def get_hard_masked(cp, root=None, settings=None):
"""
-
+
@type cp: string
@param cp: 'cat/pkg'
@type root: string
@@ -105,8 +111,7 @@ def get_hard_masked(cp, root=None, settings=default_settings):
@rtype tuple
@return (hard_masked_nocheck, hardmasked)
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
cp = str(cp)
hardmasked = []
try: # newer portage
@@ -114,7 +119,7 @@ def get_hard_masked(cp, root=None, settings=default_settings):
except KeyError:
pmaskdict = {}
for x in pmaskdict:
- m = xmatch("match-all", x)
+ m = 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=None, settings=default_settings):
except KeyError:
punmaskdict = {}
for x in punmaskdict:
- m = xmatch(root, "match-all",x)
+ m = xmatch(root, settings, "match-all",x)
for n in m:
while n in hardmasked: hardmasked.remove(n)
return hard_masked_nocheck, hardmasked
-def get_installed_files(cpv, root=None, settings=default_settings):
+def get_installed_files(cpv, root=None, settings=None):
"""Get a list of installed files for an ebuild, assuming it has
been installed.
@@ -142,8 +147,7 @@ def get_installed_files(cpv, root=None, settings=default_settings):
defaults to portage.api.settings.default_settings
@rtype list of strings
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
cat, pv = portage.versions.catsplit(cpv)
db = portage.dblink(cat, pv, root,
settings.settings, treetype="vartree",
@@ -156,7 +160,7 @@ def get_installed_files(cpv, root=None, settings=default_settings):
def best(versions):
"""returns the best version in the list of supplied versions
-
+
@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)
-def get_best_ebuild(cp, root=None, settings=default_settings):
+def get_best_ebuild(cp, root=None, settings=None):
"""returns the best available cpv
-
+
@type cp: string
@param cp: 'cat/pkg'
@type root: string
@@ -175,15 +179,14 @@ def get_best_ebuild(cp, root=None, settings=default_settings):
defaults to portage.api.settings.default_settings
@rtype str
"""
- if root is None:
- root = settings.settings["ROOT"]
- return xmatch(root, "bestmatch-visible", cp)
+ root, settings = ensure_settings(root, settings)
+ return xmatch(root, settings, "bestmatch-visible", cp)
-def get_dep_ebuild(dep, root=None, settings=default_settings):
+def get_dep_ebuild(dep, root=None, settings=None):
"""Progresively checks for available ebuilds that match the dependency.
returns what it finds as up to three options.
-
+
@type dep: string
@param dep: a valid dependency
@type root: string
@@ -193,16 +196,15 @@ def get_dep_ebuild(dep, root=None, settings=default_settings):
@rtype set
@return best_ebuild, keyworded_ebuild, masked_ebuild
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
#writemsg_level("DATA_CONNECT: get_dep_ebuild(); dep = " + dep, level=logging.DEBUG)
best_ebuild = keyworded_ebuild = masked_ebuild = ''
- best_ebuild = xmatch(root, "bestmatch-visible", dep)
+ best_ebuild = xmatch(root, settings, "bestmatch-visible", dep)
if best_ebuild == '':
#writemsg_level("DATA_CONNECT: get_dep_ebuild(); checking masked packages", level=logging.DEBUG)
atomized_dep = Atom(dep)
hardmasked_nocheck, hardmasked = get_hard_masked(atomized_dep.cpv)
- matches = xmatch(root, "match-all", dep)[:]
+ matches = xmatch(root, settings, "match-all", dep)[:]
masked_ebuild = best(matches)
keyworded = []
for m in matches:
@@ -215,22 +217,24 @@ def get_dep_ebuild(dep, root=None, settings=default_settings):
return best_ebuild, keyworded_ebuild, masked_ebuild
-def get_virtual_dep(atom, settings=default_settings):
+def get_virtual_dep(atom, settings=None):
"""Returns the first (prefered) resolved virtual dependency
if there is more than 1 possible resolution
-
+
@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 = default_settings
return settings.settings.getvirtuals()[atom][0]
def get_masking_status(cpv):
"""Gets the current masking status
-
+
@type cpv: string
@param cpv: 'cat/pkg-ver'
@rtype str
@@ -238,13 +242,13 @@ def get_masking_status(cpv):
try:
status = portage.getmaskingstatus(cpv)
except KeyError:
- status = ['deprecated']
+ status = ['unavailable']
return status
-def get_masking_reason(cpv, root=None, settings=default_settings):
+def get_masking_reason(cpv, root=None, settings=None):
"""Strips trailing \n from, and returns the masking reason given by portage
-
+
@type cpv: string
@param cpv: 'cat/pkg-ver'
@type root: string
@@ -253,8 +257,7 @@ def get_masking_reason(cpv, root=None, settings=default_settings):
defaults to portage.api.settings.default_settings
@rtype str
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
reason, location = portage.getmaskingreason(
cpv, settings=settings.settings, portdb=settings.portdb[root],
return_location=True)
@@ -273,9 +276,9 @@ def get_masking_reason(cpv, root=None, settings=default_settings):
return reason
-def get_size(cpv, formatted_string=True, root=None, settings=default_settings):
+def get_size(cpv, formatted_string=True, root=None, settings=None):
""" Returns size of package to fetch.
-
+
@type cpv: string
@param cpv: 'cat/pkg-ver'
@param formatted_string: defaults to True
@@ -285,8 +288,7 @@ def get_size(cpv, formatted_string=True, root=None, settings=default_settings):
defaults to portage.api.settings.default_settings
@rtype str, or int
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
#This code to calculate size of downloaded files was taken from /usr/bin/emerge - BB
#writemsg_level( "DATA_CONNECT: get_size; cpv = " + cpv, level=logging.DEBUG)
total = [0,'']
@@ -321,9 +323,9 @@ def get_size(cpv, formatted_string=True, root=None, settings=default_settings):
return total[0]
-def get_properties(cpv, want_dict=False, root=None, settings=default_settings):
+def get_properties(cpv, want_dict=False, root=None, settings=None):
"""Get all ebuild variables in one chunk.
-
+
@type cpv: string
@param cpv: 'cat/pkg-ver'
@type root: string
@@ -333,8 +335,7 @@ def get_properties(cpv, want_dict=False, root=None, settings=default_settings):
@rtype
@return all properties of cpv
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
prop_dict = None
if settings.portdb[root].cpv_exists(cpv): # if in portage tree
try:
@@ -350,14 +351,14 @@ def get_properties(cpv, want_dict=False, root=None, settings=default_settings):
if settings.vardb[root].cpv_exists(cpv): # elif in installed pkg tree
prop_dict = dict(zip(settings.keys, settings.vardb[root].aux_get(cpv, portage.auxdbkeys)))
if want_dict:
- # return an empty dict instead of None
+ # return an empty dict instead of None
return prop_dict or {}
return Properties(prop_dict)
-def is_overlay(cpv, root=None, settings=default_settings): # lifted from gentoolkit
+def is_overlay(cpv, root=None, settings=None): # lifted from gentoolkit
"""Returns true if the package is in an overlay.
-
+
@type cpv: string
@param cpv: 'cat/pkg-ver'
@type root: string
@@ -366,8 +367,7 @@ def is_overlay(cpv, root=None, settings=default_settings): # lifted from gentool
defaults to portage.api.settings.default_settings
@rtype bool
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
try:
dir,ovl = settings.portdb[root].findname2(cpv)
except:
@@ -375,9 +375,9 @@ def is_overlay(cpv, root=None, settings=default_settings): # lifted from gentool
return ovl != settings.portdir
-def get_overlay(cpv, root=None, settings=default_settings):
+def get_overlay(cpv, root=None, settings=None):
"""Returns a portage overlay id
-
+
@type cpv: string
@param cpv: 'cat/pkg-ver'
@type root: string
@@ -387,8 +387,7 @@ def get_overlay(cpv, root=None, settings=default_settings):
@rtype str
@return portage overlay id. or 'Deprecated?
'"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
if '/' not in cpv:
return ''
try:
@@ -398,9 +397,9 @@ def get_overlay(cpv, root=None, settings=default_settings):
return ovl
-def get_overlay_name(ovl_path=None, cpv=None, root=None, settings=default_settings):
+def get_overlay_name(ovl_path=None, cpv=None, root=None, settings=None):
"""Returns the overlay name for either the overlay path or the cpv of a pkg
-
+
@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=None, cpv=None, root=None, settings=default_settin
@param root: tree root to use
@rtype str
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
if not ovl_path and cpv:
ovl_path= get_overlay(cpv, root)
name = None
@@ -418,29 +416,27 @@ def get_overlay_name(ovl_path=None, cpv=None, root=None, settings=default_settin
return name or "????"
-def get_repositories(root=None, settings=default_settings):
+def get_repositories(root=None, settings=None):
"""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 = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
return self.portdb[root].getRepositories()
-def get_system_pkgs(root=None, settings=default_settings): # lifted from gentoolkit
+def get_system_pkgs(root=None, settings=None): # lifted from gentoolkit
"""Returns a tuple of lists, first list is resolved system packages,
second is a list of unresolved packages.
-
+
@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
+ @rtype: tuple
@return (resolved, unresolved) pkg lists
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
pkglist = settings.settings.packages
resolved = []
unresolved = []
@@ -457,10 +453,10 @@ def get_system_pkgs(root=None, settings=default_settings): # lifted from gentool
return (resolved, unresolved)
-def get_allnodes(root=None, settings=default_settings):
+def get_allnodes(root=None, settings=None):
"""Returns a list of all availabe cat/pkg's available from the tree
and configured overlays. Subject to masking.
-
+
@type root: string
@param root: tree root to use
@param settings: optional portage config settings instance.
@@ -468,15 +464,14 @@ def get_allnodes(root=None, settings=default_settings):
@rtpye: list
@return: ['cat/pkg1', 'cat/pkg2',...]
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
return settings.portdb[root].cp_all()
-def get_installed_list(root=None, settings=default_settings):
+def get_installed_list(root=None, settings=None):
"""Returns a list of all installed cat/pkg-ver available from the tree
and configured overlays. Subject to masking.
-
+
@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=None, settings=default_settings):
@rtpye: list
@return: ['cat/pkg1-ver', 'cat/pkg2-ver',...]
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
return settings.vardb[root].cpv_all()
-def get_cp_all(root=None, vardb=False, categories=None, trees=None, settings=default_settings):
+def is_installed(cpv, root=None, settings=None):
+ root, settings = ensure_settings(root, settings)
+ if settings.vardb[root].cpv_exists(cpv):
+ return True
+ return False
+
+
+def get_cp_all(root=None, vardb=False, categories=None,
+ trees=None, settings=None):
"""
This returns a list of all keys in our tree or trees
- @param categories: optional list of categories to search or
+ @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=None, vardb=False, categories=None, trees=None, settings=def
defaults to portage.api.settings.default_settings
@rtype list of [cat/pkg,...]
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
if vardb:
cp_all = settings.vardb[root].cp_all()
if categories:
@@ -513,26 +514,24 @@ def get_cp_all(root=None, vardb=False, categories=None, trees=None, settings=def
return settings.portdb[root].cp_all(categories, trees)
-def get_cp_list(root=None, cp=None, trees=None, settings=default_settings):
+def get_cp_list(root=None, cp=None, trees=None, settings=None):
"""
@param settings: optional portage config settings instance.
defaults to portage.api.settings.default_settings
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
return settings.portdb[root].cp_list(cp, trees)
-def findLicensePath(license_name, root=None, settings=default_settings):
+def findLicensePath(license_name, root=None, settings=None):
"""@param settings: optional portage config settings instance.
defaults to portage.api.settings.default_settings
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
return settings.portdb[root].findLicensePath(license_name)
-def getFetchMap(pkg, useflags=None, tree=None, settings=default_settings):
+def getFetchMap(pkg, useflags=None, tree=None, settings=None):
"""
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=None, tree=None, settings=default_settings):
URIs.
@rtype: dict
"""
- if root is None:
- root = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
return settings.portdb[root].getfetchsizes(pkg, useflags, tree)
-def getfetchsizes(pkg, useflags=None, root=None, settings=default_settings):
+def getfetchsizes(pkg, useflags=None, root=None, settings=None):
"""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 = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
return settings.portdb[root].getfetchsizes(pkg, useflags)
-def cpv_exists(cpv, root=None, settings=default_settings):
+def cpv_exists(cpv, root=None, settings=None):
"""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 = settings.settings["ROOT"]
+ root, settings = ensure_settings(root, settings)
return settings.portdb[root].cpv_exists(cpv)
+
+def get_category_description(category, root=None, settings=None):
+
+ root, settings = ensure_settings(root, settings)
+ from xml.dom import minidom
+ data = {}
+ portdir = self.settings.settings['PORTDIR']
+ myfile = os.path.join(portdir, category, "metadata.xml")
+ if os.access(myfile, os.R_OK) and os.path.isfile(myfile):
+ doc = minidom.parse(myfile)
+ longdescs = doc.getElementsByTagName("longdescription")
+ for longdesc in longdescs:
+ data[longdesc.getAttribute("lang").strip()] = \
+ ' '.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")
+
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [gentoo-commits] proj/portage:public_api commit in: pym/portage/api/
@ 2011-05-28 6:53 Brian Dolbec
0 siblings, 0 replies; 5+ messages in thread
From: Brian Dolbec @ 2011-05-28 6:53 UTC (permalink / raw
To: gentoo-commits
commit: bf010663bec6dacc9b2a0891a329a16df0abf5c4
Author: dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Thu May 26 03:11:46 2011 +0000
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Thu May 26 03:11:46 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=bf010663
filter dupe'd USE flags.
---
pym/portage/api/properties.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/pym/portage/api/properties.py b/pym/portage/api/properties.py
index e292ec7..b885505 100644
--- a/pym/portage/api/properties.py
+++ b/pym/portage/api/properties.py
@@ -45,7 +45,7 @@ class Properties(object):
def get_use_flags(self):
"""Returns a list of strings."""
- return self.iuse.split()
+ return list(set(self.iuse.split()))
def get_homepages(self):
"""Returns a list of strings."""
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [gentoo-commits] proj/portage:public_api commit in: pym/portage/api/
@ 2011-05-28 6:53 Brian Dolbec
0 siblings, 0 replies; 5+ messages in thread
From: Brian Dolbec @ 2011-05-28 6:53 UTC (permalink / raw
To: gentoo-commits
commit: 7f1c35149aa401e83828e27716d35c3ec2b13108
Author: dol-sen <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Sat May 28 06:52:42 2011 +0000
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Sat May 28 06:52:42 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=7f1c3514
code cleanup, remove defunct fundtion(). Use set() to remove duplicate IUSE entries.
Signed-off-by: dol-sen <brian.dolbec <AT> gmail.com>
---
pym/portage/api/data_connect.py | 993 ++++++++++++++++++++-------------------
pym/portage/api/flag.py | 60 ++-
pym/portage/api/properties.py | 8 +-
pym/portage/api/settings.py | 57 +--
4 files changed, 566 insertions(+), 552 deletions(-)
diff --git a/pym/portage/api/data_connect.py b/pym/portage/api/data_connect.py
index 5c73632..cb41ce0 100644
--- a/pym/portage/api/data_connect.py
+++ b/pym/portage/api/data_connect.py
@@ -6,586 +6,609 @@
"""Portage API data connection for consumer apps. """
import os.path
+import logging
import portage
from portage import pkgsplit
from portage.api.settings import default_settings
from portage.dep import Atom
-from portage import manifest
+from portage import manifest #, catpkgsplit
from portage.api.flag import get_flags
from portage.api.properties import Properties
-from portage.util import writemsg_level, grabfile
+from portage.util import writemsg_level #, grabfile
def ensure_settings(root, settings):
- if settings is None:
- settings = default_settings
- if root is None:
- root = settings.settings["ROOT"]
- return root, settings
+ """Internal function to check that root and settings
+ are not None and if so, then return their default values"""
+ if settings is None:
+ settings = default_settings
+ if root is None:
+ root = settings.settings["ROOT"]
+ return root, settings
def get_path(cpv, file=None, vardb=True, root=None, settings=None):
- """Returns a path to the specified category/package-version in
- either the vardb or portdb
-
- @type cpv: string
- @param cpv: 'cat/pkg-ver'
- @type file: string
- @param file:
- @param vardb: bool, defaults to True
- @type root: string
- @param root: tree root to use
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- @rtype string
- @return '/path/to/file'
- """
- root, settings = ensure_settings(root, settings)
- if vardb:
- return settings.vardb[root].getpath(cpv, file)
- else:
- if '/' not in cpv:
- return ''
- try:
- dir,ovl = settings.portdb[root].findname2(cpv)
- except:
- dir = ''
- return dir
+ """Returns a path to the specified category/package-version in
+ either the vardb or portdb
+
+ @type cpv: string
+ @param cpv: 'cat/pkg-ver'
+ @type file: string
+ @param file:
+ @param vardb: bool, defaults to True
+ @type root: string
+ @param root: tree root to use
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @rtype string
+ @return '/path/to/file'
+ """
+ root, settings = ensure_settings(root, settings)
+ if vardb:
+ return settings.vardb[root].getpath(cpv, file)
+ else:
+ if '/' not in cpv:
+ return ''
+ try:
+ dir, ovl = settings.portdb[root].findname2(cpv)
+ except:
+ dir = ''
+ return dir
def xmatch(root, settings, *args, **kwargs):
- """Pass arguments on to portage's caching match function.
- xmatch('match-all',package-name) returns all ebuilds of <package-name> in a list,
- xmatch('match-visible',package-name) returns non-masked ebuilds,
- xmatch('match-list',package-name,mylist=list) checks for <package-name> in <list>
- There are more possible arguments.
- package-name may be, for example:
- gnome-base/control-center ebuilds for gnome-base/control-center
- control-center ebuilds for gnome-base/control-center
- >=gnome-base/control-center-2.8.2 only ebuilds with version >= 2.8.2
-
- @type root: string
- @param root: tree root to use
- @param settings: portage config settings instance.
- @param args: The arument to pass to the dbapi.xmatch()
- @param kwargs: the extra arguments to pass to dbapi.xmatch()
- @rtype list
- @return: list of matches
- """
- results = settings.portdb[root].xmatch(*args, **kwargs)
- return results
+ """Pass arguments on to portage's caching match function.
+ xmatch('match-all',package-name) returns all ebuilds of <package-name> in a list,
+ xmatch('match-visible',package-name) returns non-masked ebuilds,
+ xmatch('match-list',package-name,mylist=list) checks for <package-name> in <list>
+ There are more possible arguments.
+ package-name may be, for example:
+ gnome-base/control-center ebuilds for gnome-base/control-center
+ control-center ebuilds for gnome-base/control-center
+ >=gnome-base/control-center-2.8.2 only ebuilds with version >= 2.8.2
+
+ @type root: string
+ @param root: tree root to use
+ @param settings: portage config settings instance.
+ @param args: The arument to pass to the dbapi.xmatch()
+ @param kwargs: the extra arguments to pass to dbapi.xmatch()
+ @rtype list
+ @return: list of matches
+ """
+ results = settings.portdb[root].xmatch(*args, **kwargs)
+ return results
def get_versions(cp, include_masked=True, root=None, settings=None):
- """Returns all available ebuilds for the package
-
- @type cp: string
- @param cp: 'cat/pkg'
- @type root: string
- @param root: tree root to use
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- @rtype
- @return
- """
- root, settings = ensure_settings(root, settings)
- # Note: this is slow, especially when include_masked is false
- criterion = include_masked and 'match-all' or 'match-visible'
- results = xmatch(root, settings, criterion, str(cp))
- #writemsg_level(
- # "DATA_CONNECT: get_versions(); criterion = %s, package = %s, results = %s" %(str(criterion),cp,str(results)),
- # level=logging.DEBUG)
- return results
+ """Returns all available ebuilds for the package
+
+ @type cp: string
+ @param cp: 'cat/pkg'
+ @type root: string
+ @param root: tree root to use
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @rtype
+ @return
+ """
+ root, settings = ensure_settings(root, settings)
+ # Note: this is slow, especially when include_masked is false
+ criterion = include_masked and 'match-all' or 'match-visible'
+ results = xmatch(root, settings, criterion, str(cp))
+ #writemsg_level("DATA_CONNECT: get_versions(); criterion = %s,
+ #package = %s, results = %s" %(str(criterion),cp,str(results)),
+ #level=logging.DEBUG)
+ return results
def get_hard_masked(cp, root=None, settings=None):
- """
-
- @type cp: string
- @param cp: 'cat/pkg'
- @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
- @return (hard_masked_nocheck, hardmasked)
- """
- root, settings = ensure_settings(root, settings)
- cp = str(cp)
- hardmasked = []
- try: # newer portage
- pmaskdict = settings.portdb[root].settings.pmaskdict[cp]
- except KeyError:
- pmaskdict = {}
- for x in pmaskdict:
- m = xmatch(root, settings, "match-all", x)
- for n in m:
- if n not in hardmasked:
- hardmasked.append(n)
- hard_masked_nocheck = hardmasked[:]
- try: # newer portage
- punmaskdict = settings.portdb[root].settings.punmaskdict[cp]
- except KeyError:
- punmaskdict = {}
- for x in punmaskdict:
- m = xmatch(root, settings, "match-all",x)
- for n in m:
- while n in hardmasked: hardmasked.remove(n)
- return hard_masked_nocheck, hardmasked
+ """
+
+ @type cp: string
+ @param cp: 'cat/pkg'
+ @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
+ @return (hard_masked_nocheck, hardmasked)
+ """
+ root, settings = ensure_settings(root, settings)
+ cp = str(cp)
+ hardmasked = []
+ try: # newer portage
+ pmaskdict = settings.portdb[root].settings.pmaskdict[cp]
+ except KeyError:
+ pmaskdict = {}
+ for x in pmaskdict:
+ m = xmatch(root, settings, "match-all", x)
+ for n in m:
+ if n not in hardmasked:
+ hardmasked.append(n)
+ hard_masked_nocheck = hardmasked[:]
+ try: # newer portage
+ punmaskdict = settings.portdb[root].settings.punmaskdict[cp]
+ except KeyError:
+ punmaskdict = {}
+ for x in punmaskdict:
+ m = xmatch(root, settings, "match-all", x)
+ for n in m:
+ while n in hardmasked: hardmasked.remove(n)
+ return hard_masked_nocheck, hardmasked
def get_installed_files(cpv, root=None, settings=None):
- """Get a list of installed files for an ebuild, assuming it has
- been installed.
-
- @type cpv: string
- @param cpv: 'cat/pkg-ver'
- @type root: string
- @param root: tree root to use
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- @rtype list of strings
- """
- root, settings = ensure_settings(root, settings)
- cat, pv = portage.versions.catsplit(cpv)
- db = portage.dblink(cat, pv, root,
- settings.settings, treetype="vartree",
- vartree=settings.vardb[root])
- contents = db.getcontents()
- if not contents:
- return ["None"]
- return sorted(contents)
+ """Get a list of installed files for an ebuild, assuming it has
+ been installed.
+
+ @type cpv: string
+ @param cpv: 'cat/pkg-ver'
+ @type root: string
+ @param root: tree root to use
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @rtype list of strings
+ """
+ root, settings = ensure_settings(root, settings)
+ cat, pv = portage.versions.catsplit(cpv)
+ db = portage.dblink(cat, pv, root,
+ settings.settings, treetype="vartree",
+ vartree=settings.vardb[root])
+ contents = db.getcontents()
+ if not contents:
+ return ["None"]
+ return sorted(contents)
def best(versions):
- """returns the best version in the list of supplied versions
+ """returns the best version in the list of supplied versions
- @type versions: list of strings
- @param versions: a list of cpv's
- @rtype str
- """
- return portage.best(versions)
+ @type versions: list of strings
+ @param versions: a list of cpv's
+ @rtype str
+ """
+ return portage.best(versions)
def get_best_ebuild(cp, root=None, settings=None):
- """returns the best available cpv
+ """returns the best available cpv
- @type cp: string
- @param cp: 'cat/pkg'
- @type root: string
- @param root: tree root to use
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- @rtype str
- """
- root, settings = ensure_settings(root, settings)
- return xmatch(root, settings, "bestmatch-visible", cp)
+ @type cp: string
+ @param cp: 'cat/pkg'
+ @type root: string
+ @param root: tree root to use
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @rtype str
+ """
+ root, settings = ensure_settings(root, settings)
+ return xmatch(root, settings, "bestmatch-visible", cp)
def get_dep_ebuild(dep, root=None, settings=None):
- """Progresively checks for available ebuilds that match the dependency.
- returns what it finds as up to three options.
-
- @type dep: string
- @param dep: a valid dependency
- @type root: string
- @param root: tree root to use
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- @rtype set
- @return best_ebuild, keyworded_ebuild, masked_ebuild
- """
- root, settings = ensure_settings(root, settings)
- #writemsg_level("DATA_CONNECT: get_dep_ebuild(); dep = " + dep, level=logging.DEBUG)
- best_ebuild = keyworded_ebuild = masked_ebuild = ''
- best_ebuild = xmatch(root, settings, "bestmatch-visible", dep)
- if best_ebuild == '':
- #writemsg_level("DATA_CONNECT: get_dep_ebuild(); checking masked packages", level=logging.DEBUG)
- atomized_dep = Atom(dep)
- hardmasked_nocheck, hardmasked = get_hard_masked(atomized_dep.cpv)
- matches = xmatch(root, settings, "match-all", dep)[:]
- masked_ebuild = best(matches)
- keyworded = []
- for m in matches:
- if m not in hardmasked:
- keyworded.append(m)
- keyworded_ebuild = best(keyworded)
- #writemsg_level(
- #"DATA_CONNECT: get_dep_ebuild(); ebuilds = " + str([best_ebuild, keyworded_ebuild, masked_ebuild]),
- #level=logging.DEBUG)
- return best_ebuild, keyworded_ebuild, masked_ebuild
+ """Progresively checks for available ebuilds that match the dependency.
+ returns what it finds as up to three options.
+
+ @type dep: string
+ @param dep: a valid dependency
+ @type root: string
+ @param root: tree root to use
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @rtype set
+ @return best_ebuild, keyworded_ebuild, masked_ebuild
+ """
+ root, settings = ensure_settings(root, settings)
+ #writemsg_level("DATA_CONNECT: get_dep_ebuild(); dep = " + \
+ #dep, level=logging.DEBUG)
+ best_ebuild = keyworded_ebuild = masked_ebuild = ''
+ best_ebuild = xmatch(root, settings, "bestmatch-visible", dep)
+ if best_ebuild == '':
+ #writemsg_level("DATA_CONNECT: get_dep_ebuild(); "
+ #"checking masked packages", level=logging.DEBUG)
+ atomized_dep = Atom(dep)
+ hardmasked_nocheck, hardmasked = get_hard_masked(atomized_dep.cpv)
+ matches = xmatch(root, settings, "match-all", dep)[:]
+ masked_ebuild = best(matches)
+ keyworded = []
+ for m in matches:
+ if m not in hardmasked:
+ keyworded.append(m)
+ keyworded_ebuild = best(keyworded)
+ #writemsg_level("DATA_CONNECT: get_dep_ebuild(); ebuilds = " + \
+ #str([best_ebuild, keyworded_ebuild, masked_ebuild]),
+ #level=logging.DEBUG)
+ return best_ebuild, keyworded_ebuild, masked_ebuild
def get_virtual_dep(atom, settings=None):
- """Returns the first (prefered) resolved virtual dependency
- if there is more than 1 possible resolution
+ """Returns the first (prefered) resolved virtual dependency
+ if there is more than 1 possible resolution
- @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 = default_settings
- return settings.settings.getvirtuals()[atom][0]
+ @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 = default_settings
+ return settings.settings.getvirtuals()[atom][0]
def get_masking_status(cpv):
- """Gets the current masking status
+ """Gets the current masking status
- @type cpv: string
- @param cpv: 'cat/pkg-ver'
- @rtype str
- """
- try:
- status = portage.getmaskingstatus(cpv)
- except KeyError:
- status = ['unavailable']
- return status
+ @type cpv: string
+ @param cpv: 'cat/pkg-ver'
+ @rtype str
+ """
+ try:
+ status = portage.getmaskingstatus(cpv)
+ except KeyError:
+ status = ['unavailable']
+ return status
def get_masking_reason(cpv, root=None, settings=None):
- """Strips trailing \n from, and returns the masking reason given by portage
-
- @type cpv: string
- @param cpv: 'cat/pkg-ver'
- @type root: string
- @param root: tree root to use
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- @rtype str
- """
- root, settings = ensure_settings(root, settings)
- reason, location = portage.getmaskingreason(
- cpv, settings=settings.settings, portdb=settings.portdb[root],
- return_location=True)
- if not reason:
- reason = 'No masking reason given.'
- status = get_masking_status(cpv)
- if 'profile' in status:
- reason = "Masked by the current profile."
- status.remove('profile')
- if status:
- reason += " from " + ', '.join(status)
- if location != None:
- reason += "in file: " + location
- if reason.endswith("\n"):
- reason = reason[:-1]
- return reason
+ """Strips trailing \n from, and returns the masking reason given by portage
+
+ @type cpv: string
+ @param cpv: 'cat/pkg-ver'
+ @type root: string
+ @param root: tree root to use
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @rtype str
+ """
+ root, settings = ensure_settings(root, settings)
+ reason, location = portage.getmaskingreason(
+ cpv, settings=settings.settings, portdb=settings.portdb[root],
+ return_location=True)
+ if not reason:
+ reason = 'No masking reason given.'
+ status = get_masking_status(cpv)
+ if 'profile' in status:
+ reason = "Masked by the current profile."
+ status.remove('profile')
+ if status:
+ reason += " from " + ', '.join(status)
+ if location != None:
+ reason += "in file: " + location
+ if reason.endswith("\n"):
+ reason = reason[:-1]
+ return reason
def get_size(cpv, formatted_string=True, root=None, settings=None):
- """ Returns size of package to fetch.
-
- @type cpv: string
- @param cpv: 'cat/pkg-ver'
- @param formatted_string: defaults to True
- @type root: string
- @param root: tree root to use
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- @rtype str, or int
- """
- root, settings = ensure_settings(root, settings)
- #This code to calculate size of downloaded files was taken from /usr/bin/emerge - BB
- #writemsg_level( "DATA_CONNECT: get_size; cpv = " + cpv, level=logging.DEBUG)
- total = [0,'']
- ebuild = settings.portdb[root].findname(cpv)
- pkgdir = os.path.dirname(ebuild)
- mf = manifest.Manifest(pkgdir, settings.settings["DISTDIR"])
- iuse, final_use = get_flags(cpv, final_setting=True, root=root, settings=default_settings)
- #writemsg_level( "DATA_CONNECT: get_size; Attempting to get fetchlist final use= " + str(final_use),
- #level=logging.DEBUG)
- try:
- fetchlist = settings.portdb[root].getFetchMap(cpv, set(final_use))
- #writemsg_level( "DATA_CONNECT: get_size; fetchlist= " +str(fetchlist), level=logging.DEBUG)
- #writemsg_level( "DATA_CONNECT: get_size; mf.getDistfilesSize()", level=logging.DEBUG)
- total[0] = mf.getDistfilesSize(fetchlist)
- if formatted_string:
- total_str = str(total[0]/1024)
- #writemsg_level( "DATA_CONNECT: get_size; total_str = " + total_str, level=logging.DEBUG)
- count=len(total_str)
- while (count > 3):
- count-=3
- total_str=total_str[:count]+","+total_str[count:]
- total[1]=total_str+" kB"
- except KeyError, e:
- total[1] = "Unknown (missing digest)"
- total[0] = 0
- #writemsg_level( "DATA_CONNECT: get_size; Exception: " + str(e), level=logging.DEBUG)
- #writemsg_level( "DATA_CONNECT: get_size; cpv: " + str(cpv), level=logging.DEBUG)
- #writemsg_level( "DATA_CONNECT: get_size; fetchlist = " + str(fetchlist), level=logging.DEBUG)
- #writemsg_level( "DATA_CONNECT: get_size; returning total[1] = " + total[1], level=logging.DEBUG)
- if formatted_string:
- return total[1]
- return total[0]
+ """ Returns size of package to fetch.
+
+ @type cpv: string
+ @param cpv: 'cat/pkg-ver'
+ @param formatted_string: defaults to True
+ @type root: string
+ @param root: tree root to use
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @rtype str, or int
+ """
+ root, settings = ensure_settings(root, settings)
+ #This code to calculate size of downloaded files
+ # was taken from /usr/bin/emerge - BB
+ #writemsg_level( "DATA_CONNECT: get_size; cpv = " + \
+ #cpv, level=logging.DEBUG)
+ total = [0,'']
+ ebuild = settings.portdb[root].findname(cpv)
+ pkgdir = os.path.dirname(ebuild)
+ mf = manifest.Manifest(pkgdir, settings.settings["DISTDIR"])
+ iuse, final_use = get_flags(cpv, final_setting=True,
+ root=root, settings=default_settings)
+ #writemsg_level( "DATA_CONNECT: get_size; Attempting to get "
+ #"fetchlist final use= " + str(final_use), level=logging.DEBUG)
+ try:
+ fetchlist = settings.portdb[root].getFetchMap(cpv, set(final_use))
+ #writemsg_level( "DATA_CONNECT: get_size; fetchlist= " + \
+ #str(fetchlist), level=logging.DEBUG)
+ #writemsg_level( "DATA_CONNECT: get_size; mf.getDistfilesSize()",
+ #level=logging.DEBUG)
+ total[0] = mf.getDistfilesSize(fetchlist)
+ if formatted_string:
+ total_str = str(total[0]/1024)
+ #writemsg_level( "DATA_CONNECT: get_size; total_str = " + \
+ #total_str, level=logging.DEBUG)
+ count = len(total_str)
+ while (count > 3):
+ count -= 3
+ total_str = total_str[:count]+","+total_str[count:]
+ total[1] = total_str+" kB"
+ except KeyError as e:
+ total[1] = "Unknown (missing digest)"
+ total[0] = 0
+ writemsg_level( "DATA_CONNECT: get_size; Exception: " + str(e),
+ level=logging.DEBUG)
+ writemsg_level( "DATA_CONNECT: get_size; cpv: " + str(cpv),
+ level=logging.DEBUG)
+ writemsg_level( "DATA_CONNECT: get_size; fetchlist = " + \
+ str(fetchlist), level=logging.DEBUG)
+ #writemsg_level( "DATA_CONNECT: get_size; returning total[1] = " \
+ #+ total[1], level=logging.DEBUG)
+ if formatted_string:
+ return total[1]
+ return total[0]
def get_properties(cpv, want_dict=False, root=None, settings=None):
- """Get all ebuild variables in one chunk.
-
- @type cpv: string
- @param cpv: 'cat/pkg-ver'
- @type root: string
- @param root: tree root to use
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- @rtype
- @return all properties of cpv
- """
- root, settings = ensure_settings(root, settings)
- prop_dict = None
- if settings.portdb[root].cpv_exists(cpv): # if in portage tree
- try:
- #writemsg_level(" * DATA_CONNECT: get_properties()", level=logging.DEBUG)
- prop_dict = dict(zip(settings.keys, settings.portdb[root].aux_get(cpv, portage.auxdbkeys)))
- except IOError, e: # Sync being performed may delete files
- #writemsg_level(" * DATA_CONNECT: get_properties(): IOError: %s" % str(e), level=logging.DEBUG)
- pass
- except Exception, e:
- #writemsg_level(" * DATA_CONNECT: get_properties(): Exception: %s" %str( e), level=logging.DEBUG)
- pass
- else:
- if settings.vardb[root].cpv_exists(cpv): # elif in installed pkg tree
- prop_dict = dict(zip(settings.keys, settings.vardb[root].aux_get(cpv, portage.auxdbkeys)))
- if want_dict:
- # return an empty dict instead of None
- return prop_dict or {}
- return Properties(prop_dict)
+ """Get all ebuild variables in one chunk.
+
+ @type cpv: string
+ @param cpv: 'cat/pkg-ver'
+ @type root: string
+ @param root: tree root to use
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @rtype
+ @return all properties of cpv
+ """
+ root, settings = ensure_settings(root, settings)
+ prop_dict = None
+ if settings.portdb[root].cpv_exists(cpv): # if in portage tree
+ try:
+ #writemsg_level(" * DATA_CONNECT: get_properties()", level=logging.DEBUG)
+ prop_dict = dict(zip(settings.keys,
+ settings.portdb[root].aux_get(cpv, portage.auxdbkeys)))
+ except IOError as e: # Sync being performed may delete files
+ writemsg_level(" * DATA_CONNECT: get_properties(): IOError: %s"
+ % str(e), level=logging.DEBUG)
+ #pass
+ except Exception as e:
+ writemsg_level(" * DATA_CONNECT: get_properties(): Exception: %s"
+ %str( e), level=logging.DEBUG)
+ #pass
+ else:
+ if settings.vardb[root].cpv_exists(cpv): # elif in installed pkg tree
+ prop_dict = dict(zip(settings.keys,
+ settings.vardb[root].aux_get(cpv, portage.auxdbkeys)))
+ if want_dict:
+ # return an empty dict instead of None
+ return prop_dict or {}
+ return Properties(prop_dict)
def is_overlay(cpv, root=None, settings=None): # lifted from gentoolkit
- """Returns true if the package is in an overlay.
-
- @type cpv: string
- @param cpv: 'cat/pkg-ver'
- @type root: string
- @param root: tree root to use
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- @rtype bool
- """
- root, settings = ensure_settings(root, settings)
- try:
- dir,ovl = settings.portdb[root].findname2(cpv)
- except:
- return False
- return ovl != settings.portdir
+ """Returns true if the package is in an overlay.
+
+ @type cpv: string
+ @param cpv: 'cat/pkg-ver'
+ @type root: string
+ @param root: tree root to use
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @rtype bool
+ """
+ root, settings = ensure_settings(root, settings)
+ try:
+ dir, ovl = settings.portdb[root].findname2(cpv)
+ except:
+ return False
+ return ovl != settings.portdir
def get_overlay(cpv, root=None, settings=None):
- """Returns a portage overlay id
-
- @type cpv: string
- @param cpv: 'cat/pkg-ver'
- @type root: string
- @param root: tree root to use
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- @rtype str
- @return portage overlay id. or 'Deprecated?
- '"""
- root, settings = ensure_settings(root, settings)
- if '/' not in cpv:
- return ''
- try:
- dir,ovl = settings.portdb[root].findname2(cpv)
- except:
- ovl = 'Deprecated?'
- return ovl
+ """Returns a portage overlay id
+
+ @type cpv: string
+ @param cpv: 'cat/pkg-ver'
+ @type root: string
+ @param root: tree root to use
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @rtype str
+ @return portage overlay id. or 'Deprecated?
+ '"""
+ root, settings = ensure_settings(root, settings)
+ if '/' not in cpv:
+ return ''
+ try:
+ dir, ovl = settings.portdb[root].findname2(cpv)
+ except:
+ ovl = 'Deprecated?'
+ return ovl
def get_overlay_name(ovl_path=None, cpv=None, root=None, settings=None):
- """Returns the overlay name for either the overlay path or the cpv of a pkg
-
- @param ovl_path: optional portage overlay path
- @param cpv: optional cat/pkg-ver string
- @type root: string
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- @param root: tree root to use
- @rtype str
- """
- root, settings = ensure_settings(root, settings)
- if not ovl_path and cpv:
- ovl_path= get_overlay(cpv, root)
- name = None
- name = settings.portdb[root].getRepositoryName(ovl_path)
- return name or "????"
+ """Returns the overlay name for either the overlay path or the cpv of a pkg
+
+ @param ovl_path: optional portage overlay path
+ @param cpv: optional cat/pkg-ver string
+ @type root: string
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @param root: tree root to use
+ @rtype str
+ """
+ root, settings = ensure_settings(root, settings)
+ if not ovl_path and cpv:
+ ovl_path = get_overlay(cpv, root)
+ name = None
+ name = settings.portdb[root].getRepositoryName(ovl_path)
+ return name or "????"
def get_repositories(root=None, settings=None):
- """Returns a list of all repositories for root
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- """
- root, settings = ensure_settings(root, settings)
- return self.portdb[root].getRepositories()
+ """Returns a list of all repositories for root
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ """
+ root, settings = ensure_settings(root, settings)
+ return settings.portdb[root].getRepositories()
def get_system_pkgs(root=None, settings=None): # lifted from gentoolkit
- """Returns a tuple of lists, first list is resolved system packages,
- second is a list of unresolved packages.
-
- @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
- @return (resolved, unresolved) pkg lists
- """
- root, settings = ensure_settings(root, settings)
- pkglist = settings.settings.packages
- resolved = []
- unresolved = []
- for x in pkglist:
- cpv = x.strip()
- pkg = get_best_ebuild(cpv, root)
- if pkg:
- try:
- resolved.append(Atom(pkg).cp)
- except:
- resolved.append(pkgsplit(pkg)[0])
- else:
- unresolved.append(pkgsplit(cpv)[0])
- return (resolved, unresolved)
+ """Returns a tuple of lists, first list is resolved system packages,
+ second is a list of unresolved packages.
+
+ @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
+ @return (resolved, unresolved) pkg lists
+ """
+ root, settings = ensure_settings(root, settings)
+ pkglist = settings.settings.packages
+ resolved = []
+ unresolved = []
+ for x in pkglist:
+ cpv = x.strip()
+ pkg = get_best_ebuild(cpv, root)
+ if pkg:
+ try:
+ resolved.append(Atom(pkg).cp)
+ except:
+ resolved.append(pkgsplit(pkg)[0])
+ else:
+ unresolved.append(pkgsplit(cpv)[0])
+ return (resolved, unresolved)
def get_allnodes(root=None, settings=None):
- """Returns a list of all availabe cat/pkg's available from the tree
- and configured overlays. Subject to masking.
+ """Returns a list of all availabe cat/pkg's available from the tree
+ and configured overlays. Subject to masking.
- @type root: string
- @param root: tree root to use
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- @rtpye: list
- @return: ['cat/pkg1', 'cat/pkg2',...]
- """
- root, settings = ensure_settings(root, settings)
- return settings.portdb[root].cp_all()
+ @type root: string
+ @param root: tree root to use
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @rtpye: list
+ @return: ['cat/pkg1', 'cat/pkg2',...]
+ """
+ root, settings = ensure_settings(root, settings)
+ return settings.portdb[root].cp_all()
def get_installed_list(root=None, settings=None):
- """Returns a list of all installed cat/pkg-ver available from the tree
- and configured overlays. Subject to masking.
+ """Returns a list of all installed cat/pkg-ver available from the tree
+ and configured overlays. Subject to masking.
- @type root: string
- @param root: tree root to use
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- @rtpye: list
- @return: ['cat/pkg1-ver', 'cat/pkg2-ver',...]
- """
- root, settings = ensure_settings(root, settings)
- return settings.vardb[root].cpv_all()
+ @type root: string
+ @param root: tree root to use
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @rtpye: list
+ @return: ['cat/pkg1-ver', 'cat/pkg2-ver',...]
+ """
+ root, settings = ensure_settings(root, settings)
+ return settings.vardb[root].cpv_all()
def is_installed(cpv, root=None, settings=None):
- root, settings = ensure_settings(root, settings)
- if settings.vardb[root].cpv_exists(cpv):
- return True
- return False
+ root, settings = ensure_settings(root, settings)
+ if settings.vardb[root].cpv_exists(cpv):
+ return True
+ return False
def get_cp_all(root=None, vardb=False, categories=None,
- trees=None, settings=None):
- """
- This returns a list of all keys in our tree or trees
- @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
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- @rtype list of [cat/pkg,...]
- """
- root, settings = ensure_settings(root, settings)
- if vardb:
- cp_all = settings.vardb[root].cp_all()
- if categories:
- d= {}
- for cp in cp_all:
- cp_split = catpkgsplit(cp)
- return sorted(d)
- return cp_all
- return settings.portdb[root].cp_all(categories, trees)
+ trees=None, settings=None):
+ """
+ This returns a list of all keys in our tree or trees
+ @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
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @rtype list of [cat/pkg,...]
+ """
+ root, settings = ensure_settings(root, settings)
+ if vardb:
+ raise NotImplementedError
+ '''cp_all = settings.vardb[root].cp_all()
+ if categories:
+ d= {}
+ for cp in cp_all:
+ cp_split = catpkgsplit(cp)
+ if cp_split[0] in categories and cp_split[0] not in d:
+ d[cp_split[0]] = []
+ d[cp_split[0]].append(p)
+ return sorted(d)
+ return cp_all'''
+ return settings.portdb[root].cp_all(categories, trees)
def get_cp_list(root=None, cp=None, trees=None, settings=None):
- """
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- """
- root, settings = ensure_settings(root, settings)
- return settings.portdb[root].cp_list(cp, trees)
+ """
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ """
+ root, settings = ensure_settings(root, settings)
+ return settings.portdb[root].cp_list(cp, trees)
def findLicensePath(license_name, root=None, settings=None):
- """@param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- """
- root, settings = ensure_settings(root, settings)
- return settings.portdb[root].findLicensePath(license_name)
-
-
-def getFetchMap(pkg, useflags=None, tree=None, settings=None):
- """
- Get the SRC_URI metadata as a dict which maps each file name to a
- set of alternative URIs.
-
- @param mypkg: cpv for an ebuild
- @type pkg: String
- @param useflags: a collection of enabled USE flags, for evaluation of
- conditionals
- @type useflags: set, or None to enable all conditionals
- @param tree: The canonical path of the tree in which the ebuild
- is located, or None for automatic lookup
- @type pkg: String
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- @returns: A dict which maps each file name to a set of alternative
- URIs.
- @rtype: dict
- """
- root, settings = ensure_settings(root, settings)
- return settings.portdb[root].getfetchsizes(pkg, useflags, tree)
+ """@param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ """
+ root, settings = ensure_settings(root, settings)
+ return settings.portdb[root].findLicensePath(license_name)
+
+
+def getFetchMap(pkg, useflags=None, tree=None, root=None, settings=None):
+ """
+ Get the SRC_URI metadata as a dict which maps each file name to a
+ set of alternative URIs.
+
+ @param mypkg: cpv for an ebuild
+ @type pkg: String
+ @param useflags: a collection of enabled USE flags, for evaluation of
+ conditionals
+ @type useflags: set, or None to enable all conditionals
+ @param tree: The canonical path of the tree in which the ebuild
+ is located, or None for automatic lookup
+ @type pkg: String
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @returns: A dict which maps each file name to a set of alternative
+ URIs.
+ @rtype: dict
+ """
+ root, settings = ensure_settings(root, settings)
+ return settings.portdb[root].getfetchsizes(pkg, useflags, tree)
def getfetchsizes(pkg, useflags=None, root=None, settings=None):
- """Returns a filename:size dictionnary of remaining downloads
- @param settings: optional portage config settings instance.
- defaults to portage.api.settings.default_settings
- """
- root, settings = ensure_settings(root, settings)
- return settings.portdb[root].getfetchsizes(pkg, useflags)
+ """Returns a filename:size dictionnary of remaining downloads
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ """
+ root, settings = ensure_settings(root, settings)
+ return settings.portdb[root].getfetchsizes(pkg, useflags)
def cpv_exists(cpv, root=None, settings=None):
- """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
- """
- root, settings = ensure_settings(root, settings)
- return settings.portdb[root].cpv_exists(cpv)
+ """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
+ """
+ root, settings = ensure_settings(root, settings)
+ return settings.portdb[root].cpv_exists(cpv)
def get_category_description(category, root=None, settings=None):
- root, settings = ensure_settings(root, settings)
- from xml.dom import minidom
- data = {}
- portdir = self.settings.settings['PORTDIR']
- myfile = os.path.join(portdir, category, "metadata.xml")
- if os.access(myfile, os.R_OK) and os.path.isfile(myfile):
- doc = minidom.parse(myfile)
- longdescs = doc.getElementsByTagName("longdescription")
- for longdesc in longdescs:
- data[longdesc.getAttribute("lang").strip()] = \
- ' '.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")
+ root, settings = ensure_settings(root, settings)
+ from xml.dom import minidom
+ data = {}
+ portdir = settings.settings['PORTDIR']
+ myfile = os.path.join(portdir, category, "metadata.xml")
+ if os.access(myfile, os.R_OK) and os.path.isfile(myfile):
+ doc = minidom.parse(myfile)
+ longdescs = doc.getElementsByTagName("longdescription")
+ for longdesc in longdescs:
+ data[longdesc.getAttribute("lang").strip()] = \
+ ' '.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")
diff --git a/pym/portage/api/flag.py b/pym/portage/api/flag.py
index 52ea9be..a83ee1d 100644
--- a/pym/portage/api/flag.py
+++ b/pym/portage/api/flag.py
@@ -19,7 +19,7 @@ __all__ = (
)
-import sys
+#import sys
from portage.api.settings import default_settings
@@ -64,7 +64,7 @@ def get_installed_use(cpv, use="USE", root=None, settings=default_settings):
"""
if root is None:
root = settings.settings["ROOT"]
- return settings.vardb[root].aux_get(cpv,[use])[0].split()
+ return settings.vardb[root].aux_get(cpv, [use])[0].split()
def reduce_flag(flag):
@@ -89,13 +89,14 @@ def reduce_flags(the_list):
@rtype: list
@return absolute USE flags
"""
- r=[]
+ reduced = []
for member in the_list:
- r.append(reduce_flag(member))
- return r
+ reduced.append(reduce_flag(member))
+ return reduced
-def filter_flags(use, use_expand_hidden, usemasked, useforced, settings=default_settings):
+def filter_flags(use, use_expand_hidden, usemasked,
+ useforced, settings=default_settings):
"""Filter function to remove hidden or otherwise not normally
visible USE flags from a list.
@@ -114,21 +115,21 @@ def filter_flags(use, use_expand_hidden, usemasked, useforced, settings=default_
"""
# clean out some environment flags, since they will most probably
# be confusing for the user
- for f in use_expand_hidden:
- f=f.lower() + "_"
- for x in use:
- if f in x:
- use.remove(x)
+ for flag in use_expand_hidden:
+ flag = flag.lower() + "_"
+ for expander in use:
+ if flag in expander:
+ use.remove(expander)
# clean out any arch's
archlist = settings.settings["PORTAGE_ARCHLIST"].split()
- for a in use[:]:
- if a in archlist:
- use.remove(a)
+ for key in use[:]:
+ if key in archlist:
+ use.remove(key)
# dbl check if any from usemasked or useforced are still there
masked = usemasked + useforced
- for a in use[:]:
- if a in masked:
- use.remove(a)
+ for flag in use[:]:
+ if flag in masked:
+ use.remove(flag)
return use
@@ -181,11 +182,15 @@ def get_flags(cpv, final_setting=False, root=None, settings=default_settings):
@rtype: list or list, list
@return IUSE or IUSE, final_flags
"""
- final_use, use_expand_hidden, usemasked, useforced = get_all_cpv_use(cpv, root, settings)
- iuse_flags = filter_flags(get_iuse(cpv), use_expand_hidden, usemasked, useforced, settings)
- #flags = filter_flags(use_flags, use_expand_hidden, usemasked, useforced, settings)
+ (final_use, use_expand_hidden, usemasked, useforced) = \
+ get_all_cpv_use(cpv, root, settings)
+ iuse_flags = filter_flags(get_iuse(cpv), use_expand_hidden,
+ usemasked, useforced, settings)
+ #flags = filter_flags(use_flags, use_expand_hidden,
+ #usemasked, useforced, settings)
if final_setting:
- final_flags = filter_flags(final_use, use_expand_hidden, usemasked, useforced, settings)
+ final_flags = filter_flags(final_use, use_expand_hidden,
+ usemasked, useforced, settings)
return iuse_flags, final_flags
return iuse_flags
@@ -204,22 +209,23 @@ def get_use_flag_dict(portdir):
# process standard use flags
- List = portage.grabfile(portdir + '/profiles/use.desc')
- for item in List:
+ _list = portage.grabfile(portdir + '/profiles/use.desc')
+ for item in _list:
index = item.find(' - ')
use_dict[item[:index].strip().lower()] = ['global', '', item[index+3:]]
# process local (package specific) use flags
- List = portage.grabfile(portdir + '/profiles/use.local.desc')
- for item in List:
+ _list = portage.grabfile(portdir + '/profiles/use.local.desc')
+ for item in _list:
index = item.find(' - ')
data = item[:index].lower().split(':')
- try: # got an error once starting porthole==> added code to catch it, but it works again???
+ try:
use_dict[data[1].strip()] = ['local', data[0].strip(), item[index+3:]]
except:
pass
- #debug.dprint("FLAG: get_use_flag_dict(); error in index??? data[0].strip, item[index:]")
+ #debug.dprint("FLAG: get_use_flag_dict();"
+ #"error in index??? data[0].strip, item[index:]")
#debug.dprint(data[0].strip())
#debug.dprint(item[index:])
return use_dict
diff --git a/pym/portage/api/properties.py b/pym/portage/api/properties.py
index b885505..f282e76 100644
--- a/pym/portage/api/properties.py
+++ b/pym/portage/api/properties.py
@@ -20,8 +20,10 @@ class Properties(object):
self._dict = _dict
def __getattr__(self, name):
- try: return self._dict[name]
- except: return ''
+ try:
+ return self._dict[name]
+ except:
+ return ''
def __str__(self):
txt = []
@@ -30,9 +32,11 @@ class Properties(object):
return '\n'.join(txt)
def keys(self):
+ """Returns the availabel dictionary keys"""
return self.__slots__[:-3]
def get(self, name):
+ """Returns the value for the dictionary key"""
return getattr(self, name)
def get_slot(self):
diff --git a/pym/portage/api/settings.py b/pym/portage/api/settings.py
index ca81908..250917e 100644
--- a/pym/portage/api/settings.py
+++ b/pym/portage/api/settings.py
@@ -21,6 +21,14 @@ class PortageSettings:
# declare some globals
self.portdir = None
self.portdir_overlay = None
+ self.portdb = None
+ self.vardb = None
+ self.trees = None
+ self.root_config = None
+ self.bindb = None
+ self.configured_roots = None
+ self.arch = None
+ self.mtimedb = None
self.ACCEPT_KEYWORDS = None
self.user_config_dir = None
self._world = None
@@ -28,6 +36,7 @@ class PortageSettings:
self.virtuals = None
self.keys = None
self.UseFlagDict = None
+ self.settings = None
if config_root is None:
self.reset()
else:
@@ -67,38 +76,6 @@ class PortageSettings:
return
- def _load_config(trees=None, config_root=None):
- kwargs = {}
- if config_root:
- env_fetch = (("target_root", "ROOT"))
- kwargs['config_root'] = config_root
- else:
- env_fetch = (("config_root", "PORTAGE_CONFIGROOT"), ("target_root", "ROOT"))
- for k, envvar in env_fetch:
- v = os.environ.get(envvar, None)
- if v and v.strip():
- kwargs[k] = v
- trees = portage.create_trees(trees=trees, **kwargs)
-
- for root, root_trees in trees.items():
- settings = root_trees["vartree"].settings
- settings._init_dirs()
- setconfig = load_default_config(settings, root_trees)
- root_trees["root_config"] = RootConfig(settings, root_trees, setconfig)
-
- settings = trees["/"]["vartree"].settings
-
- for myroot in trees:
- if myroot != "/":
- settings = trees[myroot]["vartree"].settings
- break
-
- mtimedbfile = os.path.join(settings['EROOT'], portage.CACHE_PATH, "mtimedb")
- mtimedb = portage.MtimeDB(mtimedbfile)
- portage.output._init(config_root=settings['PORTAGE_CONFIGROOT'])
- return settings, trees, mtimedb
-
-
def _load_dbapis(self):
"""handles loading all the trees dbapi's"""
self.portdb, self.vardb, self.bindb = {}, {}, {}
@@ -121,11 +98,12 @@ class PortageSettings:
#print("SETTINGS: reset_world();")
world = []
try:
- file = open(os.path.join(portage.root, portage.WORLD_FILE), "r")
- world = file.read().split()
- file.close()
+ _file = open(os.path.join(portage.root, portage.WORLD_FILE), "r")
+ world = _file.read().split()
+ _file.close()
except:
- print("SETTINGS: get_world(); Failure to locate file: '%s'" %portage.WORLD_FILE)
+ print("SETTINGS: get_world(); Failure to locate file: '%s'"
+ %portage.WORLD_FILE)
return False
self._world = world
return True
@@ -156,7 +134,7 @@ class PortageSettings:
default_settings = PortageSettings()
-def reload_portage():
+def reload_portage(settings=None):
"""Convienence function to re-import portage after a portage update.
Caution, it may not always work correctly due to python caching if
program files are added/deleted between versions. In those cases the
@@ -168,5 +146,8 @@ def reload_portage():
except ImportError:
return False
#print("SETTINGS: new portage version = " + portage.VERSION)
- settings.reset()
+ if settings is None:
+ default_settings.reset()
+ else:
+ settings.reset()
return True
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [gentoo-commits] proj/portage:public_api commit in: pym/portage/api/
@ 2012-07-28 20:42 Brian Dolbec
0 siblings, 0 replies; 5+ messages in thread
From: Brian Dolbec @ 2012-07-28 20:42 UTC (permalink / raw
To: gentoo-commits
commit: 034cd3d55c1c54c1998841417a3bbf74792cb9a4
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Sat Jul 28 20:40:57 2012 +0000
Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Sat Jul 28 20:40:57 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=034cd3d5
New get_cpv_all() which returns a dictionary of tree:[cpv-list]. It can be limited by trees and categories input parameters. It does not apply any masking.
Fix get_cp_list portage function call not keyword specifying the mytree parameter.
some whitespace cleanup.
---
pym/portage/api/data_connect.py | 41 +++++++++++++++++++++++++++++++++-----
1 files changed, 35 insertions(+), 6 deletions(-)
diff --git a/pym/portage/api/data_connect.py b/pym/portage/api/data_connect.py
index cb41ce0..825cb45 100644
--- a/pym/portage/api/data_connect.py
+++ b/pym/portage/api/data_connect.py
@@ -302,7 +302,7 @@ def get_size(cpv, formatted_string=True, root=None, settings=None):
ebuild = settings.portdb[root].findname(cpv)
pkgdir = os.path.dirname(ebuild)
mf = manifest.Manifest(pkgdir, settings.settings["DISTDIR"])
- iuse, final_use = get_flags(cpv, final_setting=True,
+ iuse, final_use = get_flags(cpv, final_setting=True,
root=root, settings=default_settings)
#writemsg_level( "DATA_CONNECT: get_size; Attempting to get "
#"fetchlist final use= " + str(final_use), level=logging.DEBUG)
@@ -355,7 +355,7 @@ def get_properties(cpv, want_dict=False, root=None, settings=None):
if settings.portdb[root].cpv_exists(cpv): # if in portage tree
try:
#writemsg_level(" * DATA_CONNECT: get_properties()", level=logging.DEBUG)
- prop_dict = dict(zip(settings.keys,
+ prop_dict = dict(zip(settings.keys,
settings.portdb[root].aux_get(cpv, portage.auxdbkeys)))
except IOError as e: # Sync being performed may delete files
writemsg_level(" * DATA_CONNECT: get_properties(): IOError: %s"
@@ -367,7 +367,7 @@ def get_properties(cpv, want_dict=False, root=None, settings=None):
#pass
else:
if settings.vardb[root].cpv_exists(cpv): # elif in installed pkg tree
- prop_dict = dict(zip(settings.keys,
+ prop_dict = dict(zip(settings.keys,
settings.vardb[root].aux_get(cpv, portage.auxdbkeys)))
if want_dict:
# return an empty dict instead of None
@@ -514,9 +514,9 @@ def get_cp_all(root=None, vardb=False, categories=None,
"""
This returns a list of all keys in our tree or trees
@param categories: optional list of categories to search or
- defaults to settings.portdb.settings.categories
+ defaults to settings.portdb[root].settings.categories
@param trees: optional list of trees to search the categories in or
- defaults to settings.portdb.porttrees
+ defaults to settings.portdb[root].porttrees
@param settings: optional portage config settings instance.
defaults to portage.api.settings.default_settings
@rtype list of [cat/pkg,...]
@@ -543,7 +543,36 @@ def get_cp_list(root=None, cp=None, trees=None, settings=None):
defaults to portage.api.settings.default_settings
"""
root, settings = ensure_settings(root, settings)
- return settings.portdb[root].cp_list(cp, trees)
+ return settings.portdb[root].cp_list(cp, mytree=trees)
+
+
+def get_cpv_all(root=None, categories=None,
+ trees=None, settings=None):
+ """
+ This function returns all cpv's for a given tree or trees without
+ applying any repo priorities. For a list of visible cpv's using proper
+ repo priorities and masking, use get_allnodes().
+ This returns a dictoinary of lists of all keys in our tree or trees
+ @param categories: optional list of categories to search or
+ defaults to settings.portdb[root].settings.categories
+ @param trees: optional list of trees to search the categories in or
+ defaults to settings.portdb[root].porttrees
+ @param settings: optional portage config settings instance.
+ defaults to portage.api.settings.default_settings
+ @rtype dict of lists of {tree:[cat/pkg-ver,...],}
+ """
+ root, settings = ensure_settings(root, settings)
+ if trees is None:
+ trees = settings.portdb[root].porttrees
+ cpvs = {}
+ for tree in trees:
+ cps = get_cp_all(root=root, categories=categories,
+ trees=[tree], settings=settings)
+ cpvs[tree] = []
+ for c_p in cps:
+ cpvs[tree].append(get_cp_list(root=root, cp=c_p,
+ trees=[tree], settings=settings))
+ return cpvs
def findLicensePath(license_name, root=None, settings=None):
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-07-28 21:13 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-28 20:42 [gentoo-commits] proj/portage:public_api commit in: pym/portage/api/ Brian Dolbec
-- strict thread matches above, loose matches on Subject: below --
2011-05-28 6:53 Brian Dolbec
2011-05-28 6:53 Brian Dolbec
2011-05-25 15:43 Brian Dolbec
2011-05-25 14:45 Brian Dolbec
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox