def test_insert_tree_without_mapping(self): # with explicit nested initial_agg_1 = Aggs( { "week": { "date_histogram": { "field": "date", "format": "yyyy-MM-dd", "interval": "1w", } } }, ) self.assertEqual({n.identifier for n in initial_agg_1.list()}, {"week"}) pasted_agg_1 = Aggs( { "nested_below_week": { "nested": {"path": "local_metrics"}, "aggs": { "local_metrics.field_class.name": { "terms": { "field": "local_metrics.field_class.name", "size": 10, } } }, } } ) self.assertEqual( to_id_set(pasted_agg_1.list()), {"nested_below_week", "local_metrics.field_class.name"}, ) initial_agg_1.insert_tree(pasted_agg_1, "week") self.assertEqual( to_id_set(initial_agg_1.list()), {"week", "nested_below_week", "local_metrics.field_class.name"}, ) self.assertEqual( initial_agg_1.to_dict(), { "week": { "date_histogram": { "field": "date", "format": "yyyy-MM-dd", "interval": "1w", }, "aggs": { "nested_below_week": { "nested": {"path": "local_metrics"}, "aggs": { "local_metrics.field_class.name": { "terms": { "field": "local_metrics.field_class.name", "size": 10, } } }, } }, } }, )
def test_add_node_with_mapping(self): with_mapping = Aggs(mapping=MAPPING, nested_autocorrect=True) self.assertEqual(len(with_mapping.list()), 0) # add regular node with_mapping = with_mapping.aggs(Terms("workflow", field="workflow")) self.assertEqual( with_mapping.to_dict(), {"workflow": {"terms": {"field": "workflow"}}} ) # try to add field aggregation on non-existing field will fail with self.assertRaises(AbsentMappingFieldError): with_mapping.aggs( Terms("imaginary_agg", field="imaginary_field"), insert_below="workflow", ) self.assertEqual(len(with_mapping.list()), 1) # try to add aggregation on a non-compatible field will fail with self.assertRaises(InvalidOperationMappingFieldError): with_mapping.aggs( Avg("average_of_string", field="classification_type"), insert_below="workflow", ) self.assertEqual(len(with_mapping.list()), 1) # add field aggregation on field passing through nested will automatically add nested with_mapping = with_mapping.aggs( Avg("local_f1_score", field="local_metrics.performance.test.f1_score"), insert_below="workflow", ) self.assertEqual( with_mapping.to_dict(), { "workflow": { "aggs": { "nested_below_workflow": { "aggs": { "local_f1_score": { "avg": { "field": "local_metrics.performance.test.f1_score" } } }, "nested": {"path": "local_metrics"}, } }, "terms": {"field": "workflow"}, } }, ) self.assertIn("nested_below_workflow", with_mapping) nested_node = with_mapping.get("nested_below_workflow") self.assertEqual(nested_node.KEY, "nested") self.assertEqual(nested_node.path, "local_metrics") # add other agg requiring nested will reuse nested agg as parent with_mapping = with_mapping.aggs( Avg("local_precision", field="local_metrics.performance.test.precision"), insert_below="workflow", ) self.assertEqual( with_mapping.to_dict(), { "workflow": { "aggs": { "nested_below_workflow": { "aggs": { "local_f1_score": { "avg": { "field": "local_metrics.performance.test.f1_score" } }, "local_precision": { "avg": { "field": "local_metrics.performance.test.precision" } }, }, "nested": {"path": "local_metrics"}, } }, "terms": {"field": "workflow"}, } }, ) self.assertEqual(len(with_mapping.list()), 4) # add under a nested parent a field aggregation that requires to be located under root will automatically # add reverse-nested with_mapping = with_mapping.aggs( Terms("language_terms", field="language"), insert_below="nested_below_workflow", ) self.assertEqual(len(with_mapping.list()), 6) self.assertEqual( with_mapping.to_dict(), { "workflow": { "aggs": { "nested_below_workflow": { "aggs": { "local_f1_score": { "avg": { "field": "local_metrics.performance.test.f1_score" } }, "local_precision": { "avg": { "field": "local_metrics.performance.test.precision" } }, "reverse_nested_below_nested_below_workflow": { "aggs": { "language_terms": { "terms": {"field": "language"} } }, "reverse_nested": {}, }, }, "nested": {"path": "local_metrics"}, } }, "terms": {"field": "workflow"}, } }, )
def test_paste_tree_with_mapping(self): # with explicit nested initial_agg_1 = Aggs( { "week": { "date_histogram": { "field": "date", "format": "yyyy-MM-dd", "interval": "1w", } } }, mapping=MAPPING, ) self.assertEqual(to_id_set(initial_agg_1.list()), {"week"}) pasted_agg_1 = Aggs( { "nested_below_week": { "nested": {"path": "local_metrics"}, "aggs": { "local_metrics.field_class.name": { "terms": { "field": "local_metrics.field_class.name", "size": 10, } } }, } } ) self.assertEqual( to_id_set(pasted_agg_1.list()), {"nested_below_week", "local_metrics.field_class.name"}, ) initial_agg_1.insert_tree(pasted_agg_1, "week") self.assertEqual( to_id_set(initial_agg_1.list()), {"week", "nested_below_week", "local_metrics.field_class.name"}, ) self.assertEqual( initial_agg_1.to_dict(), { "week": { "date_histogram": { "field": "date", "format": "yyyy-MM-dd", "interval": "1w", }, "aggs": { "nested_below_week": { "nested": {"path": "local_metrics"}, "aggs": { "local_metrics.field_class.name": { "terms": { "field": "local_metrics.field_class.name", "size": 10, } } }, } }, } }, ) # without explicit nested initial_agg_2 = Aggs( { "week": { "date_histogram": { "field": "date", "format": "yyyy-MM-dd", "interval": "1w", } } }, mapping=MAPPING, nested_autocorrect=True, ) self.assertEqual(to_id_set(initial_agg_2.list()), {"week"}) pasted_agg_2 = Aggs( { "local_metrics.field_class.name": { "terms": {"field": "local_metrics.field_class.name", "size": 10} } } ) self.assertEqual( to_id_set(pasted_agg_2.list()), {"local_metrics.field_class.name"} ) initial_agg_2.insert_tree(pasted_agg_2, "week") self.assertEqual( to_id_set(initial_agg_2.list()), {"week", "nested_below_week", "local_metrics.field_class.name"}, ) self.assertEqual( initial_agg_2.to_dict(), { "week": { "date_histogram": { "field": "date", "format": "yyyy-MM-dd", "interval": "1w", }, "aggs": { "nested_below_week": { "nested": {"path": "local_metrics"}, "aggs": { "local_metrics.field_class.name": { "terms": { "field": "local_metrics.field_class.name", "size": 10, } } }, } }, } }, )