1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
import sys
import pprint
import ConfigParser
from gentoostats.environment import Environment
from gentoostats.packages import Packages
from gentoostats.metadata import Metadata
class Payload(object):
def __init__(self, configfile):
self.config = ConfigParser.ConfigParser()
if len(self.config.read(configfile)) == 0:
sys.stderr.write('Cannot read ' + configfile)
sys.exit(1)
self.payload = dict()
self.payload['PROTOCOL'] = 1
self.update()
def __masked(self, section, item):
try:
return not self.config.getboolean(section, item)
except ConfigParser.NoOptionError:
return False
except (ConfigParser.NoSectionError, ValueError):
sys.stderr.write('Malformed payload config')
sys.exit(1)
def update(self):
env = Environment()
self.payload['PLATFORM'] = 'Unknown' if self.__masked('ENV','PLATFORM') else env.getPlatform()
self.payload['LASTSYNC'] = 'Unknown' if self.__masked('ENV','LASTSYNC') else env.getLastSync()
self.payload['PROFILE'] = 'Unknown' if self.__masked('ENV','PROFILE') else env.getProfile()
for var in ['ARCH','CHOST','CFLAGS','CXXFLAGS','FFLAGS','LDFLAGS','MAKEOPTS','SYNC']:
self.payload[var] = None if self.__masked('ENV',var) else env.getVar(var)
for var in ['ACCEPT_KEYWORDS','LANG','GENTOO_MIRRORS','FEATURES','USE']:
self.payload[var] = [] if self.__masked('ENV',var) else env.getVar(var).split()
self.payload['PACKAGES'] = dict()
for cpv in Packages().getInstalledCPVs():
m = Metadata(cpv)
p = dict()
p['REPO'] = None if self.__masked('PACKAGES','REPO') else m.getRepoName()
p['KEYWORD'] = None if self.__masked('PACKAGES','KEYWORD') else m.getKeyword()
p['USE'] = dict()
p['USE']['PLUS'] = [] if self.__masked('PACKAGES','USE_PLUS') else m.getPlusFlags()
p['USE']['MINUS'] = [] if self.__masked('PACKAGES','USE_MINUS') else m.getMinusFlags()
p['USE']['UNSET'] = [] if self.__masked('PACKAGES','USE_UNSET') else m.getUnsetFlags()
p['COUNTER'] = None if self.__masked('PACKAGES','COUNTER') else m.getCounter()
p['SIZE'] = None if self.__masked('PACKAGES','SIZE') else m.getSize()
p['BUILD_TIME'] = None if self.__masked('PACKAGES','BUILD_TIME') else m.getBuildTime()
self.payload['PACKAGES'][cpv] = p
def get(self):
return self.payload
def dump(self,human=False):
if human:
pprint.pprint(self.payload)
else:
print self.payload
|