Pass only supported arguments to async_wrapped coroutines

This commit is contained in:
Davte 2019-07-16 23:58:56 +02:00
parent cb2092bef4
commit 9c008d5923
2 changed files with 15 additions and 2 deletions

View File

@ -7,7 +7,7 @@ __author__ = "Davide Testa"
__email__ = "davide@davte.it" __email__ = "davide@davte.it"
__credits__ = ["Marco Origlia", "Nick Lee @Nickoala"] __credits__ = ["Marco Origlia", "Nick Lee @Nickoala"]
__license__ = "GNU General Public License v3.0" __license__ = "GNU General Public License v3.0"
__version__ = "2.0.7" __version__ = "2.0.8"
__maintainer__ = "Davide Testa" __maintainer__ = "Davide Testa"
__contact__ = "t.me/davte" __contact__ = "t.me/davte"

View File

@ -6,6 +6,7 @@ import collections
import csv import csv
import datetime import datetime
from difflib import SequenceMatcher from difflib import SequenceMatcher
import inspect
import json import json
import logging import logging
import os 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 Set some of the arguments, let the coroutine be awaited with the rest of
them later. them later.
The wrapped coroutine will always pass only supported parameters to
`coroutine`.
Example: Example:
``` ```
import asyncio import asyncio
@ -456,7 +459,17 @@ async def async_wrapper(coroutine, *args1, **kwargs1):
``` ```
""" """
async def wrapped_coroutine(*args2, **kwargs2): 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 return wrapped_coroutine