44from docarray import Document , DocumentArray
55from docarray .array .chunk import ChunkArray
66from docarray .array .match import MatchArray
7+ from docarray .score import NamedScore
78
89
910@pytest .mark .parametrize ('init_args' , [None , dict (id = 123 ), Document ()])
@@ -140,3 +141,54 @@ def test_exclusive_content_2():
140141 d = Document (content = [1 ,2 ,3 ])
141142 assert d .content_type == 'blob'
142143
144+ def test_get_attr_values ():
145+ d = Document (
146+ ** {
147+ 'id' : '123' ,
148+ 'text' : 'document' ,
149+ 'feature1' : 121 ,
150+ 'name' : 'name' ,
151+ 'tags' : {'id' : 'identity' , 'a' : 'b' , 'c' : 'd' , 'e' : [0 , 1 , {'f' : 'g' }]},
152+ }
153+ )
154+ d .scores ['metric' ] = NamedScore (value = 42 )
155+
156+ required_keys = [
157+ 'id' ,
158+ 'text' ,
159+ 'tags__name' ,
160+ 'tags__feature1' ,
161+ 'scores__metric__value' ,
162+ 'tags__c' ,
163+ 'tags__id' ,
164+ 'tags__inexistant' ,
165+ 'tags__e__2__f' ,
166+ 'inexistant' ,
167+ ]
168+ res = d .get_attributes (* required_keys )
169+ assert len (res ) == len (required_keys )
170+ assert res [required_keys .index ('id' )] == '123'
171+ assert res [required_keys .index ('tags__feature1' )] == 121
172+ assert res [required_keys .index ('tags__name' )] == 'name'
173+ assert res [required_keys .index ('text' )] == 'document'
174+ assert res [required_keys .index ('tags__c' )] == 'd'
175+ assert res [required_keys .index ('tags__id' )] == 'identity'
176+ assert res [required_keys .index ('scores__metric__value' )] == 42
177+ assert res [required_keys .index ('tags__inexistant' )] is None
178+ assert res [required_keys .index ('inexistant' )] is None
179+ assert res [required_keys .index ('tags__e__2__f' )] == 'g'
180+
181+ required_keys_2 = ['tags' , 'text' ]
182+ res2 = d .get_attributes (* required_keys_2 )
183+ assert len (res2 ) == 2
184+ assert res2 [required_keys_2 .index ('text' )] == 'document'
185+ assert res2 [required_keys_2 .index ('tags' )] == d .tags
186+
187+ d = Document ({'id' : '123' , 'tags' : {'outterkey' : {'innerkey' : 'real_value' }}})
188+ required_keys_3 = ['tags__outterkey__innerkey' ]
189+ res3 = d .get_attributes (* required_keys_3 )
190+ assert res3 == 'real_value'
191+
192+ d = Document (content = np .array ([1 , 2 , 3 ]))
193+ res4 = np .stack (d .get_attributes (* ['blob' ]))
194+ np .testing .assert_equal (res4 , np .array ([1 , 2 , 3 ]))
0 commit comments