X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FTagTypes.py;h=e477cec039067ca52e87bfbdc1a93972bd97fcf5;hb=6e915d8a9ac5474c20482751ab6d24e6ce13aec9;hp=a7f180d824bc702d8a52b257e9043821381f2e39;hpb=4492a19a0528f29d64f0c2bc1bb42723fd2df032;p=plcapi.git diff --git a/PLC/TagTypes.py b/PLC/TagTypes.py index a7f180d..e477cec 100644 --- a/PLC/TagTypes.py +++ b/PLC/TagTypes.py @@ -1,11 +1,6 @@ -# $Id# # # Thierry Parmentelat - INRIA # -# $Revision: 9423 $ -# -from types import StringTypes - from PLC.Faults import * from PLC.Parameter import Parameter from PLC.Filter import Filter @@ -22,33 +17,31 @@ class TagType (Row): table_name = 'tag_types' primary_key = 'tag_type_id' - join_tables = ['node_tag', 'interface_tag', 'slice_tag' ] + join_tables = ['tag_type_role', 'node_tag', 'interface_tag', 'slice_tag', 'site_tag', 'person_tag' ] fields = { 'tag_type_id': Parameter(int, "Node tag type identifier"), 'tagname': Parameter(str, "Node tag type name", max = 100), 'description': Parameter(str, "Node tag type description", max = 254), 'category' : Parameter (str, "Node tag category", max=64, optional=True), - 'min_role_id': Parameter(int, "Minimum (least powerful) role that can set or change this attribute"), + 'role_ids': Parameter([int], "List of role identifiers"), + 'roles': Parameter([str], "List of roles"), } def validate_name(self, name): if not len(name): - raise PLCInvalidArgument, "node tag type name must be set" + raise PLCInvalidArgument("tag type name must be set") conflicts = TagTypes(self.api, [name]) for tag_type in conflicts: if 'tag_type_id' not in self or \ self['tag_type_id'] != tag_type['tag_type_id']: - raise PLCInvalidArgument, "node tag type name already in use" + raise PLCInvalidArgument("tag type name already in use") return name - def validate_min_role_id(self, role_id): - roles = [row['role_id'] for row in Roles(self.api)] - if role_id not in roles: - raise PLCInvalidArgument, "Invalid role" + add_role = Row.add_object(Role, 'tag_type_role') + remove_role = Row.remove_object(Role, 'tag_type_role') - return role_id class TagTypes(Table): """ @@ -59,23 +52,26 @@ class TagTypes(Table): def __init__(self, api, tag_type_filter = None, columns = None): Table.__init__(self, api, TagType, columns) - sql = "SELECT %s FROM tag_types WHERE True" % \ + sql = "SELECT %s FROM view_tag_types WHERE True" % \ ", ".join(self.columns) if tag_type_filter is not None: if isinstance(tag_type_filter, (list, tuple, set)): # Separate the list into integers and strings - ints = filter(lambda x: isinstance(x, (int, long)), tag_type_filter) - strs = filter(lambda x: isinstance(x, StringTypes), tag_type_filter) + ints = [x for x in tag_type_filter if isinstance(x, int)] + strs = [x for x in tag_type_filter if isinstance(x, str)] tag_type_filter = Filter(TagType.fields, {'tag_type_id': ints, 'tagname': strs}) sql += " AND (%s) %s" % tag_type_filter.sql(api, "OR") elif isinstance(tag_type_filter, dict): tag_type_filter = Filter(TagType.fields, tag_type_filter) sql += " AND (%s) %s" % tag_type_filter.sql(api, "AND") - elif isinstance (tag_type_filter, StringTypes): - tag_type_filter = Filter(TagType.fields, {'tagname':[tag_type_filter]}) + elif isinstance(tag_type_filter, int): + tag_type_filter = Filter(TagType.fields, {'tag_type_id':tag_type_filter}) + sql += " AND (%s) %s" % tag_type_filter.sql(api, "AND") + elif isinstance(tag_type_filter, str): + tag_type_filter = Filter(TagType.fields, {'tagname':tag_type_filter}) sql += " AND (%s) %s" % tag_type_filter.sql(api, "AND") else: - raise PLCInvalidArgument, "Wrong node tag type filter %r"%tag_type_filter + raise PLCInvalidArgument("Wrong tag type filter %r"%tag_type_filter) self.selectall(sql)