Бардак в tornado.websocket

Полдня убил, чтобы обнаружить источник проблемы. После переезда ардуинка перестала коннектится к вебсокету.

Проблема оказалась в том, что некоторые заголовки теперь отдаются с маленькой буквой s в названии. То есть не Sec-WebSocket-Accept, а Sec-Websocket-Accept. Этот вариант конечно же модель для ардуинки не ожидал.

Пришлось залезть в код tornado.websocket и добавить правку.

А именно, ищем tornado.httputil._NormalizedHeaderCache. Добавляем в него строку:

normalized = normalized.replace('Websocket', 'WebSocket')

Получаем что-то типа этого:

class NormalizedHeaderCache(tornado.httputil._NormalizedHeaderCache):
    def __missing__(self, key):
        normalized = "-".join([w.capitalize() for w in key.split("-")])
        # Fix WebSocket issue
        normalized = normalized.replace('Websocket', 'WebSocket')
        self[key] = normalized
        self.queue.append(key)
        if len(self.queue) > self.size:
            old_key = self.queue.popleft()
            del self[old_key]
        return normalized

Источник: https://github.com/tornadoweb/tornado/issues/1329