def __new__()

in src/aws_encryption_sdk/key_providers/base.py [0:0]


    def __new__(cls, **kwargs):
        """Performs universal prep work for all MasterKeys."""
        instance = super(MasterKey, cls).__new__(cls, **kwargs)

        if not hasattr(instance.config, "provider_id"):
            raise TypeError('MasterKey config classes must have a "provider_id" attribute defined.')

        if instance.config.provider_id is not None:
            # Only allow override if provider_id is NOT set to non-None for the class
            if instance.provider_id is None:
                instance.provider_id = instance.config.provider_id
            elif instance.provider_id != instance.config.provider_id:  # pylint: disable=comparison-with-callable
                raise ConfigMismatchError(
                    "Config provider_id does not match MasterKey provider_id: {config} != {instance}".format(
                        config=instance.config.provider_id, instance=instance.provider_id
                    )
                )
        instance.key_id = instance.config.key_id
        instance._encrypt_key_index = {instance.key_id: instance}  # pylint: disable=protected-access
        # We cannot make any general statements about key_info, so specifically enforce that decrypt index is empty.
        instance._decrypt_key_index = {}  # pylint: disable=protected-access
        instance._members = [instance]  # pylint: disable=protected-access
        return instance