Blob Blame History Raw
From 9161e24e45bb568c57d9c62e4815b5fe3b4e0950 Mon Sep 17 00:00:00 2001
From: Riley Banks <waultah@gmail.com>
Date: Tue, 11 Jan 2022 08:40:42 +0100
Subject: [PATCH] Implement getargspec using inspect.Signature

---
 bottle.py | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/bottle.py b/bottle.py
index 08bce53..c700625 100644
--- a/bottle.py
+++ b/bottle.py
@@ -40,9 +40,27 @@ import base64, cgi, email.utils, functools, hmac, itertools, mimetypes,\
 from datetime import date as datedate, datetime, timedelta
 from tempfile import TemporaryFile
 from traceback import format_exc, print_exc
-from inspect import getargspec
 from unicodedata import normalize
 
+# inspect.getargspec was removed in Python 3.6, use
+# Signature-based version where we can (Python 3.3+)
+try:
+    from inspect import signature
+    def getargspec(func):
+        params = signature(func).parameters
+        args, varargs, keywords, defaults = [], None, None, []
+        for name, param in params.items():
+            if param.kind == param.VAR_POSITIONAL:
+                varargs = name
+            elif param.kind == param.VAR_KEYWORD:
+                keywords = name
+            else:
+                args.append(name)
+                if param.default is not param.empty:
+                    defaults.append(param.default)
+        return (args, varargs, keywords, tuple(defaults) or defaults)
+except ImportError:
+    from inspect import getargspec
 
 try: from simplejson import dumps as json_dumps, loads as json_lds
 except ImportError: # pragma: no cover
-- 
2.33.1