Skip to content

Commit f536b2b

Browse files
committed
Processes dictionary arguments for Congress API so that multilevel dicts flattened using the dot syntax for keys (allowing for history.active=true, for example). Also converts Booleans to JSON-compatible strings.
1 parent 162d061 commit f536b2b

1 file changed

Lines changed: 21 additions & 2 deletions

File tree

‎sunlight/services/congress.py‎

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,23 @@
2424
'fec',
2525
)
2626

27+
# Stolen from http://codereview.stackexchange.com/a/21035/28391
28+
def flatten_dict(d):
29+
def flat_items():
30+
for k, v in d.items():
31+
if isinstance(v, dict):
32+
for kk, vv in flatten_dict(v).items():
33+
yield '{0}.{1}'.format(k,kk), vv
34+
else:
35+
yield k, v
36+
37+
return dict(flat_items())
38+
39+
def preencode_values(d):
40+
for k, v in d.items():
41+
if isinstance(v, bool):
42+
d[k] = str(v).lower()
43+
return d
2744

2845
class Congress(sunlight.service.Service):
2946
"""
@@ -230,10 +247,12 @@ def hearings(self, **kwargs):
230247

231248
# implementation methods
232249
def _get_url(self, endpoint, apikey, **kwargs):
233-
return "%s/%s?apikey=%s&%s" % (
250+
url_args = preencode_values( flatten_dict(kwargs) )
251+
url = "%s/%s?apikey=%s&%s" % (
234252
API_ROOT, endpoint, apikey,
235-
sunlight.service.safe_encode(kwargs)
253+
sunlight.service.safe_encode(url_args)
236254
)
255+
return url
237256

238257
def _decode_response(self, response):
239258
return json.loads(response)['results']

0 commit comments

Comments
 (0)