def _adapter_connect_stream(self): """Initiate full-stack connection establishment asynchronously for internally-initiated connection bring-up. Upon failed completion, we will invoke `Connection._on_stream_terminated()`. NOTE: On success, the stack will be up already, so there is no corresponding callback. """ self._connection_workflow = connection_workflow.AMQPConnectionWorkflow( _until_first_amqp_attempt=True) self._connection_workflow.set_io_services(self._nbio) def create_connector(): """`AMQPConnector` factory""" return connection_workflow.AMQPConnector( lambda _params: _StreamingProtocolShim(self), self._nbio) self._connection_workflow.start( [self.params], connector_factory=create_connector, native_loop=self._nbio.get_native_ioloop(), on_done=functools.partial( self._unshim_connection_workflow_callback, self._on_connection_workflow_done))
def _start_connection_workflow(cls, connection_configs, connection_factory, nbio, workflow, on_done): """Helper function for custom implementations of `create_connection()`. :param sequence connection_configs: A sequence of one or more `pika.connection.Parameters`-based objects. :param callable connection_factory: A function that takes `pika.connection.Parameters` as its only arg and returns a brand new `pika.connection.Connection`-based adapter instance each time it is called. The factory must instantiate the connection with `internal_connection_workflow=False`. :param pika.adapters.utils.nbio_interface.AbstractIOServices nbio: :param connection_workflow.AbstractAMQPConnectionWorkflow | None workflow: Pass an instance of an implementation of the `connection_workflow.AbstractAMQPConnectionWorkflow` interface; defaults to a `connection_workflow.AMQPConnectionWorkflow` instance with default values for optional args. :param callable on_done: as defined in :py:meth:`connection_workflow.AbstractAMQPConnectionWorkflow.start()`. :return: Connection workflow instance in use. The user should limit their interaction with this object only to it's `abort()` method. :rtype: connection_workflow.AbstractAMQPConnectionWorkflow """ if workflow is None: workflow = connection_workflow.AMQPConnectionWorkflow() LOGGER.debug('Created default connection workflow %r', workflow) if isinstance(workflow, connection_workflow.AMQPConnectionWorkflow): workflow.set_io_services(nbio) def create_connector(): """`AMQPConnector` factory.""" return connection_workflow.AMQPConnector( lambda params: _StreamingProtocolShim( connection_factory(params)), nbio) workflow.start( connection_configs=connection_configs, connector_factory=create_connector, native_loop=nbio.get_native_ioloop(), on_done=functools.partial(cls._unshim_connection_workflow_callback, on_done)) return workflow