Thcipriani has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/241076

Change subject: Fix log_context to detect positional argument
......................................................................

Fix log_context to detect positional argument

If you add the `@log_context` decorator to a function with a logger
argument and then pass logger as a positional argument you get:

<TypeError> "[fn name] got multiple values for keyword argument
'logger'"

This makes sure that keyword and positional arguments for logger are
checked before passing logger as a keyword argument.

Change-Id: Ibd36464538e7b0cdbb3e588f6761eb56f67e5bdc
---
M scap/utils.py
1 file changed, 14 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/tools/scap 
refs/changes/76/241076/1

diff --git a/scap/utils.py b/scap/utils.py
index 33ddd89..e811caf 100644
--- a/scap/utils.py
+++ b/scap/utils.py
@@ -9,6 +9,7 @@
 import errno
 import fcntl
 import hashlib
+import inspect
 import json
 import logging
 import os
@@ -313,7 +314,19 @@
     def arg_wrapper(func):
         @wraps(func)
         def context_wrapper(*args, **kwargs):
-            if 'logger' in kwargs:
+            argspec = inspect.getargspec(func)
+
+            # Check if logger was passed as a positional argument
+            try:
+                l = args[argspec.args.index('logger')]
+            except IndexError:
+                l = None
+
+            # Check if logger was passed as a keywork argument
+            if l is None:
+                l = kwargs.get('logger', None)
+
+            if l is not None:
                 return func(*args, **kwargs)
 
             with context_logger(context_name) as logger:

-- 
To view, visit https://gerrit.wikimedia.org/r/241076
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibd36464538e7b0cdbb3e588f6761eb56f67e5bdc
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/tools/scap
Gerrit-Branch: master
Gerrit-Owner: Thcipriani <tcipri...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to