From 9c008d59230e13a65066824238ccdc3ba2cdf881 Mon Sep 17 00:00:00 2001 From: Davte Date: Tue, 16 Jul 2019 23:58:56 +0200 Subject: [PATCH] Pass only supported arguments to async_wrapped coroutines --- davtelepot/__init__.py | 2 +- davtelepot/utilities.py | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/davtelepot/__init__.py b/davtelepot/__init__.py index 86521a3..2841966 100644 --- a/davtelepot/__init__.py +++ b/davtelepot/__init__.py @@ -7,7 +7,7 @@ __author__ = "Davide Testa" __email__ = "davide@davte.it" __credits__ = ["Marco Origlia", "Nick Lee @Nickoala"] __license__ = "GNU General Public License v3.0" -__version__ = "2.0.7" +__version__ = "2.0.8" __maintainer__ = "Davide Testa" __contact__ = "t.me/davte" diff --git a/davtelepot/utilities.py b/davtelepot/utilities.py index a8dad01..eb53ea7 100644 --- a/davtelepot/utilities.py +++ b/davtelepot/utilities.py @@ -6,6 +6,7 @@ import collections import csv import datetime from difflib import SequenceMatcher +import inspect import json import logging import os @@ -437,6 +438,8 @@ async def async_wrapper(coroutine, *args1, **kwargs1): Set some of the arguments, let the coroutine be awaited with the rest of them later. + The wrapped coroutine will always pass only supported parameters to + `coroutine`. Example: ``` import asyncio @@ -456,7 +459,17 @@ async def async_wrapper(coroutine, *args1, **kwargs1): ``` """ async def wrapped_coroutine(*args2, **kwargs2): - return await coroutine(*args1, *args2, **kwargs1, **kwargs2) + # Update keyword arguments + kwargs1.update(kwargs2) + # Pass only supported arguments + kwargs = { + name: argument + for name, argument in kwargs1.items() + if name in inspect.signature( + coroutine + ).parameters + } + return await coroutine(*args1, *args2, **kwargs) return wrapped_coroutine