summaryrefslogtreecommitdiff
path: root/raven/utils
diff options
context:
space:
mode:
authorchebee7i <chebee7i@gmail.com>2018-03-08 15:02:22 -0600
committerAshley Camba <ashwoods@gmail.com>2018-05-02 19:36:28 +0200
commita1552e6d11386043b452d3fb2dced698ec764827 (patch)
treec70457532b2af11c608c08ec1c63bf413115cc04 /raven/utils
parent8530ba1081f07f891684c01035ec67b60edc115a (diff)
downloadraven-a1552e6d11386043b452d3fb2dced698ec764827.tar.gz
Add is_namedtuple().
Diffstat (limited to 'raven/utils')
-rw-r--r--raven/utils/__init__.py4
-rw-r--r--raven/utils/basic.py11
2 files changed, 14 insertions, 1 deletions
diff --git a/raven/utils/__init__.py b/raven/utils/__init__.py
index b4b22b8..a0de8cb 100644
--- a/raven/utils/__init__.py
+++ b/raven/utils/__init__.py
@@ -15,7 +15,9 @@ except ImportError:
import sys
from raven.utils.compat import iteritems, string_types
-from raven.utils.basic import merge_dicts, varmap, memoize, once
+from raven.utils.basic import (
+ merge_dicts, varmap, memoize, once, is_namedtuple
+)
logger = logging.getLogger('raven.errors')
diff --git a/raven/utils/basic.py b/raven/utils/basic.py
index 4a40e8e..d995423 100644
--- a/raven/utils/basic.py
+++ b/raven/utils/basic.py
@@ -83,3 +83,14 @@ def once(func):
new_func = update_wrapper(new_func, func)
new_func.called = False
return new_func
+
+
+def is_namedtuple(value):
+ # https://stackoverflow.com/a/2166841/1843746
+ # But modified to handle subclasses of namedtuples.
+ if not isinstance(value, tuple):
+ return False
+ f = getattr(type(value), '_fields', None)
+ if not isinstance(f, tuple):
+ return False
+ return all(type(n) == str for n in f)