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 1ShUG8-0007w7-MP for garchives@archives.gentoo.org; Wed, 20 Jun 2012 23:24:24 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id BDFEBE085E; Wed, 20 Jun 2012 23:23:57 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 76E24E0839 for ; Wed, 20 Jun 2012 23:23:57 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 96D7B1B402F for ; Wed, 20 Jun 2012 23:23:56 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 58714E543B for ; Wed, 20 Jun 2012 23:23:54 +0000 (UTC) From: "Slava Bacherikov" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Slava Bacherikov" Message-ID: <1340196653.ddba123a5a29de786959a5a548b89991738cb2fe.bacher09@gentoo> Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/libs/ X-VCS-Repository: proj/gentoo-packages X-VCS-Files: gpackages/libs/generic.py gpackages/libs/porttree.py X-VCS-Directories: gpackages/libs/ X-VCS-Committer: bacher09 X-VCS-Committer-Name: Slava Bacherikov X-VCS-Revision: ddba123a5a29de786959a5a548b89991738cb2fe X-VCS-Branch: master Date: Wed, 20 Jun 2012 23:23:54 +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: ed97a222-7676-4a75-913d-aaa023235c6d X-Archives-Hash: 9d70577db958b03e5168662eb96299fd commit: ddba123a5a29de786959a5a548b89991738cb2fe Author: Slava Bacherikov bacher09 org> AuthorDate: Wed Jun 20 12:50:53 2012 +0000 Commit: Slava Bacherikov bacherikov org ua> CommitDate: Wed Jun 20 12:50:53 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/gentoo-packag= es.git;a=3Dcommit;h=3Dddba123a Refactor porttree --- gpackages/libs/generic.py | 8 ++++- gpackages/libs/porttree.py | 64 ++++++++++++++++++++++++--------------= ------ 2 files changed, 41 insertions(+), 31 deletions(-) diff --git a/gpackages/libs/generic.py b/gpackages/libs/generic.py index 409ec09..b8312c4 100644 --- a/gpackages/libs/generic.py +++ b/gpackages/libs/generic.py @@ -3,9 +3,13 @@ import hashlib import types from datetime import datetime =20 -__all__ =3D ('StrThatIgnoreCase', 'ToStrMixin', 'file_get_content', 'fil= e_sha1', \ - 'file_mtime', 'cached_property' ) +__all__ =3D ('StrThatIgnoreCase', 'ToStrMixin', 'file_get_content', 'fil= e_sha1',\ + 'file_mtime', 'cached_property', 'iter_over_gen', 'lofstr_to_= ig') =20 +def iter_over_gen(iterat, name): + for obj in iterat: + for item in getattr(obj, name)(): + yield item def del_from_dict(what_list, dict_todel): for item in what_list: if item in dict_todel: diff --git a/gpackages/libs/porttree.py b/gpackages/libs/porttree.py index 75812ab..637e198 100644 --- a/gpackages/libs/porttree.py +++ b/gpackages/libs/porttree.py @@ -10,7 +10,9 @@ from gentoolkit.package import Package as PackageInfo from gentoolkit.metadata import MetaData from gentoolkit import errors from generic import ToStrMixin, file_sha1, file_mtime, cached_property, = \ - file_get_content, StrThatIgnoreCase, lofstr_to_ig + file_get_content, StrThatIgnoreCase, lofstr_to_ig, \ + iter_over_gen + from use_info import get_uses_info, get_local_uses_info import os =20 @@ -166,7 +168,27 @@ def _gen_all_use(func, iterator): func(use_all_dict, use_dict) return use_all_dict =20 -class Portage(object): + +def gen_generator_over_gen(gen_name, name): + return lambda self: iter_over_gen(getattr(self, gen_name)(), name) + +class IteratorAddMetaclass(type): + =20 + def __init__(cls, name, bases, dct): + super(IteratorAddMetaclass, cls).__init__(name, bases, dct) + for name in cls.generator_names: + setattr(cls, name, gen_generator_over_gen(cls.main_iterator,= name)) + +class AutoGeneratorMixin(object): + + __metaclass__ =3D IteratorAddMetaclass + generator_names =3D () + #main_iterator =3D 'generator_name' + +class Portage(ToStrMixin, AutoGeneratorMixin): + + generator_names =3D ('iter_categories', 'iter_packages', 'iter_ebuil= ds') + main_iterator =3D 'iter_trees' =20 def __init__(self): self.treemap =3D PORTDB.repositories.treemap @@ -183,21 +205,6 @@ class Portage(object): for tree_name in self.tree_order: yield PortTree(tree_dict[tree_name], tree_name) =20 - def iter_categories(self): - for tree in self.iter_trees(): - for category in tree.iter_categories(): - yield category - - def iter_packages(self): - for tree in self.iter_trees(): - for package in tree.iter_packages(): - yield package - - def iter_ebuilds(self): - for tree in self.iter_trees(): - for ebuild in tree.iter_ebuilds(): - yield ebuild - =20 def iter_use_desc(self): for tree in self.iter_trees(): yield tree.use_desc @@ -224,9 +231,15 @@ class Portage(object): def dict_repos(self): return self.treemap =20 + def __unicode__(self): + return u'portage' + =20 -class PortTree(ToStrMixin): +class PortTree(ToStrMixin, AutoGeneratorMixin): "Represent portage tree as object" + + main_iterator =3D 'iter_categories' + generator_names =3D ('iter_packages', 'iter_ebuilds') =20 def __init__(self, tree_path =3D '/usr/portage', name =3D 'main'): """Args: @@ -241,16 +254,6 @@ class PortTree(ToStrMixin): if os.path.isdir(os.path.join(self.porttree_path, category))= : yield Category(self, category) =20 - def iter_packages(self): - for category in self.iter_categories(): - for package in category.iter_packages(): - yield package - =20 - def iter_ebuilds(self): - for package in self.iter_packages(): - for ebuild in package.iter_ebuilds(): - yield ebuild - def __unicode__(self): return self.name =20 @@ -304,10 +307,13 @@ class CategoryMetadata(ToStrMixin): return unicode(self._metadata_path) =20 =20 -class Category(ToStrMixin): +class Category(ToStrMixin, AutoGeneratorMixin): "Represent category of portage tree as object" =20 __slots__ =3D ('porttree', 'category', '_cache') + + main_iterator =3D 'iter_packages' + generator_names =3D ('iter_ebuilds', ) =20 def __init__(self, porttree, category): """Args: