@@ -55,18 +55,18 @@ def __init__(self, fields, records):
5555 self .fields = tuple (fields )
5656 self .hydration_scope = HydrationHandler ().new_hydration_scope ()
5757 self .records = tuple (records )
58- self ._hydrate_records ()
59-
6058 assert all (len (self .fields ) == len (r ) for r in self .records )
6159
60+ self ._hydrate_records ()
61+
6262 def _hydrate_records (self ):
6363 def _hydrate (value ):
64+ if isinstance (value , (list , tuple )):
65+ value = type (value )(_hydrate (v ) for v in value )
66+ elif isinstance (value , dict ):
67+ value = {k : _hydrate (v ) for k , v in value .items ()}
6468 if type (value ) in self .hydration_scope .hydration_hooks :
6569 return self .hydration_scope .hydration_hooks [type (value )](value )
66- if isinstance (value , (list , tuple )):
67- return type (value )(_hydrate (v ) for v in value )
68- if isinstance (value , dict ):
69- return {k : _hydrate (v ) for k , v in value .items ()}
7070 return value
7171
7272 self .records = tuple (_hydrate (r ) for r in self .records )
@@ -605,7 +605,6 @@ async def test_data(num_records):
605605 assert record .data .called_once_with ("hello" , "world" )
606606
607607
608- # TODO: dehydration now happens on a much lower level
609608@pytest .mark .parametrize ("records" , (
610609 Records (["n" ], []),
611610 Records (["n" ], [[42 ], [69 ], [420 ], [1337 ]]),
@@ -621,19 +620,9 @@ async def test_data(num_records):
621620 ]),
622621))
623622@mark_async_test
624- async def test_result_graph (records , async_scripted_connection ):
625- async_scripted_connection .set_script ((
626- ("run" , {"on_success" : ({"fields" : records .fields },),
627- "on_summary" : None }),
628- ("pull" , {
629- "on_records" : (records .records ,),
630- "on_success" : None ,
631- "on_summary" : None
632- }),
633- ))
634- async_scripted_connection .new_hydration_scope .return_value = \
635- records .hydration_scope
636- result = AsyncResult (async_scripted_connection , 1 , noop , noop )
623+ async def test_result_graph (records ):
624+ connection = AsyncConnectionStub (records = records )
625+ result = AsyncResult (connection , 1 , noop , noop )
637626 await result ._run ("CYPHER" , {}, None , None , "r" , None )
638627 graph = await result .graph ()
639628 assert isinstance (graph , Graph )
@@ -1095,3 +1084,22 @@ async def test_to_df_parse_dates(keys, values, expected_df, expand):
10951084 df = await result .to_df (expand = expand , parse_dates = True )
10961085
10971086 pd .testing .assert_frame_equal (df , expected_df )
1087+
1088+
1089+ @pytest .mark .parametrize ("nested" , [True , False ])
1090+ @mark_async_test
1091+ async def test_broken_hydration (nested ):
1092+ value_in = Structure (b"a" , "broken" )
1093+ if nested :
1094+ value_in = [value_in ]
1095+ records_in = Records (["foo" , "bar" ], [["foobar" , value_in ]])
1096+ connection = AsyncConnectionStub (records = records_in )
1097+ result = AsyncResult (connection , 1 , noop , noop )
1098+ await result ._run ("CYPHER" , {}, None , None , "r" , None )
1099+ records_out = await AsyncUtil .list (result )
1100+ assert len (records_out ) == 1
1101+ record_out = records_out [0 ]
1102+ assert len (record_out ) == 2
1103+ assert record_out [0 ] == "foobar"
1104+ with pytest .raises (ValueError ):
1105+ record_out [1 ]
0 commit comments