~udienz/sedot/test

23 by Fajran Iman Rusadi
Report generator (first draft)
1
import os
2
from sedot import SEDOT_BASE
24 by Fajran Iman Rusadi
Report generator updated
3
from status import PackageStatus, NoStatusError
4
23 by Fajran Iman Rusadi
Report generator (first draft)
5
__all__ = ['Package', 'NoPackageError']
6
7
8
class NoPackageError(Exception):
9
	def __init__(self, value):
10
		self.value = value
11
	
12
	def __str__(self):
13
		print repr(self.value)
14
	
15
class MirrorSize:
43.1.3 by Fajran Iman Rusadi
Mirror size report generator
16
17
	def __init__(self, package):
18
		self.package = package
19
		self._load()
20
21
		self.size = None
22
		self.time = None
23
43.1.7 by Fajran Iman Rusadi
- Fix bugs
24
		self._load()
25
	
43.1.3 by Fajran Iman Rusadi
Mirror size report generator
26
	def _load(self):
27
		global SEDOT_BASE
28
		dir = os.path.join(SEDOT_BASE, "log", "mirror-size")
29
30
		logname = os.path.join(dir, "%s.log" % self.package)
31
32
		if not os.path.isfile(logname):
33
			return
34
		
35
		lines = open(logname).readlines()[-1]
36
43.1.9 by Fajran Iman Rusadi
Fix bug
37
		try:
38
			(time, size) = lines.split(" ")
45 by Fajran Iman Rusadi
Anticipate if the value in the mirror-size's *.log file is not valid
39
			self.time = int(time)
43.1.9 by Fajran Iman Rusadi
Fix bug
40
			self.size = float(size)
41
		except ValueError:
42
			self.time = None
43
			self.size = None
44
43.1.3 by Fajran Iman Rusadi
Mirror size report generator
45
	def __str__(self):
46
		return str(self.size)
47
23 by Fajran Iman Rusadi
Report generator (first draft)
48
class Package:
49
50
	def __init__(self, package):
51
		self.package = package
52
53
		self.status = None
54
55
		self._load()
56
57
	def _load(self):
58
		global SEDOT_BASE
59
		self.dir = os.path.join(SEDOT_BASE, "pkgs", self.package)
60
61
		if not os.path.isdir(self.dir):
62
			raise NoPackageError(self.package)
63
64
		self.source = self._read("source")
65
		self.target = self._read("target")
66
		self.method = self._read("method")
67
		self.name = self._read("name")
68
		self.cron = self._read("cron")
69
		self.color = self._read_color("color")
43.1.3 by Fajran Iman Rusadi
Mirror size report generator
70
		self.urls = self._read_urls("url")
62 by Fajran Iman Rusadi
- Summary page
71
43.1.3 by Fajran Iman Rusadi
Mirror size report generator
72
		self.size = MirrorSize(self.package)
73
	
23 by Fajran Iman Rusadi
Report generator (first draft)
74
	def _read(self, file):
75
		fname = os.path.join(self.dir, file)
43.1.4 by Fajran Iman Rusadi
Color file checking
76
77
		if os.path.isfile(fname):
43.1.5 by Fajran Iman Rusadi
Check missing file
78
			f = open(fname)
79
			for line in f.readlines():
80
				line = line.strip()
81
				if len(line) > 0 and line[0] != '#':
84 by Mahyuddin Susanto
add documentation
82
					return line
43.1.5 by Fajran Iman Rusadi
Check missing file
83
		
43.1.3 by Fajran Iman Rusadi
Mirror size report generator
84
		return None
85
	
86
	def _read_color(self, file):
87
		fname = os.path.join(self.dir, file)
43.1.5 by Fajran Iman Rusadi
Check missing file
88
89
		if os.path.isfile(fname):
90
			f = open(fname)
91
			for line in f.readlines():
92
				line = line.strip()
93
				if line[0] != '':
94
					return line
95
		
96
		return "#FF0000"
97
23 by Fajran Iman Rusadi
Report generator (first draft)
98
	def _read_urls(self, file):
62 by Fajran Iman Rusadi
- Summary page
99
		fname = os.path.join(self.dir, file)
100
101
		res = {
102
			'http': None,
103
			'ftp': None,
104
			'rsync': None
105
		}
106
		
107
		if os.path.isfile(fname):
108
			f = open(fname)
109
			for line in f.readlines():
110
				line = line.strip()
111
				if line[0:7] == 'http://' and res['http'] == None:
112
					res['http'] = line
113
				elif line[0:6] == 'ftp://' and res['ftp'] == None:
114
					res['ftp'] = line
115
				elif line[0:8] == 'rsync://' and res['rsync'] == None:
116
					res['rsync'] = line
117
		
118
		return res
119
120
	def load_status(self):
23 by Fajran Iman Rusadi
Report generator (first draft)
121
		
122
		try:
24 by Fajran Iman Rusadi
Report generator updated
123
			self.status = PackageStatus(self.package)
124
		except NoStatusError:
125
			self.status = None
126
23 by Fajran Iman Rusadi
Report generator (first draft)
127
			
128