File: RuleList.py

package info (click to toggle)
cherokee 0.7.2-4
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 8,808 kB
  • ctags: 6,577
  • sloc: ansic: 45,071; python: 9,628; sh: 9,468; makefile: 1,639; xml: 61; perl: 32
file content (83 lines) | stat: -rw-r--r-- 2,309 bytes parent folder | download
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
class RuleList:
    def __init__ (self, cfg, prefix):
        self._cfg     = cfg
        self._cfg_pre = prefix

        self._normalize()

    def _normalize (self):
        if not self._cfg[self._cfg_pre]:
            return 

        # Build the new list
        child = []
        to_be_deleted = []
        for ns in self:
            pre = '%s!%s' % (self._cfg_pre, ns)
            entry = self._cfg[pre]
            child.append(entry)
            to_be_deleted.append(ns)
        child.reverse()

        # Delete old child
        for n in to_be_deleted:
            del (self._cfg["%s!%s" % (self._cfg_pre, n)])

        # Set the new childs
        i = 100
        for item in child:
            pre = '%s!%d' % (self._cfg_pre, i)
            self._cfg.set_sub_node (pre, item)
            i += 100

    def __iter__ (self):
        tmp = self._cfg[self._cfg_pre]
        if tmp:
            keys = [int(x) for x in tmp.keys()]
            keys.sort (reverse=True) 
            for k in keys:
                yield str(k)

    def __len__ (self):
        tmp = self._cfg[self._cfg_pre]
        if not tmp: return 0
        return len(tmp.keys())

    def keys (self):
        tmp = self._cfg[self._cfg_pre]
        if not tmp: return []
        return tmp.keys()

    def __getitem__ (self, prio):
        return self._cfg['%s!%s' % (self._cfg_pre, str(prio))]

    def get_highest_priority(self):
        keys = self._cfg[self._cfg_pre].keys()
        if not keys:
            return 100
        tmp = [int(x) for x in keys]
        tmp.sort()
        return tmp[-1]

    def change_prios (self, changes):
        # Build the new child list
        relocated = {}
        for change in changes:
            old, new = int(change[0]), int(change[1])
            if old != new:
                relocated[new] = self[old]

        # Add any missing child nodes
        for entry in self:
            p_entry = int(entry)
            if p_entry not in relocated.keys():
                relocated[p_entry] = self[entry]
                
        # Resign childs
        for p in self.keys():
            del (self._cfg["%s!%s" % (self._cfg_pre, p)])

        for item in relocated.keys():
            pre = '%s!%d' % (self._cfg_pre, item)
            self._cfg.set_sub_node (pre, relocated[item])