Move message handling function into the server class.
This commit is contained in:
parent
6fdea4d213
commit
efa663133b
3 changed files with 67 additions and 98 deletions
15
main.py
15
main.py
|
@ -31,8 +31,7 @@ from typing import (List, Set, Dict, Tuple, Text, Optional, AnyStr, Deque, Any)
|
|||
from matrix.colors import Formatted
|
||||
from matrix.utf import utf8_decode
|
||||
from matrix.http import HttpResponse
|
||||
from matrix.api import (MessageType, MatrixSendMessage)
|
||||
from matrix.messages import handle_http_response
|
||||
from matrix.api import MatrixSendMessage
|
||||
|
||||
# Weechat searches for the registered callbacks in the scope of the main script
|
||||
# file, import the callbacks here so weechat can find them.
|
||||
|
@ -62,13 +61,9 @@ from matrix.completion import (
|
|||
matrix_message_completion_cb, matrix_server_completion_cb)
|
||||
|
||||
from matrix.utils import (key_from_value, server_buffer_prnt, prnt_debug,
|
||||
tags_from_line_data, server_buffer_set_title)
|
||||
server_buffer_set_title)
|
||||
|
||||
from matrix.plugin_options import (
|
||||
DebugType,
|
||||
RedactType,
|
||||
ServerBufferType,
|
||||
)
|
||||
from matrix.plugin_options import (DebugType, RedactType)
|
||||
|
||||
from matrix.config import (matrix_config_init, matrix_config_read,
|
||||
matrix_config_free, matrix_config_change_cb,
|
||||
|
@ -76,7 +71,7 @@ from matrix.config import (matrix_config_init, matrix_config_read,
|
|||
|
||||
import matrix.globals
|
||||
|
||||
from matrix.globals import W, OPTIONS, SERVERS
|
||||
from matrix.globals import W, SERVERS
|
||||
|
||||
# yapf: disable
|
||||
WEECHAT_SCRIPT_NAME = "matrix" # type: str
|
||||
|
@ -259,7 +254,7 @@ def receive_cb(server_name, file_descriptor):
|
|||
# Message done, reset the parser state.
|
||||
server.reset_parser()
|
||||
|
||||
handle_http_response(server, message)
|
||||
server.handle_response(message)
|
||||
break
|
||||
|
||||
return W.WEECHAT_RC_OK
|
||||
|
|
|
@ -1,88 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright © 2018 Damir Jelić <poljar@termina.org.uk>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for
|
||||
# any purpose with or without fee is hereby granted, provided that the
|
||||
# above copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
|
||||
# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
|
||||
# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
from builtins import str
|
||||
|
||||
import time
|
||||
import pprint
|
||||
import datetime
|
||||
|
||||
from matrix.globals import W
|
||||
|
||||
import matrix.api as API
|
||||
|
||||
from matrix.utils import server_buffer_prnt, prnt_debug
|
||||
from matrix.plugin_options import DebugType
|
||||
|
||||
|
||||
def print_message_error(server, message):
|
||||
server_buffer_prnt(server, ("{prefix}Unhandled {status_code} error, please "
|
||||
"inform the developers about this.").format(
|
||||
prefix=W.prefix("error"),
|
||||
status_code=message.response.status))
|
||||
|
||||
server_buffer_prnt(server, pprint.pformat(message.__class__.__name__))
|
||||
server_buffer_prnt(server, pprint.pformat(message.request.payload))
|
||||
server_buffer_prnt(server, pprint.pformat(message.response.body))
|
||||
|
||||
|
||||
def handle_http_response(server, message):
|
||||
# type: (MatrixServer, MatrixMessage) -> None
|
||||
|
||||
assert message.response
|
||||
|
||||
if ('content-type' in message.response.headers and
|
||||
message.response.headers['content-type'] == 'application/json'):
|
||||
ret, error = message.decode_body(server)
|
||||
|
||||
if not ret:
|
||||
message = ("{prefix}matrix: Error decoding json response from "
|
||||
"server: {error}").format(
|
||||
prefix=W.prefix("error"), error=error)
|
||||
W.prnt(server.server_buffer, message)
|
||||
return
|
||||
|
||||
event = message.event
|
||||
event.execute()
|
||||
else:
|
||||
status_code = message.response.status
|
||||
if status_code == 504:
|
||||
if isinstance(message, API.MatrixSyncMessage):
|
||||
server.sync()
|
||||
else:
|
||||
print_message_error(server, message)
|
||||
else:
|
||||
print_message_error(server, message)
|
||||
|
||||
creation_date = datetime.datetime.fromtimestamp(message.creation_time)
|
||||
done_time = time.time()
|
||||
info_message = ("Message of type {t} created at {c}."
|
||||
"\nMessage lifetime information:"
|
||||
"\n Send delay: {s} ms"
|
||||
"\n Receive delay: {r} ms"
|
||||
"\n Handling time: {h} ms"
|
||||
"\n Total time: {total} ms").format(
|
||||
t=message.type,
|
||||
c=creation_date,
|
||||
s=(message.send_time - message.creation_time) * 1000,
|
||||
r=(message.receive_time - message.send_time) * 1000,
|
||||
h=(done_time - message.receive_time) * 1000,
|
||||
total=(done_time - message.creation_time) * 1000,
|
||||
)
|
||||
prnt_debug(DebugType.TIMING, server, info_message)
|
||||
|
||||
return
|
|
@ -20,6 +20,8 @@ from builtins import str, bytes
|
|||
import ssl
|
||||
import socket
|
||||
import time
|
||||
import datetime
|
||||
import pprint
|
||||
|
||||
from collections import deque
|
||||
from http_parser.pyparser import HttpParser
|
||||
|
@ -29,6 +31,7 @@ from matrix.utils import (key_from_value, prnt_debug, server_buffer_prnt,
|
|||
create_server_buffer)
|
||||
from matrix.utf import utf8_decode
|
||||
from matrix.globals import W, SERVERS, OPTIONS
|
||||
import matrix.api as API
|
||||
from matrix.api import MatrixClient, MatrixSyncMessage, MatrixLoginMessage
|
||||
|
||||
|
||||
|
@ -374,6 +377,65 @@ class MatrixServer:
|
|||
self.device_name)
|
||||
self.send_or_queue(message)
|
||||
|
||||
def _print_message_error(self, message):
|
||||
server_buffer_prnt(self,
|
||||
("{prefix}Unhandled {status_code} error, please "
|
||||
"inform the developers about this.").format(
|
||||
prefix=W.prefix("error"),
|
||||
status_code=message.response.status))
|
||||
|
||||
server_buffer_prnt(self, pprint.pformat(message.__class__.__name__))
|
||||
server_buffer_prnt(self, pprint.pformat(message.request.payload))
|
||||
server_buffer_prnt(self, pprint.pformat(message.response.body))
|
||||
|
||||
def handle_response(self, message):
|
||||
# type: (MatrixMessage) -> None
|
||||
|
||||
assert message.response
|
||||
|
||||
if ('content-type' in message.response.headers and
|
||||
message.response.headers['content-type'] == 'application/json'):
|
||||
ret, error = message.decode_body(self)
|
||||
|
||||
if not ret:
|
||||
message = ("{prefix}matrix: Error decoding json response from "
|
||||
"server: {error}").format(
|
||||
prefix=W.prefix("error"), error=error)
|
||||
W.prnt(self.server_buffer, message)
|
||||
return
|
||||
|
||||
event = message.event
|
||||
event.execute()
|
||||
else:
|
||||
status_code = message.response.status
|
||||
if status_code == 504:
|
||||
if isinstance(message, API.MatrixSyncMessage):
|
||||
self.sync()
|
||||
else:
|
||||
self._print_message_error(message)
|
||||
else:
|
||||
self._print_message_error(message)
|
||||
|
||||
creation_date = datetime.datetime.fromtimestamp(message.creation_time)
|
||||
done_time = time.time()
|
||||
info_message = (
|
||||
"Message of type {t} created at {c}."
|
||||
"\nMessage lifetime information:"
|
||||
"\n Send delay: {s} ms"
|
||||
"\n Receive delay: {r} ms"
|
||||
"\n Handling time: {h} ms"
|
||||
"\n Total time: {total} ms").format(
|
||||
t=message.type,
|
||||
c=creation_date,
|
||||
s=(message.send_time - message.creation_time) * 1000,
|
||||
r=(message.receive_time - message.send_time) * 1000,
|
||||
h=(done_time - message.receive_time) * 1000,
|
||||
total=(done_time - message.creation_time) * 1000,
|
||||
)
|
||||
prnt_debug(DebugType.TIMING, self, info_message)
|
||||
|
||||
return
|
||||
|
||||
|
||||
@utf8_decode
|
||||
def matrix_config_server_read_cb(data, config_file, section, option_name,
|
||||
|
|
Loading…
Add table
Reference in a new issue