1 from types import StringTypes
6 from PLC.Faults import *
7 from PLC.Parameter import Parameter, Mixed
8 from PLC.Filter import Filter
9 from PLC.Debug import profile
10 from PLC.Timestamp import Timestamp
11 from PLC.Storage.AlchemyObject import AlchemyObj
13 class SliceTag(AlchemyObj):
15 Representation of a row in the slice_tags table. To use, optionally
16 instantiate with a dict of values. Update as you would a
17 dict. Commit to the database with sync().To use, instantiate
18 with a dict of values.
21 tablename = 'slice_tags'
24 'slice_tag_id': Parameter(int, "Slice Tag identifier", primary_key=True),
25 'slice_id': Parameter(int, "Slice identifier", indexed=True),
26 'name': Parameter(str, "Slice name"),
27 'node_id': Parameter(int, "Node identifier", nullok=True),
28 'nodegroup_id': Parameter(int, "Node Group identifier", nullok=True),
29 'tag_type_id': Parameter(int, "Tag type identifier"),
30 'tagname': Parameter(str, "Tag type name"),
31 'description': Parameter(str, "Tag type description"),
32 'category': Parameter(str, "Tag type category"),
33 'value': Parameter(str, "Slice attribute value"),
38 def sync(self, commit = True, validate=True):
42 AlchemyObj.sync(self, commit, validate)
43 AlchemyObj.insert(self, dict(self))
44 slice_tag = AlchemyObj.select(self, dict(self))[0]
45 self['slice_tag_id'] = slice_tag['slice_tag_id']
47 def delete(self, commit = True):
49 Delete existing slice.
51 AlchemyObj.delete(self, dict(self))
54 class SliceTags(list):
56 Representation of row(s) from the slices table in the
60 def __init__(self, api, filter = None, columns = None):
62 # the view that we're selecting upon: start with view_slices
64 slice_tags = SliceTag().select()
65 elif isinstance(tag_filter, dict):
66 slice_tags = SliceTag().select(filter=tag_filter)
67 elif isinstance(tag_filter, int):
68 slice_tags = SliceTag().select(filter={'slice_tag_id': tag_filter})
69 elif isinstance(tag_filter, (list, tuple, set)):
70 ints = filter(lambda x: isinstance(x, (int, long)), tag_filter)
71 strs = filter(lambda x: isinstance(x, StringTypes), tag_filter)
72 tag_filter = {'slice_tag_id': ints}
73 slice_tags = SliceTag().select(filter=tag_filter)
75 raise PLCInvalidArgument, "Wrong slice_tag filter %r"%tag_filter
77 for slice_tag in slice_tags:
78 self.append(SliceTag(api, object=slice_tag, columns=columns))