-
Notifications
You must be signed in to change notification settings - Fork 1
/
Configuration.py
115 lines (82 loc) · 3.31 KB
/
Configuration.py
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import xml.etree.ElementTree
from gt import *
class Configuration:
def __init__(self):
self._maxFileSize = None # 500 * 1024 * 1024; # 500 MB
self._masksExclude = []
self._masksInclude = []
self._wordGroups = {}
self._bannedFoldersLowercase = set()
def __appendWord__(self, wordGroup, word):
self._wordGroups.setdefault(wordGroup, [])
self._wordGroups[wordGroup].append(word)
@property
def maxFileSize(self):
return self._maxFileSize
@property
def masksExlude(self):
return self._masksExclude
@property
def masksInclude(self):
return self._masksInclude
@property
def bannedFoldersLowercase(self):
return self._bannedFoldersLowercase
@property
def hasBannedFolders(self):
return len(self._bannedFoldersLowercase) > 0
@property
def hasWordGroups(self):
return len(self._wordGroups) > 0
def words(self, key):
if not self._wordGroups.has_key(key):
raise AssertionError('"{0}" is not a WordGroup name in the configuration file'.format(key))
else:
return self._wordGroups[key]
def read(self, fileName):
def DoFileConstraints(node, attributes):
def listMasks(node, element):
for masks in node.findall(element):
for mask in masks.text.split(';'):
if not mask:
continue
yield mask
def DoMaxSize(node, attributes, value):
self._maxFileSize = gt.convert.StringToBytes(value)
def DoMasks(node, attributes, value):
for mask in listMasks(node, 'Exclude'):
self._masksExclude.append(mask)
for mask in listMasks(node, 'Include'):
self._masksInclude.append(mask)
def DoBannedFolders(node, attributes, value):
for folder in node.findall('Folder'):
if not folder.text:
continue
self._bannedFoldersLowercase.add(folder.text.lower())
subgroups = {
"MaxSize": DoMaxSize,
"Masks": DoMasks,
"BannedFolders": DoBannedFolders,
}
for child in node:
f = subgroups.get(child.tag, lambda n, a, t : "")
f(child, child.attrib, child.text)
return
def DoWordGroup(node, attributes):
for word in node.findall('Word'):
self.__appendWord__(attributes['name'], word.text)
try:
root = xml.etree.ElementTree.parse(fileName).getroot()
except xml.etree.ElementTree.ParseError as e:
raise AssertionError('Unable to read the configuration file "%s". %s' % (fileName, e.message))
if (root.tag != "Configuration"):
raise AssertionError("<Configuration> root not found in configuration file. Review the configuration file format (use --help parameter)")
sys.exit(2)
subgroups = {
"FileConstraints": DoFileConstraints,
"WordGroup": DoWordGroup,
}
for child in root:
f = subgroups.get(child.tag, lambda n, a : "")
f(child, child.attrib)
return