':returns: item_list - list of KMS keys.
:returns: exception_map - A dict where the keys are a tuple containing the
location of the exception and the value is the actual exception'

def slurp(self):

    self.prep_for_slurp()
    @iter_account_region(index=self.index, accounts=self.accounts, service_name='kms')
    def slurp_items(**kwargs):
        item_list = []
        exception_map = {}
        kwargs['exception_map'] = exception_map
        app.logger.debug('Checking    {}/{}/{}'.format(self.index, kwargs['account_name'], kwargs['region']))
        kms = self.connect_to_kms(**kwargs)
        if kms:
            keys = self.list_keys(kms, **kwargs)
            if keys:
                app.logger.debug('Found    {}    {}.'.format(len(keys), self.i_am_plural))
                aliases = self.list_aliases(kms, **kwargs)
                app.logger.debug('Found    {}    {}    and    {}    Aliases.'.format(len(keys), self.i_am_plural, len(aliases)))
                for key in keys:
                    policies = []
                    key_id = key.get('KeyId')
                    config = self.describe_key(kms, key_id, **kwargs)
                    if config:
                        config[u'Aliases'] = [a.get('AliasName') for a in aliases if (a.get('TargetKeyId') == key_id)]
                        if config[u'Aliases']:
                            alias = config[u'Aliases'][0]
                            alias = alias[len('alias/'):]
                        else:
                            alias = '[No    Aliases]'
                        name = '{alias}    ({key_id})'.format(alias=alias, key_id=key_id)
                        if (config.get('Error') is None):
                            grants = self.list_grants(kms, key_id, **kwargs)
                            policy_names = self.list_key_policies(kms, key_id, alias, **kwargs)
                            rotation_status = self.get_key_rotation_status(kms, key_id, alias, **kwargs)
                            if policy_names:
                                for policy_name in policy_names:
                                    policy = self.get_key_policy(kms, key_id, policy_name, alias, **kwargs)
                                    policies.append(policy)
                            if config.get('CreationDate'):
                                config.update({'CreationDate': config.get('CreationDate').astimezone(tzutc()).isoformat()})
                            if config.get('DeletionDate'):
                                config.update({'DeletionDate': config.get('DeletionDate').astimezone(tzutc()).isoformat()})
                            if grants:
                                for grant in grants:
                                    if grant.get('CreationDate'):
                                        grant.update({'CreationDate': grant.get('CreationDate').astimezone(tzutc()).isoformat()})
                            config[u'Policies'] = policies
                            config[u'Grants'] = grants
                            config[u'KeyRotationEnabled'] = rotation_status
                        item = KMSMasterKey(region=kwargs['region'], account=kwargs['account_name'], name=name, arn=config.get('Arn'), config=dict(config))
                        item_list.append(item)
        return (item_list, exception_map)
    return slurp_items()
