X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FSliceAttributes.py;h=9f0b1fbe58f55a64ba5528606cd19241428ae294;hb=refs%2Fheads%2Fplanetlab-4_0-branch;hp=dd911311d4e6d83d9b387d8f2bf6a79eada50469;hpb=fe0cd47e2b702d69bde8518a41e3661dd9ffbea7;p=plcapi.git diff --git a/PLC/SliceAttributes.py b/PLC/SliceAttributes.py index dd91131..9f0b1fb 100644 --- a/PLC/SliceAttributes.py +++ b/PLC/SliceAttributes.py @@ -1,7 +1,6 @@ -from types import StringTypes - from PLC.Faults import * from PLC.Parameter import Parameter +from PLC.Filter import Filter from PLC.Table import Row, Table from PLC.SliceAttributeTypes import SliceAttributeType, SliceAttributeTypes @@ -17,50 +16,31 @@ class SliceAttribute(Row): 'slice_attribute_id': Parameter(int, "Slice attribute identifier"), 'slice_id': Parameter(int, "Slice identifier"), 'node_id': Parameter(int, "Node identifier, if a sliver attribute"), + 'nodegroup_id': Parameter(int, "Nodegroup identifier, if a sliver attribute"), 'attribute_type_id': SliceAttributeType.fields['attribute_type_id'], 'name': SliceAttributeType.fields['name'], 'description': SliceAttributeType.fields['description'], 'min_role_id': SliceAttributeType.fields['min_role_id'], - # XXX Arbitrary max, make configurable - 'value': Parameter(str, "Slice attribute value", max = 254), + 'value': Parameter(str, "Slice attribute value"), } - def __init__(self, api, fields = {}): - Row.__init__(self, fields) - self.api = api - - def delete(self, commit = True): - """ - Delete existing slice attribute. - """ - - assert 'slice_attribute_id' in self - - # Clean up miscellaneous join tables - for table in 'slice_attribute',: - self.api.db.do("DELETE FROM %s" \ - " WHERE slice_attribute_id = %d" % \ - (table, self['slice_attribute_id']), self) - - if commit: - self.api.db.commit() - -class SliceAttributes(dict): +class SliceAttributes(Table): """ Representation of row(s) from the slice_attribute table in the database. """ - def __init__(self, api, slice_attribute_id_list): - self.api = api + def __init__(self, api, slice_attribute_filter = None, columns = None): + Table.__init__(self, api, SliceAttribute, columns) - sql = "SELECT %s FROM view_slice_attributes" % \ - ", ".join(SliceAttribute.fields) + sql = "SELECT %s FROM view_slice_attributes WHERE True" % \ + ", ".join(self.columns) - if slice_attribute_id_list: - sql += " WHERE slice_attribute_id IN (%s)" % ", ".join(map(str, slice_attribute_id_list)) + if slice_attribute_filter is not None: + if isinstance(slice_attribute_filter, (list, tuple, set)): + slice_attribute_filter = Filter(SliceAttribute.fields, {'slice_attribute_id': slice_attribute_filter}) + elif isinstance(slice_attribute_filter, dict): + slice_attribute_filter = Filter(SliceAttribute.fields, slice_attribute_filter) + sql += " AND (%s) %s" % slice_attribute_filter.sql(api) - rows = self.api.db.selectall(sql) - - for row in rows: - self[row['slice_attribute_id']] = SliceAttribute(api, row) + self.selectall(sql)