Skip to content

Commit abad9ad

Browse files
committed
fix Dict.all() method behavior
1 parent deaf5d2 commit abad9ad

File tree

4 files changed

+59
-17
lines changed

4 files changed

+59
-17
lines changed

ioc/extra/flask/di.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def configure_app_config(self, config, container_builder):
4343
'SESSION_COOKIE_HTTPONLY': True,
4444
'SESSION_COOKIE_SECURE': False,
4545
'MAX_CONTENT_LENGTH': None,
46-
'SEND_FILE_MAX_AGE_DEFAULT': 12 * 60 * 60, # 12 hours
46+
'SEND_FILE_MAX_AGE_DEFAULT': 12 * 60 * 60, # 12 hours
4747
'TRAP_BAD_REQUEST_ERRORS': False,
4848
'TRAP_HTTP_EXCEPTIONS': False,
4949
'PREFERRED_URL_SCHEME': 'http',
@@ -57,7 +57,7 @@ def configure_app_config(self, config, container_builder):
5757
for name, value in defaults.items():
5858
container_builder.parameters.set('ioc.extra.flask.app.%s' % name, c.get(name, value))
5959

60-
for name, value in c.all().items():
60+
for name, value in c.iteritems():
6161
container_builder.parameters.set('ioc.extra.flask.app.%s' % name, c.get(name, value))
6262
defaults[name] = value
6363

@@ -66,7 +66,7 @@ def configure_app_config(self, config, container_builder):
6666
def configure_blueprint(self, config, container_builder):
6767
definition = container_builder.get('ioc.extra.flask.app')
6868

69-
for id, kwargs in config.get_dict('blueprints', {}).all().items():
69+
for id, kwargs in config.get_dict('blueprints', {}).iteritems():
7070
definition.add_call('register_blueprint', [ioc.component.Reference(id)], kwargs.all())
7171

7272
def post_build(self, container_builder, container):

ioc/extra/redis/di.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def configure_connections(self, config, container_builder):
1717

1818
manager = container_builder.get('ioc.extra.redis')
1919

20-
for name, parameters in config.get_dict('connections', {}).all().items():
20+
for name, parameters in config.get_dict('connections', {}).iteritems():
2121
id = "ioc.extra.redis.connection.%s" % name
2222

2323
container_builder.add(id, ioc.component.Definition('redis.ConnectionPool', kwargs={
@@ -33,7 +33,7 @@ def configure_connections(self, config, container_builder):
3333

3434
manager.add_call('add_connection', arguments=[name, ioc.component.Reference(id)])
3535

36-
for name, parameters in config.get_dict('clients', {}).all().items():
36+
for name, parameters in config.get_dict('clients', {}).iteritems():
3737
id_connection = "ioc.extra.redis.connection.%s" % parameters.get('connection')
3838
id = "ioc.extra.redis.client.%s" % name
3939

ioc/helper.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,37 @@ def get_dict(self, name, default=None):
8080
def get_int(self, name, default=None):
8181
return int(self.get(name, default))
8282

83+
def get_all(self, name, default=None):
84+
return self.get_dict(name, default).all()
85+
8386
def all(self):
84-
return self.data
85-
87+
def walk(data):
88+
all = {}
89+
90+
if not isinstance(data, dict):
91+
return data
92+
93+
for v, d in data.iteritems():
94+
if isinstance(d, Dict):
95+
all[v] = d.all()
96+
else:
97+
all[v] = d
98+
99+
if is_iterable(all[v]):
100+
walk(all[v])
101+
102+
return all
103+
104+
return walk(self.data)
105+
106+
def iteritems(self):
107+
return self.data.iteritems()
108+
86109
def __iter__(self):
87110
return iter(self.data)
88111

89112
def __getitem__(self, key):
90-
return self.data[key]
113+
return self.data[key]
91114

92115
def build(files, logger=None, parameters=None):
93116

tests/ioc/test_helper.py

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import ioc
44
import os
55
import unittest2 as unittest
6+
import yaml
67

78
current_dir = os.path.dirname(os.path.realpath(__file__))
89

@@ -29,8 +30,20 @@ def test_build(self):
2930
self.assertEquals('the argument 1', container.parameters.get('foo.foo'))
3031
self.assertEquals('parameter', container.parameters.get('inline'))
3132

32-
def test_dict(self):
3333

34+
def test_deepcopy(self):
35+
values = [
36+
{'sad': 1},
37+
('%tuple%', 2)
38+
]
39+
40+
for value in values:
41+
self.assertEquals(value, ioc.helper.deepcopy(value))
42+
43+
44+
class DictTest(unittest.TestCase):
45+
46+
def test_dict(self):
3447
d = ioc.helper.Dict({'key': 'value'})
3548

3649
self.assertEquals('value', d.get('key'))
@@ -42,13 +55,19 @@ def test_dict(self):
4255

4356
self.assertEquals(managers.get('foo'), 'bar')
4457

45-
def test_deepcopy(self):
58+
def test_dict_iterator(self):
59+
d = ioc.helper.Dict({'key': 'value'})
4660

47-
values = [
48-
{'sad': 1},
49-
('%tuple%', 2)
50-
]
61+
for key, value in d.iteritems():
62+
self.assertEquals(key, 'key')
63+
self.assertEquals(value, 'value')
5164

52-
for value in values:
53-
self.assertEquals(value, ioc.helper.deepcopy(value))
54-
65+
def test_all(self):
66+
d = ioc.helper.Dict({'key': 'value'})
67+
self.assertEquals(d.all(), {'key': 'value'})
68+
69+
d = ioc.helper.Dict({'key': ioc.helper.Dict({'value': 'foo'})})
70+
self.assertEquals(d.all(), {'key': {'value': 'foo'}})
71+
72+
d = ioc.helper.Dict({'key': ioc.helper.Dict({'value': ['foo', 'bar']})})
73+
self.assertEquals(d.all(), {'key': {'value': ['foo', 'bar']}})

0 commit comments

Comments
 (0)