From: Planet-Lab Support Date: Thu, 13 Sep 2007 21:16:19 +0000 (+0000) Subject: This commit was manufactured by cvs2svn to create branch X-Git-Tag: planetlab-4_1-rc2~3 X-Git-Url: http://git.onelab.eu/?p=plcapi.git;a=commitdiff_plain;h=cdc82cc8be0fbac80913d1d99d9a300ec8734259 This commit was manufactured by cvs2svn to create branch 'planetlab-4_0-branch'. --- diff --git a/PLC/NodeNetworkSettingTypes.py b/PLC/NodeNetworkSettingTypes.py new file mode 100644 index 0000000..786ec73 --- /dev/null +++ b/PLC/NodeNetworkSettingTypes.py @@ -0,0 +1,83 @@ +# +# Thierry Parmentelat - INRIA +# +# $Revision:$ +# +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.Roles import Role, Roles + +class NodeNetworkSettingType (Row): + + """ + Representation of a row in the nodenetwork_setting_types table. + """ + + table_name = 'nodenetwork_setting_types' + primary_key = 'nodenetwork_setting_type_id' + join_tables = ['nodenetwork_setting'] + fields = { + 'nodenetwork_setting_type_id': Parameter(int, "Nodenetwork setting type identifier"), + 'name': Parameter(str, "Nodenetwork setting type name", max = 100), + 'description': Parameter(str, "Nodenetwork setting type description", max = 254), + 'category' : Parameter (str, "Nodenetwork setting category", max=64), + 'min_role_id': Parameter(int, "Minimum (least powerful) role that can set or change this attribute"), + } + + # for Cache + class_key = 'name' + foreign_fields = ['category','description','min_role_id'] + foreign_xrefs = [] + + def validate_name(self, name): + if not len(name): + raise PLCInvalidArgument, "nodenetwork setting type name must be set" + + conflicts = NodeNetworkSettingTypes(self.api, [name]) + for setting_type in conflicts: + if 'nodenetwork_setting_type_id' not in self or \ + self['nodenetwork_setting_type_id'] != setting_type['nodenetwork_setting_type_id']: + raise PLCInvalidArgument, "nodenetwork setting 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" + + return role_id + +class NodeNetworkSettingTypes(Table): + """ + Representation of row(s) from the nodenetwork_setting_types table + in the database. + """ + + def __init__(self, api, nodenetwork_setting_type_filter = None, columns = None): + Table.__init__(self, api, NodeNetworkSettingType, columns) + + sql = "SELECT %s FROM nodenetwork_setting_types WHERE True" % \ + ", ".join(self.columns) + + if nodenetwork_setting_type_filter is not None: + if isinstance(nodenetwork_setting_type_filter, (list, tuple, set)): + # Separate the list into integers and strings + ints = filter(lambda x: isinstance(x, (int, long)), nodenetwork_setting_type_filter) + strs = filter(lambda x: isinstance(x, StringTypes), nodenetwork_setting_type_filter) + nodenetwork_setting_type_filter = Filter(NodeNetworkSettingType.fields, {'nodenetwork_setting_type_id': ints, 'name': strs}) + sql += " AND (%s)" % nodenetwork_setting_type_filter.sql(api, "OR") + elif isinstance(nodenetwork_setting_type_filter, dict): + nodenetwork_setting_type_filter = Filter(NodeNetworkSettingType.fields, nodenetwork_setting_type_filter) + sql += " AND (%s)" % nodenetwork_setting_type_filter.sql(api, "AND") + elif isinstance (nodenetwork_setting_type_filter, StringTypes): + nodenetwork_setting_type_filter = Filter(NodeNetworkSettingType.fields, {'name':[nodenetwork_setting_type_filter]}) + sql += " AND (%s)" % nodenetwork_setting_type_filter.sql(api, "AND") + else: + raise PLCInvalidArgument, "Wrong nodenetwork setting type filter %r"%nodenetwork_setting_type_filter + + self.selectall(sql) diff --git a/PLC/NodeNetworkSettings.py b/PLC/NodeNetworkSettings.py new file mode 100644 index 0000000..bba560d --- /dev/null +++ b/PLC/NodeNetworkSettings.py @@ -0,0 +1,57 @@ +# +# Thierry Parmentelat - INRIA +# +# $Revision$ +# +from PLC.Faults import * +from PLC.Parameter import Parameter +from PLC.Filter import Filter +from PLC.Table import Row, Table +from PLC.NodeNetworkSettingTypes import NodeNetworkSettingType, NodeNetworkSettingTypes + +class NodeNetworkSetting(Row): + """ + Representation of a row in the nodenetwork_setting. + To use, instantiate with a dict of values. + """ + + table_name = 'nodenetwork_setting' + primary_key = 'nodenetwork_setting_id' + fields = { + 'nodenetwork_setting_id': Parameter(int, "Nodenetwork setting identifier"), + 'nodenetwork_id': Parameter(int, "NodeNetwork identifier"), + 'nodenetwork_setting_type_id': NodeNetworkSettingType.fields['nodenetwork_setting_type_id'], + 'name': NodeNetworkSettingType.fields['name'], + 'description': NodeNetworkSettingType.fields['description'], + 'category': NodeNetworkSettingType.fields['category'], + 'min_role_id': NodeNetworkSettingType.fields['min_role_id'], + 'value': Parameter(str, "Nodenetwork setting value"), + ### relations + + } + +class NodeNetworkSettings(Table): + """ + Representation of row(s) from the nodenetwork_setting table in the + database. + """ + + def __init__(self, api, nodenetwork_setting_filter = None, columns = None): + Table.__init__(self, api, NodeNetworkSetting, columns) + + sql = "SELECT %s FROM view_nodenetwork_settings WHERE True" % \ + ", ".join(self.columns) + + if nodenetwork_setting_filter is not None: + if isinstance(nodenetwork_setting_filter, (list, tuple, set)): + nodenetwork_setting_filter = Filter(NodeNetworkSetting.fields, {'nodenetwork_setting_id': nodenetwork_setting_filter}) + elif isinstance(nodenetwork_setting_filter, dict): + nodenetwork_setting_filter = Filter(NodeNetworkSetting.fields, nodenetwork_setting_filter) + elif isinstance(nodenetwork_setting_filter, int): + nodenetwork_setting_filter = Filter(NodeNetworkSetting.fields, {'nodenetwork_setting_id': [nodenetwork_setting_filter]}) + else: + raise PLCInvalidArgument, "Wrong nodenetwork setting filter %r"%nodenetwork_setting_filter + sql += " AND (%s)" % nodenetwork_setting_filter.sql(api) + + + self.selectall(sql)