code: def _prepare_connection(func):
      
      def _wrapped(job, *args, **kwargs):
          job_id = id(job)
          to_parent = job.data['pipe']
          host = job.data['host']
  
          # Create a protocol adapter.
          mkaccount = partial(_account_factory, to_parent, host)
          pargs = {'account_factory': mkaccount,
                   'stdout':          job.data['stdout']}
          pargs.update(host.get_options())
          conn = prepare(host, **pargs)
  
          # Connect and run the function.
          log_options = get_label(func, 'log_to')
          if log_options is not None:
              # Enable logging.
              proxy = LoggerProxy(to_parent, log_options['logger_id'])
              log_cb = partial(proxy.log, job_id)
              proxy.add_log(job_id, job.name, job.failures + 1)
              conn.data_received_event.listen(log_cb)
              try:
                  conn.connect(host.get_address(), host.get_tcp_port())
                  result = func(job, host, conn, *args, **kwargs)
                  conn.close(force=True)
              except:
                  proxy.log_aborted(job_id, serializeable_sys_exc_info())
                  raise
              else:
                  proxy.log_succeeded(job_id)
              finally:
                  conn.data_received_event.disconnect(log_cb)
          else:
              conn.connect(host.get_address(), host.get_tcp_port())
              result = func(job, host, conn, *args, **kwargs)
              conn.close(force=True)
          return result
  
      return _wrapped
docs: A decorator that unpacks the host and connection from the job argument
      and passes them as separate arguments to the wrapped function.