924fb0c11aa14e5b473f1f57c306ac77f484e96b
[plcapi.git] / PLC / Ilinks.py
1 # $Id$
2 #
3 # Thierry Parmentelat - INRIA
4 #
5 # $Revision: 9423 $
6 #
7 from PLC.Faults import *
8 from PLC.Parameter import Parameter
9 from PLC.Filter import Filter
10 from PLC.Table import Row, Table
11 from PLC.Interfaces import Interface, Interfaces
12 from PLC.TagTypes import TagType, TagTypes
13
14 class Ilink(Row):
15     """
16     Representation of a row in the ilink table.
17     To use, instantiate with a dict of values.
18     """
19
20     table_name = 'ilink'
21     primary_key = 'ilink_id'
22     fields = {
23         'ilink_id': Parameter(int, "ilink identifier"),
24         'tag_type_id': TagType.fields['tag_type_id'],
25         'src_interface_id': Parameter(int, "source interface identifier"),
26         'dst_interface_id': Parameter(int, "destination interface identifier"),
27         'value': Parameter( str, "optional ilink value"),
28         }
29
30 class Ilinks(Table):
31     """
32     Representation of row(s) from the ilink table in the
33     database.
34     """
35
36     def __init__(self, api, ilink_filter = None, columns = None):
37         Table.__init__(self, api, Ilink, columns)
38
39         sql = "SELECT %s FROM view_ilinks WHERE True" % \
40               ", ".join(self.columns)
41
42         if ilink_filter is not None:
43             if isinstance(ilink_filter, (list, tuple, set)):
44                 ilink_filter = Filter(Ilink.fields, {'ilink_id': ilink_filter})
45             elif isinstance(ilink_filter, dict):
46                 ilink_filter = Filter(Ilink.fields, ilink_filter)
47             elif isinstance(ilink_filter, int):
48                 ilink_filter = Filter(Ilink.fields, {'ilink_id': [ilink_filter]})
49             else:
50                 raise PLCInvalidArgument, "Wrong ilink filter %r"%ilink_filter
51             sql += " AND (%s) %s" % ilink_filter.sql(api)
52
53
54         self.selectall(sql)