Repository: Project-MONAI/MONAI

Issue:
Add FL filter class
**Is your feature request related to a problem? Please describe.**
MonaiAlgo includes optional support for filters. 

**Describe the solution you'd like**
Add some example DummyFilter and abstract base class.

**Describe alternatives you've considered**
n/a

**Additional context**
n/a



Discussion:

Resolving patch:
diff --git a/monai/fl/client/monai_algo.py b/monai/fl/client/monai_algo.py
--- a/monai/fl/client/monai_algo.py
+++ b/monai/fl/client/monai_algo.py
@@ -169,7 +169,7 @@ def initialize(self, extra=None):
             self.eval_parser.read_config(config_eval_files)
             check_bundle_config(self.eval_parser)
         if len(config_filter_files) > 0:
-            self.filter_parser.read_config(config_eval_files)
+            self.filter_parser.read_config(config_filter_files)
 
         # override some config items
         self.train_parser[RequiredBundleKeys.BUNDLE_ROOT] = self.bundle_root
diff --git a/monai/fl/utils/filters.py b/monai/fl/utils/filters.py
new file mode 100644
--- /dev/null
+++ b/monai/fl/utils/filters.py
@@ -0,0 +1,54 @@
+# Copyright (c) MONAI Consortium
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#     http://www.apache.org/licenses/LICENSE-2.0
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import abc
+
+from monai.fl.utils.exchange_object import ExchangeObject
+
+
+class Filter(abc.ABC):
+    """
+    Used to apply filter to content of ExchangeObject.
+    """
+
+    def __call__(self, data: ExchangeObject, extra=None) -> ExchangeObject:
+        """
+        Run the filtering.
+
+        Arguments:
+            data: ExchangeObject containing some data.
+
+        Returns:
+            ExchangeObject: filtered data.
+        """
+
+        raise NotImplementedError
+
+
+class SummaryFilter(Filter):
+    """
+    Summary filter to content of ExchangeObject.
+    """
+
+    def __call__(self, data: ExchangeObject, extra=None) -> ExchangeObject:
+        """
+        Example filter that doesn't filter anything but only prints data summary.
+
+        Arguments:
+            data: ExchangeObject containing some data.
+
+        Returns:
+            ExchangeObject: filtered data.
+        """
+
+        print(f"Summary of ExchangeObject: {data.summary()}")
+
+        return data


Test patch:
diff --git a/tests/testing_data/config_fl_filters.json b/tests/testing_data/config_fl_filters.json
--- a/tests/testing_data/config_fl_filters.json
+++ b/tests/testing_data/config_fl_filters.json
@@ -1,4 +1,13 @@
 {
-    "pre_filters": [],
-    "post_weight_filters": []
+    "pre_filters": [
+        {
+            "_target_": "monai.fl.utils.filters.SummaryFilter"
+        }
+    ],
+    "post_weight_filters": [
+        {
+            "_target_": "monai.fl.utils.filters.SummaryFilter"
+        }
+    ],
+    "post_evaluate_filters": []
 }