Store sites in PLC db and sync with nova db
[plcapi.git] / PLC / SliceNodes.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 SliceNode(AlchemyObj):
14     """
15     Representation of a row in the slice_node 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_person'
22  
23     fields = {
24         'slice_id': Parameter(int, "Slice identifier", primary_key=True),
25         'node_id': Parameter(int, "Node identifier", indexed=True),
26         }
27
28     tags = {}
29
30     def sync(self, commit = True, validate=True):
31         """
32         Add the record
33         """
34         AlchemyObj.sync(self, commit, validate)
35         AlchemyObj.insert(self, dict(self))
36
37     def delete(self, commit = True):
38         """
39         Delete existing slice.
40         """
41         AlchemyObj.delete(self, dict(self))
42
43
44 class SliceNodes(list):
45     """
46     Representation of row(s) from the slices table in the
47     database.
48     """
49
50     def __init__(self, api, filter = None, columns = None):
51          
52         # the view that we're selecting upon: start with view_slices
53         if not filter:
54             slice_nodes = SliceNode().select()
55         elif isinstance(filter, dict):
56             slices_nodes = SliceNode().select(filter=filter)
57         else:
58             raise PLCInvalidArgument, "Wrong slice_node filter %r"%filter
59
60         for slice_node in slice_nodes:
61             self.append(slice_node)