Skip to content

Instantly share code, notes, and snippets.

@keleshev
Created July 21, 2015 12:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save keleshev/0f16f04888bd4c523af3 to your computer and use it in GitHub Desktop.
Save keleshev/0f16f04888bd4c523af3 to your computer and use it in GitHub Desktop.
query = {
'level': '1',
'box.top': '2',
'box.left': 'foo',
'box.bottom': 'bar',
'box.right': 'baz',
'fox.mox.dox': '0.5',
'fox.mox.dox': '0.5',
}
def parse_query_into(query, result):
for key, value in query.items():
parse_key_value_into(key, value, result)
def try_int_float(value):
try:
return float(value)
except ValueError:
try:
return int(value)
except ValueError:
return value
def parse_key_value_into(key, value, result):
value = try_int_float(value)
if '.' not in key:
result[key] = value
else:
key, _, rest = key.partition('.')
nested = result.setdefault(key, {})
parse_key_value_into(rest, value, nested)
def parse_query_string(query):
result = {}
parse_query_into(query, result)
return result
def test_parse_query():
result = parse_query_string(query)
assert result == {
'level': 1,
'box': {'top': 2, 'left': 'foo', 'bottom': 'bar', 'right': 'baz'},
'fox': {'mox': {'dox': 0.5}},
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment