public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [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