added create_network(), delete_network(), create_subnet(), delete_subnet(), process_t...
[plcapi.git] / PLC / SliceTags.py
1 from types import StringTypes
2 import time
3 import re
4 import datetime
5
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
12
13 class SliceTag(AlchemyObj):
14     """
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.
19     """
20
21     tablename = 'slice_tags'
22  
23     fields = {
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"),
34         }
35
36     tags = {}
37
38     def sync(self, commit = True, validate=True):
39         """
40         Add the record
41         """
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']
46
47     def delete(self, commit = True):
48         """
49         Delete existing slice.
50         """
51         AlchemyObj.delete(self, dict(self))
52
53
54 class SliceTags(list):
55     """
56     Representation of row(s) from the slices table in the
57     database.
58     """
59
60     def __init__(self, api, filter = None, columns = None):
61          
62         # the view that we're selecting upon: start with view_slices
63         if not tag_filter:
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)
74         else:
75             raise PLCInvalidArgument, "Wrong slice_tag filter %r"%tag_filter
76
77         for slice_tag in slice_tags:
78             self.append(SliceTag(api, object=slice_tag, columns=columns))