smell: fixes assert in container constructor.

This commit is contained in:
Romain Dorgueil
2018-08-11 07:33:11 +02:00
parent 3ea0952bd3
commit ba08931020
2 changed files with 19 additions and 2 deletions

View File

@ -66,8 +66,11 @@ class Service(Option):
class Container(dict):
def __new__(cls, *args, **kwargs):
if len(args) == 1:
assert not len(kwargs), 'only one usage at a time, my dear.'
if not (args[0]):
if len(kwargs):
raise ValueError(
'You can either use {} with one positional argument or with keyword arguments, not both.'
)
if not args[0]:
return super().__new__(cls)
if isinstance(args[0], cls):
return cls

View File

@ -130,6 +130,20 @@ def test_requires():
assert svcargs['output'] == vcr.append
def test_constructor():
c1 = Container(foo='foo', bar='bar')
assert 2 == len(c1)
c2 = Container({'foo': 'foo', 'bar': 'bar'})
assert 2 == len(c2)
assert c1['foo'] == c2['foo']
assert c1['bar'] == c2['bar']
with pytest.raises(ValueError):
Container({'bar': 'bar'}, foo='foo')
@pytest.mark.parametrize('services', [None, {}])
def test_create_container_empty_values(services):
c = create_container(services)