1 from types import StringTypes
3 from PLC.Faults import *
4 from PLC.Parameter import Parameter
5 from PLC.Table import Row, Table
6 from PLC.Roles import Role, Roles
8 class SliceAttributeType(Row):
10 Representation of a row in the slice_attribute_types table. To
11 use, instantiate with a dict of values.
14 table_name = 'slice_attribute_types'
15 primary_key = 'attribute_type_id'
16 join_tables = ['slice_attribute']
18 'attribute_type_id': Parameter(int, "Slice attribute type identifier"),
19 'name': Parameter(str, "Slice attribute type name", max = 100, optional = False),
20 'description': Parameter(str, "Slice attribute type description", max = 254),
21 'min_role_id': Parameter(int, "Minimum (least powerful) role that can set or change this attribute"),
24 def validate_name(self, name):
26 raise PLCInvalidArgument, "Slice attribute type name must be set"
28 conflicts = SliceAttributeTypes(self.api, [name])
29 for attribute_type_id, attribute in conflicts.iteritems():
30 if 'attribute_type_id' not in self or self['attribute_type_id'] != attribute_type_id:
31 raise PLCInvalidArgument, "Slice attribute type name already in use"
35 def validate_min_role_id(self, role_id):
36 roles = Roles(self.api)
37 if role_id not in roles:
38 raise PLCInvalidArgument, "Invalid role"
42 class SliceAttributeTypes(Table):
44 Representation of row(s) from the slice_attribute_types table in the
48 def __init__(self, api, attribute_type_id_or_name_list = None):
51 sql = "SELECT %s FROM slice_attribute_types" % \
52 ", ".join(SliceAttributeType.fields)
54 if attribute_type_id_or_name_list:
55 # Separate the list into integers and strings
56 attribute_type_ids = filter(lambda attribute_type_id: isinstance(attribute_type_id, (int, long)),
57 attribute_type_id_or_name_list)
58 names = filter(lambda name: isinstance(name, StringTypes),
59 attribute_type_id_or_name_list)
60 sql += " WHERE (False"
61 if attribute_type_ids:
62 sql += " OR attribute_type_id IN (%s)" % ", ".join(map(str, attribute_type_ids))
64 sql += " OR name IN (%s)" % ", ".join(api.db.quote(names))
67 rows = self.api.db.selectall(sql)
70 self[row['attribute_type_id']] = SliceAttributeType(api, row)