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