Queer European MD passionate about IT
Ver código fonte

Pass only supported arguments to async_wrapped coroutines

Davte 5 anos atrás
pai
commit
9c008d5923
2 arquivos alterados com 15 adições e 2 exclusões
  1. 1 1
      davtelepot/__init__.py
  2. 14 1
      davtelepot/utilities.py

+ 1 - 1
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"
 

+ 14 - 1
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