<s> import datetime <EOL> import json <EOL> from unittest import TestCase <EOL> from pytz import utc <EOL> from redash . query_runner . mongodb import parse_query_json <EOL> from redash . utils import parse_human_time <EOL> class TestParseQueryJson ( TestCase ) : <EOL> def test_ignores_non_isodate_fields ( self ) : <EOL> query = { <EOL> '<STR_LIT:test>' : <NUM_LIT:1> , <EOL> '<STR_LIT>' : [ '<STR_LIT:a>' , '<STR_LIT:b>' , '<STR_LIT:c>' ] , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:a>' : <NUM_LIT:1> , <EOL> '<STR_LIT:b>' : <NUM_LIT:2> <EOL> } <EOL> } <EOL> query_data = parse_query_json ( json . dumps ( query ) ) <EOL> self . assertDictEqual ( query_data , query ) <EOL> def test_parses_isodate_fields ( self ) : <EOL> query = { <EOL> '<STR_LIT:test>' : <NUM_LIT:1> , <EOL> '<STR_LIT>' : [ '<STR_LIT:a>' , '<STR_LIT:b>' , '<STR_LIT:c>' ] , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:a>' : <NUM_LIT:1> , <EOL> '<STR_LIT:b>' : <NUM_LIT:2> <EOL> } , <EOL> '<STR_LIT>' : "<STR_LIT>" <EOL> } <EOL> query_data = parse_query_json ( json . dumps ( query ) ) <EOL> self . assertEqual ( query_data [ '<STR_LIT>' ] , datetime . datetime ( <NUM_LIT> , <NUM_LIT:10> , <NUM_LIT:3> , <NUM_LIT:0> , <NUM_LIT:0> ) ) <EOL> def test_parses_isodate_in_nested_fields ( self ) : <EOL> query = { <EOL> '<STR_LIT:test>' : <NUM_LIT:1> , <EOL> '<STR_LIT>' : [ '<STR_LIT:a>' , '<STR_LIT:b>' , '<STR_LIT:c>' ] , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:a>' : <NUM_LIT:1> , <EOL> '<STR_LIT:b>' : { <EOL> '<STR_LIT:date>' : "<STR_LIT>" <EOL> } <EOL> } , <EOL> '<STR_LIT>' : "<STR_LIT>" <EOL> } <EOL> query_data = parse_query_json ( json . dumps ( query ) ) <EOL> self . assertEqual ( query_data [ '<STR_LIT>' ] , datetime . datetime ( <NUM_LIT> , <NUM_LIT:10> , <NUM_LIT:3> , <NUM_LIT:0> , <NUM_LIT:0> ) ) <EOL> self . assertEqual ( query_data [ '<STR_LIT>' ] [ '<STR_LIT:b>' ] [ '<STR_LIT:date>' ] , datetime . datetime ( <NUM_LIT> , <NUM_LIT:10> , <NUM_LIT:4> , <NUM_LIT:0> , <NUM_LIT:0> ) ) <EOL> def test_handles_nested_fields ( self ) : <EOL> query = { <EOL> "<STR_LIT>" : "<STR_LIT>" , <EOL> "<STR_LIT>" : [ <EOL> { <EOL> "<STR_LIT>" : { <EOL> "<STR_LIT>" : { "<STR_LIT:type>" : "<STR_LIT>" , "<STR_LIT>" : [ - <NUM_LIT> , - <NUM_LIT> ] } , <EOL> "<STR_LIT>" : <NUM_LIT> , <EOL> "<STR_LIT>" : "<STR_LIT>" , <EOL> "<STR_LIT>" : "<STR_LIT>" , <EOL> "<STR_LIT>" : True <EOL> } <EOL> } <EOL> ] <EOL> } <EOL> query_data = parse_query_json ( json . dumps ( query ) ) <EOL> self . assertDictEqual ( query , query_data ) <EOL> def test_supports_extended_json_types ( self ) : <EOL> query = { <EOL> '<STR_LIT:test>' : <NUM_LIT:1> , <EOL> '<STR_LIT>' : [ '<STR_LIT:a>' , '<STR_LIT:b>' , '<STR_LIT:c>' ] , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT:a>' : <NUM_LIT:1> , <EOL> '<STR_LIT:b>' : <NUM_LIT:2> <EOL> } , <EOL> '<STR_LIT>' : "<STR_LIT>" , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : '<STR_LIT>' <EOL> } , <EOL> '<STR_LIT>' : { <EOL> '<STR_LIT>' : None <EOL> } <EOL> } <EOL> query_data = parse_query_json ( json . dumps ( query ) ) <EOL> self . assertEqual ( query_data [ '<STR_LIT>' ] , None ) <EOL> self . assertEqual ( query_data [ '<STR_LIT>' ] , datetime . datetime ( <NUM_LIT> , <NUM_LIT:10> , <NUM_LIT:3> , <NUM_LIT:0> , <NUM_LIT:0> ) . replace ( tzinfo = utc ) ) <EOL> def test_supports_relative_timestamps ( self ) : <EOL> query = { <EOL> '<STR_LIT>' : { '<STR_LIT>' : '<STR_LIT>' } <EOL> } <EOL> one_hour_ago = parse_human_time ( "<STR_LIT>" ) <EOL> query_data = parse_query_json ( json . dumps ( query ) ) <EOL> self . assertEqual ( query_data [ '<STR_LIT>' ] , one_hour_ago ) </s>
