Skip to content

Commit 2536cb9

Browse files
committed
feat: allow anything with __name__ when making namespaces
1 parent 5525cbf commit 2536cb9

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

parametrize_from_file/namespace.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ class Namespace(Mapping):
3838
>>> with_math.eval('math.sqrt(4)')
3939
2.0
4040
41-
...modules:
41+
...anything with a `__name__` attribute, e.g. modules, classes, and
42+
functions:
4243
4344
>>> with_math = Namespace(math)
4445
>>> with_math.eval('math.sqrt(4)')
@@ -396,10 +397,8 @@ def star(module):
396397
}
397398

398399
def _update_namespace(ns_dict, *args, **kwargs):
399-
from inspect import ismodule
400-
401400
for arg in args:
402-
if ismodule(arg):
401+
if hasattr(arg, '__name__'):
403402
ns_dict[arg.__name__] = arg
404403
elif isinstance(arg, str):
405404
exec(arg, ns_dict)

tests/test_namespace.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
from parametrize_from_file import Namespace, star, error
44
from operator import itemgetter
55

6+
class Named1:
7+
pass
8+
9+
def named_2():
10+
pass
11+
612
class IgnoreMissing:
713

814
def __init__(self, items):
@@ -22,6 +28,7 @@ def __eq__(self, other):
2228
([{'a': 1}], {}, {'a': 1}),
2329
(['a = 1'], {}, {'a': 1}),
2430
([sys], {}, {'sys': sys}),
31+
([Named1], {}, {'Named1': Named1}),
2532
([], {'a': 1}, {'a': 1}),
2633

2734
# Two names:
@@ -35,16 +42,25 @@ def __eq__(self, other):
3542
(['a = 1', {'b': 2}], {}, {'a': 1, 'b': 2}),
3643
(['a = 1', 'b = 2'], {}, {'a': 1, 'b': 2}),
3744
(['a = 1', sys], {}, {'a': 1, 'sys': sys}),
45+
(['a = 1', Named1], {}, {'a': 1, 'Named1': Named1}),
3846
(['a = 1'], {'b': 2}, {'a': 1, 'b': 2}),
3947

4048
([sys, {'b': 2}], {}, {'sys': sys, 'b': 2}),
4149
([sys, 'b = 2'], {}, {'sys': sys, 'b': 2}),
4250
([sys, os], {}, {'sys': sys, 'os': os}),
51+
([sys, Named1], {}, {'sys': sys, 'Named1': Named1}),
4352
([sys], {'b': 2}, {'sys': sys, 'b': 2}),
4453

54+
([Named1, {'b': 2}], {}, {'Named1': Named1, 'b': 2}),
55+
([Named1, 'b = 2'], {}, {'Named1': Named1, 'b': 2}),
56+
([Named1, sys], {}, {'Named1': Named1, 'sys': sys}),
57+
([Named1, named_2], {}, {'Named1': Named1, 'named_2': named_2}),
58+
([Named1], {'b': 2}, {'Named1': Named1, 'b': 2}),
59+
4560
([{'b': 2}], {'a': 1}, {'a': 1, 'b': 2}),
4661
(['b = 2'], {'a': 1}, {'a': 1, 'b': 2}),
4762
([sys], {'a': 1}, {'a': 1, 'sys': sys}),
63+
([Named1], {'a': 1}, {'a': 1, 'Named1': Named1}),
4864
([], {'a': 1, 'b': 2}, {'a': 1, 'b': 2}),
4965

5066
# Order matters:

0 commit comments

Comments
 (0)