Beispiel #1
0
    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
Beispiel #2
0
    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