'Handle an incoming request from the user.'

def send_request(self, info):

    if self.waiting:
        if (info.serialize() != self.info.serialize()):
            self.pending_request = info
        else:
            debug_print('skipping    duplicate    request')
        return
    debug_print(('%s    request' % info.name))
    desired = None
    self.info = info
    editor = info.editor
    if ((info.name == 'completion') and ('jedi' not in self.plugins) and info.line.lstrip().startswith(('import    ', 'from    '))):
        desired = 'fallback'
    if ((not editor.is_python_like()) or sourcecode.is_keyword(info.obj) or (editor.in_comment_or_string() and (info.name != 'info'))):
        desired = 'fallback'
    plugins = self.plugins.values()
    if desired:
        plugins = [self.plugins[desired]]
        self.desired = [desired]
    elif (((info.name == 'definition') and (not info.editor.is_python())) or (info.name == 'info')):
        self.desired = list(self.plugins.keys())
    else:
        plugins = list(self.plugins.values())[:(-1)]
        self.desired = list(self.plugins.keys())[:(-1)]
    self._start_time = time.time()
    self.waiting = True
    method = ('get_%s' % info.name)
    value = info.serialize()
    self.ids = dict()
    for plugin in plugins:
        request_id = plugin.request(method, value)
        self.ids[request_id] = plugin.name
    self.timer.stop()
    self.timer.singleShot((LEAD_TIME_SEC * 1000), self._handle_timeout)
