Gentoo Archives: gentoo-commits

From: Slava Bacherikov <slava@××××××××××××××.ua>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/libs/
Date: Wed, 20 Jun 2012 23:24:24
Message-Id: 1340196653.ddba123a5a29de786959a5a548b89991738cb2fe.bacher09@gentoo
1 commit: ddba123a5a29de786959a5a548b89991738cb2fe
2 Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
3 AuthorDate: Wed Jun 20 12:50:53 2012 +0000
4 Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
5 CommitDate: Wed Jun 20 12:50:53 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=ddba123a
7
8 Refactor porttree
9
10 ---
11 gpackages/libs/generic.py | 8 ++++-
12 gpackages/libs/porttree.py | 64 ++++++++++++++++++++++++--------------------
13 2 files changed, 41 insertions(+), 31 deletions(-)
14
15 diff --git a/gpackages/libs/generic.py b/gpackages/libs/generic.py
16 index 409ec09..b8312c4 100644
17 --- a/gpackages/libs/generic.py
18 +++ b/gpackages/libs/generic.py
19 @@ -3,9 +3,13 @@ import hashlib
20 import types
21 from datetime import datetime
22
23 -__all__ = ('StrThatIgnoreCase', 'ToStrMixin', 'file_get_content', 'file_sha1', \
24 - 'file_mtime', 'cached_property' )
25 +__all__ = ('StrThatIgnoreCase', 'ToStrMixin', 'file_get_content', 'file_sha1',\
26 + 'file_mtime', 'cached_property', 'iter_over_gen', 'lofstr_to_ig')
27
28 +def iter_over_gen(iterat, name):
29 + for obj in iterat:
30 + for item in getattr(obj, name)():
31 + yield item
32 def del_from_dict(what_list, dict_todel):
33 for item in what_list:
34 if item in dict_todel:
35
36 diff --git a/gpackages/libs/porttree.py b/gpackages/libs/porttree.py
37 index 75812ab..637e198 100644
38 --- a/gpackages/libs/porttree.py
39 +++ b/gpackages/libs/porttree.py
40 @@ -10,7 +10,9 @@ from gentoolkit.package import Package as PackageInfo
41 from gentoolkit.metadata import MetaData
42 from gentoolkit import errors
43 from generic import ToStrMixin, file_sha1, file_mtime, cached_property, \
44 - file_get_content, StrThatIgnoreCase, lofstr_to_ig
45 + file_get_content, StrThatIgnoreCase, lofstr_to_ig, \
46 + iter_over_gen
47 +
48 from use_info import get_uses_info, get_local_uses_info
49 import os
50
51 @@ -166,7 +168,27 @@ def _gen_all_use(func, iterator):
52 func(use_all_dict, use_dict)
53 return use_all_dict
54
55 -class Portage(object):
56 +
57 +def gen_generator_over_gen(gen_name, name):
58 + return lambda self: iter_over_gen(getattr(self, gen_name)(), name)
59 +
60 +class IteratorAddMetaclass(type):
61 +
62 + def __init__(cls, name, bases, dct):
63 + super(IteratorAddMetaclass, cls).__init__(name, bases, dct)
64 + for name in cls.generator_names:
65 + setattr(cls, name, gen_generator_over_gen(cls.main_iterator, name))
66 +
67 +class AutoGeneratorMixin(object):
68 +
69 + __metaclass__ = IteratorAddMetaclass
70 + generator_names = ()
71 + #main_iterator = 'generator_name'
72 +
73 +class Portage(ToStrMixin, AutoGeneratorMixin):
74 +
75 + generator_names = ('iter_categories', 'iter_packages', 'iter_ebuilds')
76 + main_iterator = 'iter_trees'
77
78 def __init__(self):
79 self.treemap = PORTDB.repositories.treemap
80 @@ -183,21 +205,6 @@ class Portage(object):
81 for tree_name in self.tree_order:
82 yield PortTree(tree_dict[tree_name], tree_name)
83
84 - def iter_categories(self):
85 - for tree in self.iter_trees():
86 - for category in tree.iter_categories():
87 - yield category
88 -
89 - def iter_packages(self):
90 - for tree in self.iter_trees():
91 - for package in tree.iter_packages():
92 - yield package
93 -
94 - def iter_ebuilds(self):
95 - for tree in self.iter_trees():
96 - for ebuild in tree.iter_ebuilds():
97 - yield ebuild
98 -
99 def iter_use_desc(self):
100 for tree in self.iter_trees():
101 yield tree.use_desc
102 @@ -224,9 +231,15 @@ class Portage(object):
103 def dict_repos(self):
104 return self.treemap
105
106 + def __unicode__(self):
107 + return u'portage'
108 +
109
110 -class PortTree(ToStrMixin):
111 +class PortTree(ToStrMixin, AutoGeneratorMixin):
112 "Represent portage tree as object"
113 +
114 + main_iterator = 'iter_categories'
115 + generator_names = ('iter_packages', 'iter_ebuilds')
116
117 def __init__(self, tree_path = '/usr/portage', name = 'main'):
118 """Args:
119 @@ -241,16 +254,6 @@ class PortTree(ToStrMixin):
120 if os.path.isdir(os.path.join(self.porttree_path, category)):
121 yield Category(self, category)
122
123 - def iter_packages(self):
124 - for category in self.iter_categories():
125 - for package in category.iter_packages():
126 - yield package
127 -
128 - def iter_ebuilds(self):
129 - for package in self.iter_packages():
130 - for ebuild in package.iter_ebuilds():
131 - yield ebuild
132 -
133 def __unicode__(self):
134 return self.name
135
136 @@ -304,10 +307,13 @@ class CategoryMetadata(ToStrMixin):
137 return unicode(self._metadata_path)
138
139
140 -class Category(ToStrMixin):
141 +class Category(ToStrMixin, AutoGeneratorMixin):
142 "Represent category of portage tree as object"
143
144 __slots__ = ('porttree', 'category', '_cache')
145 +
146 + main_iterator = 'iter_packages'
147 + generator_names = ('iter_ebuilds', )
148
149 def __init__(self, porttree, category):
150 """Args: