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',) |