2 # Thierry Parmentelat - INRIA
4 from PLC.Faults import *
5 from PLC.Parameter import Parameter
6 from PLC.Storage.AlchemyObj 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 AlchemyObj.delete(self, dict(self))
40 Representation of row(s) from the node_tag table in the
44 def __init__(self, api, node_tag_filter = None, columns = None):
46 if not node_tag_filter:
47 node_tags = NodeTag().select()
48 elif isinstance(node_tag_filter, (list, tuple, set, int, long)):
49 node_tags = NodeTag().select(filter={'node_tag_id': node_tag_filter})
50 elif isinstance(node_tag_filter, dict):
51 node_tags = NodeTag().select(filter=node_tag_filter)
53 raise PLCInvalidArgument, "Wrong node tag filter %r"%node_tag_filter
55 self.extend(node_tags)