fd5e022f601164d7708a2a06d9d498e4b546ca33
[plcapi.git] / PLC / NodeTypes.py
1 #
2 # Functions for interacting with the node_types table in the database
3 #
4 #
5
6 from PLC.Faults import *
7 from PLC.Parameter import Parameter
8 from PLC.Storage.AlchemyObject import AlchemyObj
9
10 class NodeType(AlchemyObj):
11     """
12     Representation of a row in the node_types table. To use,
13     instantiate with a dict of values.
14     """
15
16     tablename = 'node_types'
17     join_tables = ['nodes']
18     fields = {
19         'node_type': Parameter(str, "Node type", max = 20, primary_key=True),
20         }
21
22     def validate_node_type(self, name):
23         # Make sure name is not blank
24         if not len(name):
25             raise PLCInvalidArgument, "Node type must be specified"
26
27         # Make sure node type does not alredy exist
28         conflicts = NodeTypes(self.api, [name])
29         if conflicts:
30             raise PLCInvalidArgument, "Node type name already in use"
31
32         return name
33
34     def sync(self, commit=True, validate=True):
35         AlchemyObj.sync(self, commit=commit, validate=validate)
36         AlchemyObj.insert(self, dict(self)
37
38     def delete(self, commit=True):
39         assert 'node_type' in self
40         AlcemyObj.delete(self, dict(self))  
41
42 class NodeTypes(list):
43     """
44     Representation of the node_types table in the database.
45     """
46
47     def __init__(self, api, node_types = None):
48         if not node_types:
49             result = NodeType().select()
50         elif isinstance(node_types, (StringTypes, list, tuple, set)):
51             result = NodeType().select(filter={'node_type': node_types})
52         else:
53             raise PLCInvalidArgument, "Wrong node type filter %r" % node_types
54
55         self.extend(result)