X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FSlices.py;h=88c0b579076148c7a30777acfaa5d8797fcaaca7;hb=cee5ab52df1c9f38b6eaff2dd354cb22f59028c7;hp=a41e88d3f71b67ac790d4f4ed4689802bcd78278;hpb=7721c8aedf5db2d2fe135e92a61a2dfb20be7960;p=plcapi.git diff --git a/PLC/Slices.py b/PLC/Slices.py index a41e88d..88c0b57 100644 --- a/PLC/Slices.py +++ b/PLC/Slices.py @@ -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"), @@ -61,7 +61,7 @@ class Slice(Row): # 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-z0-9]+_[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)): @@ -152,5 +155,13 @@ class Slices(Table): elif isinstance(slice_filter, dict): slice_filter = Filter(Slice.fields, slice_filter) sql += " AND (%s)" % slice_filter.sql(api, "AND") + elif isinstance (slice_filter, StringTypes): + slice_filter = Filter(Slice.fields, {'name':[slice_filter]}) + sql += " AND (%s)" % slice_filter.sql(api, "AND") + elif isinstance (slice_filter, int): + slice_filter = Filter(Slice.fields, {'slice_id':[slice_filter]}) + sql += " AND (%s)" % slice_filter.sql(api, "AND") + else: + raise PLCInvalidArgument, "Wrong slice filter %r"%slice_filter - self.selectall(sql, locals()) + self.selectall(sql)