From: "Slava Bacherikov" <slava@bacherikov.org.ua>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/libs/
Date: Wed, 20 Jun 2012 23:23:54 +0000 (UTC) [thread overview]
Message-ID: <1340196653.ddba123a5a29de786959a5a548b89991738cb2fe.bacher09@gentoo> (raw)
commit: ddba123a5a29de786959a5a548b89991738cb2fe
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Wed Jun 20 12:50:53 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Wed Jun 20 12:50:53 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=ddba123a
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
-__all__ = ('StrThatIgnoreCase', 'ToStrMixin', 'file_get_content', 'file_sha1', \
- 'file_mtime', 'cached_property' )
+__all__ = ('StrThatIgnoreCase', 'ToStrMixin', 'file_get_content', 'file_sha1',\
+ 'file_mtime', 'cached_property', 'iter_over_gen', 'lofstr_to_ig')
+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
@@ -166,7 +168,27 @@ def _gen_all_use(func, iterator):
func(use_all_dict, use_dict)
return use_all_dict
-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):
+
+ 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__ = IteratorAddMetaclass
+ generator_names = ()
+ #main_iterator = 'generator_name'
+
+class Portage(ToStrMixin, AutoGeneratorMixin):
+
+ generator_names = ('iter_categories', 'iter_packages', 'iter_ebuilds')
+ main_iterator = 'iter_trees'
def __init__(self):
self.treemap = 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)
- 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
-
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
+ def __unicode__(self):
+ return u'portage'
+
-class PortTree(ToStrMixin):
+class PortTree(ToStrMixin, AutoGeneratorMixin):
"Represent portage tree as object"
+
+ main_iterator = 'iter_categories'
+ generator_names = ('iter_packages', 'iter_ebuilds')
def __init__(self, tree_path = '/usr/portage', name = 'main'):
"""Args:
@@ -241,16 +254,6 @@ class PortTree(ToStrMixin):
if os.path.isdir(os.path.join(self.porttree_path, category)):
yield Category(self, category)
- def iter_packages(self):
- for category in self.iter_categories():
- for package in category.iter_packages():
- yield package
-
- def iter_ebuilds(self):
- for package in self.iter_packages():
- for ebuild in package.iter_ebuilds():
- yield ebuild
-
def __unicode__(self):
return self.name
@@ -304,10 +307,13 @@ class CategoryMetadata(ToStrMixin):
return unicode(self._metadata_path)
-class Category(ToStrMixin):
+class Category(ToStrMixin, AutoGeneratorMixin):
"Represent category of portage tree as object"
__slots__ = ('porttree', 'category', '_cache')
+
+ main_iterator = 'iter_packages'
+ generator_names = ('iter_ebuilds', )
def __init__(self, porttree, category):
"""Args:
next reply other threads:[~2012-06-20 23:24 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-20 23:23 Slava Bacherikov [this message]
-- strict thread matches above, loose matches on Subject: below --
2012-06-20 23:23 [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/libs/ Slava Bacherikov
2012-06-20 23:23 Slava Bacherikov
2012-06-18 21:26 Slava Bacherikov
2012-06-18 21:26 Slava Bacherikov
2012-06-18 21:26 Slava Bacherikov
2012-06-14 19:10 Slava Bacherikov
2012-06-12 18:34 Slava Bacherikov
2012-06-12 18:34 Slava Bacherikov
2012-06-10 17:51 Slava Bacherikov
2012-06-09 18:19 Slava Bacherikov
2012-06-09 18:19 Slava Bacherikov
2012-06-07 22:48 Slava Bacherikov
2012-06-07 22:48 Slava Bacherikov
2012-06-07 22:48 Slava Bacherikov
2012-06-06 22:48 Slava Bacherikov
2012-06-05 21:46 Slava Bacherikov
2012-06-05 20:48 Slava Bacherikov
2012-06-05 15:49 Slava Bacherikov
2012-06-05 15:49 Slava Bacherikov
2012-06-04 22:18 Slava Bacherikov
2012-06-04 16:16 Slava Bacherikov
2012-06-04 16:16 Slava Bacherikov
2012-06-03 19:34 Slava Bacherikov
2012-06-03 16:19 Slava Bacherikov
2012-06-03 13:19 Slava Bacherikov
2012-06-03 13:19 Slava Bacherikov
2012-06-02 16:04 Slava Bacherikov
2012-06-01 21:28 Slava Bacherikov
2012-06-01 21:28 Slava Bacherikov
2012-05-31 15:28 Slava Bacherikov
2012-05-31 15:28 Slava Bacherikov
2012-05-29 21:34 Slava Bacherikov
2012-05-29 13:38 Slava Bacherikov
2012-05-28 17:00 Slava Bacherikov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1340196653.ddba123a5a29de786959a5a548b89991738cb2fe.bacher09@gentoo \
--to=slava@bacherikov.org.ua \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox