2 # Thierry Parmentelat - INRIA
4 from PLC.Faults import *
5 from PLC.Parameter import Parameter
6 from PLC.Filter import Filter
7 from PLC.Storage.AlchemyObject import AlchemyObj
8 from PLC.TagTypes import TagType, TagTypes
9 from PLC.Interfaces import Interface
11 class InterfaceTag(AlchemyObj):
13 Representation of a row in the interface_tag.
14 To use, instantiate with a dict of values.
17 table_name = 'interface_tags'
19 'interface_tag_id': Parameter(int, "Interface setting identifier", primary_key=True),
20 'interface_id': Interface.fields['interface_id'],
21 'ip': Interface.fields['ip'],
22 'tag_type_id': TagType.fields['tag_type_id'],
23 'tagname': TagType.fields['tagname'],
24 'description': TagType.fields['description'],
25 'category': TagType.fields['category'],
26 'value': Parameter(str, "Interface setting value"),
31 def sync(self, commit = True, validate=True):
32 AlchemyObj.sync(self, commit, validate)
33 if 'interface_tag_id' not in self:
34 # Before a new slice is added, delete expired slices
35 #expired = Slices(self.api, expires = -int(time.time()))
36 #for slice in expired:
37 # slice.delete(commit)
38 AlchemyObj.insert(self, dict(self))
40 AlchemyObj.update(self, {'interface_tag_id': self['interface_tag_id']}, dict(self))
42 def delete(self, commit=True):
43 assert 'interface_tag_id' in self
44 AlchemyObj.delete(self, dict(self))
47 class InterfaceTags(list):
49 Representation of row(s) from the interface_tag table in the
53 def __init__(self, api, interface_tag_filter = None, columns = None):
54 if not interface_tag_filter:
55 interface_tags = InterfaceTag().select()
56 if isinstance(interface_tag_filter, (list, tuple, set, int, long)):
57 interface_tags = InterfaceTag().select(filter={'interface_tag_id': interface_tag_filter})
58 elif isinstance(interface_tag_filter, dict):
59 interface_tags = InterfaceTag().select(filter=interface_tag_filter})
61 raise PLCInvalidArgument, "Wrong interface setting filter %r"%interface_tag_filter
63 for interface_tag in interface_tags:
64 self.append(interface_tag)