/[qa]/trunk/carnivore/carnivore.py
ViewVC logotype

Contents of /trunk/carnivore/carnivore.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2360 - (hide annotations) (download) (as text)
Sat Mar 6 11:35:07 2010 UTC (3 years, 2 months ago) by jhr
File MIME type: text/x-python
File size: 4189 byte(s)
Make needs-orphan output better
1 jeroen 1241 #!/usr/bin/python
2    
3     # Utility functions to use carnivore
4     # Copyright (C) 2006 Jeroen van Wolffelaar <jeroen@wolffelaar.nl>
5     # $Id$
6    
7     # This program is free software; you can redistribute it and/or modify
8     # it under the terms of the GNU General Public License as published by
9     # the Free Software Foundation; either version 2 of the License, or
10     # (at your option) any later version.
11    
12     # This program is distributed in the hope that it will be useful,
13     # but WITHOUT ANY WARRANTY; without even the implied warranty of
14     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15     # GNU General Public License for more details.
16    
17     # You should have received a copy of the GNU General Public License
18     # along with this program; if not, write to the Free Software
19     # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20    
21 jeroen 1256 import os, sys, bsddb, sets
22 jeroen 1241 import apt_pkg
23    
24 myon 1482 carnivore = bsddb.btopen("/org/qa.debian.org/carnivore/result.db", "r")
25 jeroen 1241
26     def join(sep, items):
27 jeroen 1250 return reduce(lambda a, b: a+sep+b, items)
28 jeroen 1241
29 jeroen 1256 class carnivoreEntry:
30     def __init__(self, v):
31     if not isinstance(v, tuple):
32     raise "Not a carnivore typle"
33    
34 jeroen 1258 self.id = v[0]
35 jeroen 1475 (self.ldap, self.realname, self.gpg, self.email, self.package) = [], [], [], [], []
36 jeroen 1256 (self.extra, self.expl, self.warnings, self.mia) = [], [], [], []
37     self.gecos = ""
38     self.keyring = {'keyring': [], 'emeritus': [], 'removed': [], 'ldap': []}
39     for item in sets.Set(v[1]+v[2]):
40     if item.startswith("ldap:"):
41     self.ldap.append(item[5:])
42     elif item.startswith("email:"):
43     self.email.append(item[6:])
44     elif item.startswith("realname:"):
45     self.realname.append(item[9:])
46     elif item.startswith("maint:"):
47     self.package.append(item[6:])
48 jeroen 1475 elif item.startswith("gpg:"):
49     self.gpg.append(item[4:])
50 jeroen 1256 elif item.startswith("x:"):
51     self.expl.append(item[2:])
52     if item.startswith("x:ldap:gpg:"):
53     self.keyring['ldap'].append(item[11:].split(':')[1])
54     if item.startswith("x:gpg:keyring:"):
55     gpg, ring = item[14:].split(':')
56     self.keyring[ring].append(gpg)
57     if item.startswith("x:ldap:realname:"):
58     self.gecos = item[16:].split(':')[1]
59     else:
60     self.extra.append(item)
61     for ring in self.keyring.values(): ring.sort()
62    
63 jhr 2360 def __repr__(self):
64     if self.ldap:
65     return self.ldap[0]
66     return self.email[0]
67    
68 jeroen 1256 def getPrettyprintedText(self):
69     text = ""
70     if self.ldap: text += "DD: "+self.gecos+" <"+self.ldap[0]+"@debian.org>\n"
71     if self.realname: text += "Known as: "+", ".join(self.realname)+"\n"
72     if self.email: text += "Using emails: "+", ".join(self.email)+"\n"
73     for k, v in self.keyring.iteritems():
74     for key in v:
75     text += "Key in "+k+": "+key+"\n"
76     p = "0"
77     if self.package and len(self.package) <= 5:
78     p = "%s (%s)" % (len(self.package), ", ".join(self.package))
79     elif self.package:
80     p = "%s (%s)" % (len(self.package), ", ".join(self.package[:4]+["..."]))
81     text += "Packages: %s\n" % p
82 jeroen 1475 if self.extra:
83     for i in self.extra:
84     text += i + "\n"
85    
86 jeroen 1256 return text
87    
88     def search(key):
89 jeroen 1250 if not carnivore.has_key(key):
90 jeroen 1256 return []
91 jeroen 1250 while 1:
92 jeroen 1256 lastkey = key
93 jeroen 1250 key = carnivore[key]
94 jeroen 1256 if key[0] == "(":
95     return [lastkey]
96     elif key[0] == "[":
97 jeroen 1250 return eval(key)
98 jeroen 1241
99 jeroen 1256 def get(key):
100     while 1:
101     key = carnivore[key]
102     if key[0] == "(":
103     return carnivoreEntry(eval(key))
104     elif key[0] == "[":
105     raise "%s is not an id of a real carnivore entry" % key
106    
107 jeroen 1249 class iteritems:
108 jeroen 1250 def __init__(this):
109     this.iter = carnivore.iteritems()
110 jeroen 1249 def __iter__(this): return this
111     def next(this):
112     while 1:
113     key, val = this.iter.next()
114     if val[0] == '(':
115 jeroen 1256 return key, carnivoreEntry(eval(val))
116 jeroen 1250
117     # vim: et

Properties

Name Value
svn:eol-style native
svn:executable *
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.5