mirror of
https://github.com/solero/houdini.git
synced 2025-04-26 16:46:27 +00:00
General improvements to handlers module
This commit is contained in:
parent
df8f6a917b
commit
e3ded3e5ce
@ -1,13 +1,14 @@
|
|||||||
import inspect
|
import inspect
|
||||||
import time
|
|
||||||
import enum
|
import enum
|
||||||
import os
|
import os
|
||||||
import asyncio
|
import asyncio
|
||||||
from types import FunctionType
|
from types import FunctionType
|
||||||
|
|
||||||
from Houdini.Converters import IConverter
|
from Houdini.Converters import get_converter, do_conversion, _ConverterContext
|
||||||
|
|
||||||
from Houdini.Cooldown import _Cooldown, _CooldownMapping, BucketType, CooldownError
|
from Houdini.Cooldown import _Cooldown, _CooldownMapping, BucketType, CooldownError
|
||||||
|
from Houdini import Plugins
|
||||||
|
|
||||||
|
|
||||||
def get_relative_function_path(function_obj):
|
def get_relative_function_path(function_obj):
|
||||||
abs_function_file = inspect.getfile(function_obj)
|
abs_function_file = inspect.getfile(function_obj)
|
||||||
@ -166,7 +167,7 @@ class _XMLListener(_Listener):
|
|||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
async def __call__(self, p, packet_data):
|
async def __call__(self, p, packet_data):
|
||||||
super().__call__(p, packet_data)
|
await super().__call__(p, packet_data)
|
||||||
|
|
||||||
handler_call_arguments = [self.plugin] if self.plugin is not None else []
|
handler_call_arguments = [self.plugin] if self.plugin is not None else []
|
||||||
handler_call_arguments += [self.packet, p] if self.pass_packet else [p]
|
handler_call_arguments += [self.packet, p] if self.pass_packet else [p]
|
||||||
@ -176,7 +177,8 @@ class _XMLListener(_Listener):
|
|||||||
handler_call_arguments.append(component.default)
|
handler_call_arguments.append(component.default)
|
||||||
elif component.kind == component.POSITIONAL_OR_KEYWORD:
|
elif component.kind == component.POSITIONAL_OR_KEYWORD:
|
||||||
converter = get_converter(component)
|
converter = get_converter(component)
|
||||||
handler_call_arguments.append(await do_conversion(converter, p, packet_data))
|
ctx = _ConverterContext(component, None, packet_data, p)
|
||||||
|
handler_call_arguments.append(await do_conversion(converter, ctx))
|
||||||
return await self.handler(*handler_call_arguments)
|
return await self.handler(*handler_call_arguments)
|
||||||
|
|
||||||
|
|
||||||
@ -185,7 +187,8 @@ def handler(packet, **kwargs):
|
|||||||
if not asyncio.iscoroutinefunction(handler_function):
|
if not asyncio.iscoroutinefunction(handler_function):
|
||||||
raise TypeError('All handlers must be a coroutine.')
|
raise TypeError('All handlers must be a coroutine.')
|
||||||
|
|
||||||
components = list(inspect.signature(handler_function).parameters.values())[1:]
|
components = list(inspect.signature(handler_function).parameters.values())
|
||||||
|
components = components[2:] if str(components[0]) == 'self' else components[1:]
|
||||||
|
|
||||||
if not issubclass(type(packet), _Packet):
|
if not issubclass(type(packet), _Packet):
|
||||||
raise TypeError('All handlers can only listen for either XMLPacket or XTPacket.')
|
raise TypeError('All handlers can only listen for either XMLPacket or XTPacket.')
|
||||||
@ -223,6 +226,9 @@ def is_listener(listener):
|
|||||||
def listeners_from_module(xt_listeners, xml_listeners, module):
|
def listeners_from_module(xt_listeners, xml_listeners, module):
|
||||||
listener_objects = inspect.getmembers(module, is_listener)
|
listener_objects = inspect.getmembers(module, is_listener)
|
||||||
for listener_name, listener_object in listener_objects:
|
for listener_name, listener_object in listener_objects:
|
||||||
|
if isinstance(module, Plugins.IPlugin):
|
||||||
|
listener_object.plugin = module
|
||||||
|
|
||||||
listener_collection = xt_listeners if type(listener_object) == _XTListener else xml_listeners
|
listener_collection = xt_listeners if type(listener_object) == _XTListener else xml_listeners
|
||||||
if listener_object.packet not in listener_collection:
|
if listener_object.packet not in listener_collection:
|
||||||
listener_collection[listener_object.packet] = []
|
listener_collection[listener_object.packet] = []
|
||||||
|
Loading…
x
Reference in New Issue
Block a user