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: Sun, 03 Jun 2012 13:20:02
Message-Id: 1338665057.50d5fdbe69872b2bf509cf9c8a9efb4845bd924c.bacher09@gentoo
1 commit: 50d5fdbe69872b2bf509cf9c8a9efb4845bd924c
2 Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
3 AuthorDate: Sat Jun 2 19:24:17 2012 +0000
4 Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
5 CommitDate: Sat Jun 2 19:24:17 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=50d5fdbe
7
8 Changes in libs for working with portage tree.
9
10 ---
11 gpackages/libs/generic.py | 8 ++++++++
12 gpackages/libs/herds.py | 42 ++++++++++++++++++++++++++++++++++++++----
13 gpackages/libs/porttree.py | 8 +-------
14 3 files changed, 47 insertions(+), 11 deletions(-)
15
16 diff --git a/gpackages/libs/generic.py b/gpackages/libs/generic.py
17 new file mode 100644
18 index 0000000..7fe9cc8
19 --- /dev/null
20 +++ b/gpackages/libs/generic.py
21 @@ -0,0 +1,8 @@
22 +
23 +class ToStrMixin(object):
24 + def __str__(self):
25 + return unicode(self).encode('utf-8')
26 +
27 + def __repr__(self):
28 + return '<%s %s>' % (type(self).__name__, self.__str__())
29 +
30
31 diff --git a/gpackages/libs/herds.py b/gpackages/libs/herds.py
32 index c123814..b1e596b 100644
33 --- a/gpackages/libs/herds.py
34 +++ b/gpackages/libs/herds.py
35 @@ -3,6 +3,8 @@ try:
36 except (ImportError, SystemError):
37 import xml.etree.ElementTree as etree
38
39 +from collections import defaultdict
40 +from generic import ToStrMixin
41
42 def _gen_func(name):
43 return lambda self: getattr(self, name)
44 @@ -24,10 +26,22 @@ class AbstarctXmlObject(object):
45 if obj_xml is not None:
46 setattr(self, '_' + val, obj_xml.text)
47
48 -class Maintainer(AbstarctXmlObject):
49 +class Maintainer(AbstarctXmlObject, ToStrMixin):
50 attrs = ('name', 'email', 'role')
51
52 -class Herd(AbstarctXmlObject):
53 + def __eq__(self, other):
54 + return self.email == other.email
55 +
56 + def __ne__(self, other):
57 + return self.email != other.email
58 +
59 + def __hash__(self):
60 + return hash(self.email)
61 +
62 + def __unicode__(self):
63 + return self.email
64 +
65 +class Herd(AbstarctXmlObject, ToStrMixin):
66 # create name, email and description property
67 attrs = ('name', 'email', 'description')
68
69 @@ -39,13 +53,33 @@ class Herd(AbstarctXmlObject):
70 for maintainer_tree in self._iter_maintainer:
71 yield Maintainer(maintainer_tree)
72
73 + def __unicode__(self):
74 + return self.name
75 +
76
77 class Herds(object):
78 def __init__(self, herd_path='/usr/portage/metadata/herds.xml'):
79 self._herd_path = herd_path
80 self._herd_parse = etree.parse(herd_path)
81 - self._iter_herd = self._herd_parse.iterfind('herd')
82 + self._herds_dict = None
83
84 def iter_herd(self):
85 - for herd_tree in self._iter_herd:
86 + for herd_tree in self._herd_parse.iterfind('herd'):
87 yield Herd(herd_tree)
88 +
89 + def get_herds_indict(self):
90 + if self._herds_dict is not None:
91 + return self._herds_dict
92 + res = {}
93 + for herd in self.iter_herd():
94 + res[herd.name] = herd
95 + self._herds_dict = res
96 + return res
97 +
98 + def get_maintainers_with_hers(self):
99 + herd_dict = self.get_herds_indict()
100 + maintainer_dict = defaultdict(list)
101 + for herd in herd_dict.itervalues():
102 + for maintainer in herd.iter_mainteiner():
103 + maintainer_dict[maintainer].append(herd.name)
104 + return maintainer_dict
105
106 diff --git a/gpackages/libs/porttree.py b/gpackages/libs/porttree.py
107 index 0a5b0fc..3f1f1f6 100644
108 --- a/gpackages/libs/porttree.py
109 +++ b/gpackages/libs/porttree.py
110 @@ -6,6 +6,7 @@ from portage.exception import PortageException, FileNotFound, InvalidAtom, \
111
112 from gentoolkit.package import Package as PackageInfo
113 from gentoolkit.metadata import MetaData
114 +from generic import ToStrMixin
115 from datetime import datetime
116 import hashlib
117 import os
118 @@ -47,13 +48,6 @@ def file_mtime(file_path):
119 else:
120 return None
121
122 -class ToStrMixin(object):
123 - def __str__(self):
124 - return unicode(self).encode('utf-8')
125 -
126 - def __repr__(self):
127 - return '<%s %s>' % (type(self).__name__, self.__str__())
128 -
129 class Use(ToStrMixin):
130 __slots__ = ('name',)