1 |
commit: 2ff1d2399d0d6fb40823546170295f24105d7189 |
2 |
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org> |
3 |
AuthorDate: Fri Jun 1 16:16:59 2012 +0000 |
4 |
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua> |
5 |
CommitDate: Fri Jun 1 16:16:59 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=2ff1d239 |
7 |
|
8 |
Layer for work with herds. |
9 |
|
10 |
--- |
11 |
gpackages/libs/herds.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++ |
12 |
1 files changed, 51 insertions(+), 0 deletions(-) |
13 |
|
14 |
diff --git a/gpackages/libs/herds.py b/gpackages/libs/herds.py |
15 |
new file mode 100644 |
16 |
index 0000000..c123814 |
17 |
--- /dev/null |
18 |
+++ b/gpackages/libs/herds.py |
19 |
@@ -0,0 +1,51 @@ |
20 |
+try: |
21 |
+ import xml.etree.cElementTree as etree |
22 |
+except (ImportError, SystemError): |
23 |
+ import xml.etree.ElementTree as etree |
24 |
+ |
25 |
+ |
26 |
+def _gen_func(name): |
27 |
+ return lambda self: getattr(self, name) |
28 |
+ |
29 |
+class AbstarctXmlObject(object): |
30 |
+ attrs = () |
31 |
+ |
32 |
+ def __new__(cls, *args, **kwargs): |
33 |
+ for val in cls.attrs: |
34 |
+ setattr(cls, val, property(_gen_func('_'+val))) |
35 |
+ ins = super(AbstarctXmlObject, cls).__new__(cls, *args, **kwargs) |
36 |
+ #attrs = getattr(ins, 'attrs') |
37 |
+ return ins |
38 |
+ |
39 |
+ def __init__(self, xml_object): |
40 |
+ for val in self.attrs: |
41 |
+ obj_xml = xml_object.find(val) |
42 |
+ setattr(self, '_' + val, None) |
43 |
+ if obj_xml is not None: |
44 |
+ setattr(self, '_' + val, obj_xml.text) |
45 |
+ |
46 |
+class Maintainer(AbstarctXmlObject): |
47 |
+ attrs = ('name', 'email', 'role') |
48 |
+ |
49 |
+class Herd(AbstarctXmlObject): |
50 |
+ # create name, email and description property |
51 |
+ attrs = ('name', 'email', 'description') |
52 |
+ |
53 |
+ def __init__(self, xml_object): |
54 |
+ super(Herd, self).__init__(xml_object) |
55 |
+ self._iter_maintainer = xml_object.iterfind('maintainer') |
56 |
+ |
57 |
+ def iter_mainteiner(self): |
58 |
+ for maintainer_tree in self._iter_maintainer: |
59 |
+ yield Maintainer(maintainer_tree) |
60 |
+ |
61 |
+ |
62 |
+class Herds(object): |
63 |
+ def __init__(self, herd_path='/usr/portage/metadata/herds.xml'): |
64 |
+ self._herd_path = herd_path |
65 |
+ self._herd_parse = etree.parse(herd_path) |
66 |
+ self._iter_herd = self._herd_parse.iterfind('herd') |
67 |
+ |
68 |
+ def iter_herd(self): |
69 |
+ for herd_tree in self._iter_herd: |
70 |
+ yield Herd(herd_tree) |