merge changes from HEAD
[plcapi.git] / PLC / Slices.py
index 601ec67..d8962c4 100644 (file)
@@ -8,7 +8,7 @@ from PLC.Filter import Filter
 from PLC.Debug import profile
 from PLC.Table import Row, Table
 from PLC.SliceInstantiations import SliceInstantiation, SliceInstantiations
-from PLC.Nodes import Node, Nodes
+from PLC.Nodes import Node
 from PLC.Persons import Person, Persons
 
 class Slice(Row):
@@ -21,7 +21,7 @@ class Slice(Row):
 
     table_name = 'slices'
     primary_key = 'slice_id'
-    join_tables = ['slice_node', 'slice_person', 'slice_attribute', 'peer_slice']
+    join_tables = ['slice_node', 'slice_person', 'slice_attribute', 'peer_slice', 'node_slice_whitelist']
     fields = {
         'slice_id': Parameter(int, "Slice identifier"),
         'site_id': Parameter(int, "Identifier of the site to which this slice belongs"),
@@ -58,10 +58,10 @@ class Slice(Row):
         # desired.
 
         # 1. Lowercase.
-        # 2. Begins with login_base (only letters).
+        # 2. Begins with login_base (letters or numbers).
         # 3. Then single underscore after login_base.
         # 4. Then letters, numbers, or underscores.
-        good_name = r'^[a-z]+_[a-z0-9_]+$'
+        good_name = r'^[a-z0-9]+_[a-zA-Z0-9_]+$'
         if not name or \
            not re.match(good_name, name):
             raise PLCInvalidArgument, "Invalid slice name"
@@ -94,6 +94,9 @@ class Slice(Row):
     add_node = Row.add_object(Node, 'slice_node')
     remove_node = Row.remove_object(Node, 'slice_node')
 
+    add_to_node_whitelist = Row.add_object(Node, 'node_slice_whitelist')
+    delete_from_node_whitelist = Row.remove_object(Node, 'node_slice_whitelist')
+
     def sync(self, commit = True):
         """
         Add or update a slice.
@@ -137,10 +140,10 @@ class Slices(Table):
 
         if expires is not None:
             if expires >= 0:
-                sql += " AND expires > %(expires)d"
+                sql += " AND expires > %d" % expires
             else:
                 expires = -expires
-                sql += " AND expires < %(expires)d"
+                sql += " AND expires < %d" % expires
 
         if slice_filter is not None:
             if isinstance(slice_filter, (list, tuple, set)):
@@ -153,4 +156,4 @@ class Slices(Table):
                 slice_filter = Filter(Slice.fields, slice_filter)
                 sql += " AND (%s)" % slice_filter.sql(api, "AND")
 
-        self.selectall(sql, locals())
+        self.selectall(sql)