]> git.llucax.com Git - software/pymin.git/blob - services/qos/cls.py
Split qos handler in submodules (refs #2).
[software/pymin.git] / services / qos / cls.py
1 # vim: set encoding=utf-8 et sw=4 sts=4 :
2
3 from pymin.seqtools import Sequence
4 from pymin.dispatcher import handler
5 from pymin.service.util import SubHandler, ContainerNotFoundError, \
6                                ItemNotFoundError, ItemAlreadyExistsError
7
8 __all__ = ('ClassHandler',)
9
10
11 class Class(Sequence):
12
13     def __init__(self, cid, rate=None):
14         self.cid = cid
15         self.rate = rate
16         self.hosts = dict()
17
18     def as_tuple(self):
19         return (self.cid, self.rate)
20
21     def __cmp__(self, other):
22         if self.cid == other.cid:
23             return 0
24         return cmp(id(self), id(other))
25
26
27 class ClassHandler(SubHandler):
28
29     def __init__(self, parent):
30         self.parent = parent
31
32     @handler('Adds a class : add <id> <device> <rate>')
33     def add(self, dev, cid, rate):
34         if not dev in self.parent.devices:
35             raise ContainerNotFoundError(dev)
36
37         try:
38             self.parent.devices[dev].classes[cid] = Class(cid, rate)
39         except ValueError:
40             raise ItemAlreadyExistsError(cid  + ' -> ' + dev)
41
42     @handler(u'Deletes a class : delete <id> <device>')
43     def delete(self, dev, cid):
44         if not dev in self.parent.devices:
45             raise ContainerNotFoundError(dev)
46
47         try:
48             del self.parent.devices[dev].classes[cid]
49         except KeyError:
50             raise ItemNotFoundError(cid + ' -> ' + dev)
51
52     @handler(u'Lists classes : list <dev>')
53     def list(self, dev):
54         try:
55             k = self.parent.devices[dev].classes.items()
56         except KeyError:
57             k = dict()
58         return k
59