def fire(self, name, *params):
        self.logger.debug("Attempting to fire event: %s" % name)

        if name not in self.registered_events:
            self.logger.debug("Event does not exist: %s" % name)
            raise EventDoesNotExistError(
                "Can't call an event that does not exist: %s" % name
            )

        callbacks = self.registered_callbacks[name]
        self.logger.debug(
            "Calling %d callbacks for event: %s" %
            (len(callbacks), name)
        )

        accepted = False
        for callback_id, callback in callbacks.iteritems():
            try:
                callback(self.cardinal, *params)
                self.logger.debug(
                    "Callback %s accepted event: %s" %
                    (callback_id, name)
                )
                accepted = True
            # If this exception is received, the plugin told us not to set the
            # called flag true, so we can just log it and continue on. This
            # might happen if a plugin realizes the event does not apply to it
            # and wants the original caller to handle it normally.
            except EventRejectedMessage:
                self.logger.debug(
                    "Callback %s rejected event: %s" %
                    (callback_id, name)
                )
            except Exception:
                self.logger.exception(
                    "Exception during callback %s for event: %s" %
                    (callback_id, name)
                )

        return accepted
Modifies Apache config files to include challenge vhosts.
dataset/ETHPy150Open JohnMaguire/Cardinal/cardinal/plugins.py/EventManager.fire--crossover with--dataset/ETHPy150Open letsencrypt/letsencrypt/certbot-apache/certbot_apache/tls_sni_01.py/ApacheTlsSni01._mod_config