def process()

in processors/directory.py [0:0]


    def process(self, output_var='results'):

        directory_config = self.config
        if 'api' not in directory_config and directory_config['api'] in [
                'groups', 'users', 'members', 'groupsettings'
        ]:
            raise NotConfiguredException(
                'No correct Directory API configured (supported: groups, groupsettings, users, members)!'
            )

        if directory_config[
                'api'] == 'groupsettings' and 'groupUniqueIds' not in directory_config:
            raise NotConfiguredException(
                'No groupUniqueIds defined for group settings!')

        if directory_config[
                'api'] == 'members' and 'groupKey' not in directory_config:
            raise NotConfiguredException(
                'No groupKey defined for members listing!')

        service_account = directory_config[
            'serviceAccountEmail'] if 'serviceAccountEmail' in directory_config else None

        scope = None
        if directory_config['api'] in ['groups', 'members']:
            scope = 'https://www.googleapis.com/auth/admin.directory.group.readonly'
        if directory_config['api'] == 'groupsettings':
            scope = 'https://www.googleapis.com/auth/apps.groups.settings'
        if directory_config['api'] == 'users':
            scope = 'https://www.googleapis.com/auth/admin.directory.user.readonly'

        credentials = Credentials(
            self.get_token_for_scopes([scope], service_account=service_account))

        branded_http = self._get_branded_http(credentials)
        if directory_config['api'] != 'groupsettings':
            directory_service = discovery.build('admin',
                                                'directory_v1',
                                                http=branded_http)
        else:
            groups_service = discovery.build('groupssettings',
                                             'v1',
                                             http=branded_http)

        query = directory_config['query'] if 'query' in directory_config else ''
        query_template = self.jinja_environment.from_string(query)
        query_template.name = 'query'
        query_output = query_template.render()

        results = []
        page_token = None
        groups = []
        group_unique_id = None
        if directory_config['api'] == 'groupsettings':
            groups = self._jinja_var_to_list(directory_config['groupUniqueIds'],
                                             'groupUniqueId')
            group_unique_id = groups.pop()

        while True:
            query_parameters = {'maxResults': 200}
            for k in [
                    'orderBy', 'sortOrder', 'maxResults', 'projection',
                    'showDeleted', 'viewType', 'customFieldMask', 'roles'
            ]:
                if k in directory_config:
                    var_template = self.jinja_environment.from_string(
                        directory_config[k])
                    var_template.name = k
                    var_output = var_template.render()
                    query_parameters[k] = var_output
            if page_token is not None:
                query_parameters['page_token'] = page_token

            if directory_config['api'] in ['groups', 'users']:
                if query_output != '':
                    query_parameters['query'] = query_output
                if 'customerId' in directory_config:
                    query_parameters['customer'] = directory_config[
                        'customerId']
                elif 'domain' in directory_config:
                    query_parameters['domain'] = directory_config['domain']

            if directory_config['api'] == 'groups':
                request = directory_service.groups().list(**query_parameters)
            elif directory_config['api'] == 'users':
                request = directory_service.users().list(**query_parameters)
            elif directory_config['api'] == 'groupsettings':
                request = groups_service.groups().get(
                    groupUniqueId=group_unique_id)
            elif directory_config['api'] == 'members':
                groupkey_template = self.jinja_environment.from_string(
                    directory_config['groupKey'])
                groupkey_template.name = 'groupKey'
                groupkey_output = groupkey_template.render()
                query_parameters['groupKey'] = groupkey_output
                request = directory_service.members().list(**query_parameters)

            response = request.execute()
            if 'groups' in response:
                results = results + response['groups']
            if 'members' in response:
                results = results + response['members']
            if 'users' in response:
                results = results + response['users']
            if 'kind' in response and response[
                    'kind'] == 'groupsSettings#groups':
                results.append(response)

            if directory_config['api'] != 'groupsettings':
                if 'nextPageToken' in response:
                    page_token = response['nextPageToken']
                else:
                    break
            else:
                if len(groups) == 0:
                    break
                group_unique_id = groups.pop()

        res = {output_var: results}
        return res