Setting tag plcapi-4.3-37
[plcapi.git] / PLC / NodeTags.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.Nodes import Node, Nodes
13 from PLC.TagTypes import TagType, TagTypes
14
15 class NodeTag(Row):
16     """
17     Representation of a row in the node_tag.
18     To use, instantiate with a dict of values.
19     """
20
21     table_name = 'node_tag'
22     primary_key = 'node_tag_id'
23     fields = {
24         'node_tag_id': Parameter(int, "Node tag identifier"),
25         'node_id': Node.fields['node_id'],
26         'hostname' : Node.fields['hostname'],
27         'tag_type_id': TagType.fields['tag_type_id'],
28         'value': Parameter(str, "Node tag value"),
29         'tagname': TagType.fields['tagname'],
30         'description': TagType.fields['description'],
31         'category': TagType.fields['category'],
32         'min_role_id': TagType.fields['min_role_id'],
33         }
34
35 class NodeTags(Table):
36     """
37     Representation of row(s) from the node_tag table in the
38     database.
39     """
40
41     def __init__(self, api, node_tag_filter = None, columns = None):
42         Table.__init__(self, api, NodeTag, columns)
43
44         sql = "SELECT %s FROM view_node_tags WHERE True" % \
45               ", ".join(self.columns)
46
47         if node_tag_filter is not None:
48             if isinstance(node_tag_filter, (list, tuple, set)):
49                 node_tag_filter = Filter(NodeTag.fields, {'node_tag_id': node_tag_filter})
50             elif isinstance(node_tag_filter, dict):
51                 node_tag_filter = Filter(NodeTag.fields, node_tag_filter)
52             elif isinstance(node_tag_filter, int):
53                 node_tag_filter = Filter(NodeTag.fields, {'node_tag_id': [node_tag_filter]})
54             else:
55                 raise PLCInvalidArgument, "Wrong node tag filter %r"%node_tag_filter
56             sql += " AND (%s) %s" % node_tag_filter.sql(api)
57
58
59         self.selectall(sql)