From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1QgCxn-0005bz-F8 for garchives@archives.gentoo.org; Mon, 11 Jul 2011 09:39:39 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 188BB21C052; Mon, 11 Jul 2011 09:39:31 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id CB8AA21C052 for ; Mon, 11 Jul 2011 09:39:30 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 337392AC189 for ; Mon, 11 Jul 2011 09:39:30 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id 92B6D8003F for ; Mon, 11 Jul 2011 09:39:29 +0000 (UTC) From: "Michał Górny" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Michał Górny" Message-ID: Subject: [gentoo-commits] proj/gentoopm:master commit in: gentoopm/bash/, gentoopm/basepm/ X-VCS-Repository: proj/gentoopm X-VCS-Files: gentoopm/basepm/environ.py gentoopm/basepm/pkg.py gentoopm/bash/__init__.py gentoopm/bash/bashserver.py X-VCS-Directories: gentoopm/bash/ gentoopm/basepm/ X-VCS-Committer: mgorny X-VCS-Committer-Name: Michał Górny X-VCS-Revision: a2b7c9c28f6a6f7667786b57438cce2d3ce44e3b Date: Mon, 11 Jul 2011 09:39:29 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: X-Archives-Hash: fa69f210209614a72e878b74b62808b2 commit: a2b7c9c28f6a6f7667786b57438cce2d3ce44e3b Author: Micha=C5=82 G=C3=B3rny gentoo org> AuthorDate: Mon Jul 11 09:13:09 2011 +0000 Commit: Micha=C5=82 G=C3=B3rny gentoo org> CommitDate: Mon Jul 11 09:13:09 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/gentoopm.git;= a=3Dcommit;h=3Da2b7c9c2 Support grabbing package environment. --- gentoopm/basepm/environ.py | 53 +++++++++++++++++++++++++++++++++++++= ++++++ gentoopm/basepm/pkg.py | 9 +----- gentoopm/bash/__init__.py | 14 +++++++++- gentoopm/bash/bashserver.py | 2 +- 4 files changed, 68 insertions(+), 10 deletions(-) diff --git a/gentoopm/basepm/environ.py b/gentoopm/basepm/environ.py new file mode 100644 index 0000000..86ee5f5 --- /dev/null +++ b/gentoopm/basepm/environ.py @@ -0,0 +1,53 @@ +#!/usr/bin/python +# vim:fileencoding=3Dutf-8 +# (c) 2011 Micha=C5=82 G=C3=B3rny +# Released under the terms of the 2-clause BSD license. + +import bz2 + +from gentoopm.bash import get_any_bashparser + +class LazyBashParser(object): + """ + Lazily-initialized, shared bash parser wrapper. + """ + _curr_path =3D None + _parser =3D None + + def set_file(self, path, open_func): + if self._curr_path =3D=3D path: + return + self._curr_path =3D path + f =3D open_func(path) + if self._parser is None: + self._parser =3D get_any_bashparser() + self._parser.load_file(f) + f.close() + + def __getitem__(self, k): + return self._parser[k] + + def copy(self, *v): + return self._parser.copy(*v) + + def __del__(self): + del self._parser + +_bp =3D LazyBashParser() + +class PMPackageEnvironment(object): + """ + Package environment accessor class. + """ + + def __init__(self, path, bzipped2 =3D False): + self._path =3D path + self._open_func =3D bz2.BZ2File if bzipped2 else open + + def __getitem__(self, k): + _bp.set_file(self._path, self._open_func) + return _bp[k] + + def copy(self, *keys): + _bp.set_file(self._path, self._open_func) + return _bp.copy(*keys) diff --git a/gentoopm/basepm/pkg.py b/gentoopm/basepm/pkg.py index 4293f4d..f91c52f 100644 --- a/gentoopm/basepm/pkg.py +++ b/gentoopm/basepm/pkg.py @@ -3,10 +3,11 @@ # (c) 2011 Micha=C5=82 G=C3=B3rny # Released under the terms of the 2-clause BSD license. =20 -import bz2, os.path +import os.path from abc import abstractmethod, abstractproperty =20 from gentoopm.basepm.atom import PMAtom +from gentoopm.basepm.environ import PMPackageEnvironment from gentoopm.exceptions import EmptyPackageSetError, AmbiguousPackageSe= tError from gentoopm.util import ABCObject =20 @@ -249,9 +250,3 @@ class PMPackage(ABCObject): =20 def __repr__(self): return '%s(%s)' % (self.__class__.__name__, repr(self.id)) - -class PMPackageEnvironment(object): - def __init__(self, f, bzipped2 =3D False): - self._f =3D f - self._open_func =3D bz2.BZ2File if bzipped2 else open - print (self._f, self._open_func) diff --git a/gentoopm/bash/__init__.py b/gentoopm/bash/__init__.py index 53b9b88..284a358 100644 --- a/gentoopm/bash/__init__.py +++ b/gentoopm/bash/__init__.py @@ -34,10 +34,10 @@ class BashParser(ABCObject): """ pass =20 - def get_env(self, *varlist): + def copy(self, *varlist): """ Get values of multiple environment variables, and return them - as a dict. + as a dict (a 'local copy' of the environment). =20 @param varlist: environment variable names @type varlist: list(string) @@ -49,3 +49,13 @@ class BashParser(ABCObject): for v in varlist: out[v] =3D self[v] return out + +def get_any_bashparser(): + """ + Get any BashParser implementation (the best one available). + + @return: a BashParser instance + @rtype: L{BashParser} + """ + from gentoopm.bash.bashserver import BashServer + return BashServer() diff --git a/gentoopm/bash/bashserver.py b/gentoopm/bash/bashserver.py index 8fb8e09..f83c88b 100644 --- a/gentoopm/bash/bashserver.py +++ b/gentoopm/bash/bashserver.py @@ -64,7 +64,7 @@ class BashServer(BashParser): =20 return self._read1() =20 - def get_env(self, *varlist): + def copy(self, *varlist): q =3D ' '.join(['"${%s}"' % v for v in varlist]) self._bashproc.stdin.write(('%s\n' % q).encode('ASCII')) self._bashproc.stdin.flush()