def convert_access_settings_list_to_params(self, access_settings_list): """Convert access settings from one format to other. Convert dictionary representation of access settings to AccessSettings XML element. Please refer to schema definition of EntityType.CONTROL_ACCESS_PARAMS for more details. :param list access_settings_list: list of dictionaries, where each dictionary represents a single access setting. The dictionary structure is as follows, - type: (str): type of the subject. One of 'org' or 'user'. - name: (str): name of the user or org. - access_level: (str): access_level of the particular subject. Allowed values are 'ReadOnly', 'Change' or 'FullControl'. :return: an object containing AccessSettings XML data. :rtype: lxml.objectify.ObjectifiedElement """ access_settings_params = E.AccessSettings() for access_setting in access_settings_list: if access_setting["type"] == 'user': org_href = self.get_org_href() subject_href = self.client.get_user_in_org( access_setting['name'], org_href).get('href') subject_type = EntityType.USER.value elif access_setting["type"] == 'org': subject_href = get_admin_href( self.client.get_org_by_name( access_setting['name']).get('href')) subject_type = EntityType.ADMIN_ORG.value else: raise InvalidParameterException("Invalid subject type") subject_name = access_setting['name'] # Make 'ReadOnly' the default access_level if it is not specified. if 'access_level' in access_setting: access_level = access_setting['access_level'] else: access_level = 'ReadOnly' access_setting_params = E.AccessSetting( E.Subject(name=subject_name, href=subject_href, type=subject_type), E.AccessLevel(access_level)) access_settings_params.append(access_setting_params) return access_settings_params
def convert_access_settings_list_to_params(self, access_settings_list): """Convert access_settings_list to object of type AccessSettingsType :param access_settings_list: (list of dict): list of access_setting in the dict format. Each dict contains: type: (str): type of the subject. One of 'org' or 'user' name: (str): subject name access_level: (str): access_level of each subject. One of 'ReadOnly', 'Change', 'FullControl'. :return: A :class:`lxml.objectify.StringElement` object representing xml of type AccessSettingsType """ access_settings_params = E.AccessSettings() for access_setting in access_settings_list: if access_setting["type"] == 'user': org_href = find_link(self.parent_resource, RelationType.UP, EntityType.ORG.value).href subject_href = self.client.get_user_in_org( access_setting['name'], org_href).get('href') subject_type = EntityType.USER.value elif access_setting["type"] == 'org': subject_href = get_admin_href( self.client.get_org_by_name( access_setting['name']).get('href')) subject_type = EntityType.ADMIN_ORG.value else: raise Exception("Invalid subject type") subject_name = access_setting['name'] # Make 'ReadOnly' the default access_level if it is not specified. if 'access_level' in access_setting: access_level = access_setting['access_level'] else: access_level = 'ReadOnly' access_setting_params = E.AccessSetting( E.Subject(name=subject_name, href=subject_href, type=subject_type), E.AccessLevel(access_level)) access_settings_params.append(access_setting_params) return access_settings_params