added create_network(), delete_network(), create_subnet(), delete_subnet(), process_t...
[plcapi.git] / PLC / InterfaceTags.py
1 #
2 # Thierry Parmentelat - INRIA
3 #
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
10
11 class InterfaceTag(AlchemyObj):
12     """
13     Representation of a row in the interface_tag.
14     To use, instantiate with a dict of values.
15     """
16
17     table_name = 'interface_tags'
18     fields = {
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"),
27         ### relations
28
29         }
30
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))
39         else:
40             AlchemyObj.update(self, {'interface_tag_id': self['interface_tag_id']}, dict(self))
41
42     def delete(self, commit=True):
43         assert 'interface_tag_id' in self
44         AlchemyObj.delete(self, dict(self))        
45
46
47 class InterfaceTags(list):
48     """
49     Representation of row(s) from the interface_tag table in the
50     database.
51     """
52
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)
60         else:
61             raise PLCInvalidArgument, "Wrong interface setting filter %r"%interface_tag_filter
62
63         for interface_tag in interface_tags:
64             self.append(interface_tag)