2 # Thierry Parmentelat - INRIA
4 from PLC.Faults import *
5 from PLC.Parameter import Parameter
6 from PLC.Storage.AlchemyObject import AlchemyObj
7 from PLC.Nodes import Node, Nodes
8 from PLC.TagTypes import TagType, TagTypes
10 class NodeTag(AlchemyObj):
12 Representation of a row in the node_tag.
13 To use, instantiate with a dict of values.
16 tablename = 'node_tags'
18 'node_tag_id': Parameter(int, "Node tag identifier", primary_key=True),
19 'node_id': Node.fields['node_id'],
20 'hostname' : Node.fields['hostname'],
21 'tag_type_id': TagType.fields['tag_type_id'],
22 'value': Parameter(str, "Node tag value"),
23 'tagname': TagType.fields['tagname'],
24 'description': TagType.fields['description'],
25 'category': TagType.fields['category'],
28 def sync(self, commit=True, validate=True):
29 AlchemyObj.sync(self, commit=commit, validate=validate)
30 if 'node_tag_id' not in self:
31 AlchemyObj.insert(self, dict(self))
33 AlchemyObj.update(self, {'node_tag_id': self['node_tag_id']}, dict(self))
35 def delete(self, commit=True):
36 assert 'node_tag_id' in self
37 AlchemyObj.delete(self, dict(self))
41 Representation of row(s) from the node_tag table in the
45 def __init__(self, api, node_tag_filter = None, columns = None):
47 if not node_tag_filter:
48 node_tags = NodeTag().select()
49 elif isinstance(node_tag_filter, (list, tuple, set, int, long)):
50 node_tags = NodeTag().select(filter={'node_tag_id': node_tag_filter})
51 elif isinstance(node_tag_filter, dict):
52 node_tags = NodeTag().select(filter=node_tag_filter)
54 raise PLCInvalidArgument, "Wrong node tag filter %r"%node_tag_filter
56 self.extend(node_tags)