From 298a4c3a110618878413a6e593a081f4257cb3c6 Mon Sep 17 00:00:00 2001 From: Y Date: Wed, 31 Jan 2018 08:30:19 +0100 Subject: [PATCH] more filters --- pyruse/filters/filter_in.py | 13 +++++++++++++ pyruse/filters/filter_lowerOrEquals.py | 13 +++++++++++++ tests/filter_in.py | 22 ++++++++++++++++++++++ tests/filter_lowerOrEquals.py | 26 ++++++++++++++++++++++++++ tests/main.py | 4 +++- 5 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 pyruse/filters/filter_in.py create mode 100644 pyruse/filters/filter_lowerOrEquals.py create mode 100644 tests/filter_in.py create mode 100644 tests/filter_lowerOrEquals.py diff --git a/pyruse/filters/filter_in.py b/pyruse/filters/filter_in.py new file mode 100644 index 0000000..904e1ca --- /dev/null +++ b/pyruse/filters/filter_in.py @@ -0,0 +1,13 @@ +# pyruse is intended as a replacement to both fail2ban and epylog +# Copyright © 2017–2018 Y. Gablin +# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing. +from pyruse import base + +class Filter(base.Filter): + def __init__(self, args): + super().__init__() + self.field = args["field"] + self.values = args["values"] + + def filter(self, entry): + return entry.get(self.field, None) in self.values diff --git a/pyruse/filters/filter_lowerOrEquals.py b/pyruse/filters/filter_lowerOrEquals.py new file mode 100644 index 0000000..0e4b3ee --- /dev/null +++ b/pyruse/filters/filter_lowerOrEquals.py @@ -0,0 +1,13 @@ +# pyruse is intended as a replacement to both fail2ban and epylog +# Copyright © 2017–2018 Y. Gablin +# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing. +from pyruse import base + +class Filter(base.Filter): + def __init__(self, args): + super().__init__() + self.field = args["field"] + self.value = args["value"] + + def filter(self, entry): + return entry[self.field] <= self.value if self.field in entry else False diff --git a/tests/filter_in.py b/tests/filter_in.py new file mode 100644 index 0000000..8e86739 --- /dev/null +++ b/tests/filter_in.py @@ -0,0 +1,22 @@ +# pyruse is intended as a replacement to both fail2ban and epylog +# Copyright © 2017–2018 Y. Gablin +# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing. +from pyruse.filters.filter_in import Filter + +def whenNotInListThenFalse(): + assert not Filter({"field": "v", "values": [0, "test"]}).filter({"v": 3}) + +def whenInListSameTypeThenTrue(): + assert Filter({"field": "v", "values": [2]}).filter({"v": 2}) + +def whenInListDiffTypeThenTrue(): + assert Filter({"field": "v", "values": [2.0]}).filter({"v": 2}) + +def whenNoFieldThenFalse(): + assert not Filter({"field": "v", "values": [0]}).filter({"other": 0}) + +def unitTests(): + whenNotInListThenFalse() + whenInListSameTypeThenTrue() + whenInListDiffTypeThenTrue() + whenNoFieldThenFalse() diff --git a/tests/filter_lowerOrEquals.py b/tests/filter_lowerOrEquals.py new file mode 100644 index 0000000..77b3a09 --- /dev/null +++ b/tests/filter_lowerOrEquals.py @@ -0,0 +1,26 @@ +# pyruse is intended as a replacement to both fail2ban and epylog +# Copyright © 2017–2018 Y. Gablin +# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing. +from pyruse.filters.filter_lowerOrEquals import Filter + +def whenLowerNegIntThenTrue(): + assert Filter({"field": "v", "value": -2}).filter({"v": -3}) + +def whenLowerPosFloatThenTrue(): + assert Filter({"field": "v", "value": 2.1}).filter({"v": 1.9}) + +def whenEqualSameTypeThenTrue(): + assert Filter({"field": "v", "value": 2}).filter({"v": 2}) + +def whenEqualDiffTypeThenTrue(): + assert Filter({"field": "v", "value": 2.0}).filter({"v": 2}) + +def whenGreaterThenFalse(): + assert not Filter({"field": "v", "value": 0}).filter({"v": 2}) + +def unitTests(): + whenLowerNegIntThenTrue() + whenLowerPosFloatThenTrue() + whenEqualSameTypeThenTrue() + whenEqualDiffTypeThenTrue() + whenGreaterThenFalse() diff --git a/tests/main.py b/tests/main.py index 8f8ba7a..f88da8f 100644 --- a/tests/main.py +++ b/tests/main.py @@ -28,11 +28,13 @@ def main(): base.actionFallback = None # Unit tests - import filter_equals, filter_greaterOrEquals, filter_pcre, filter_pcreAny, filter_userExists + import filter_equals, filter_greaterOrEquals, filter_in, filter_lowerOrEquals, filter_pcre, filter_pcreAny, filter_userExists import action_counterRaise, action_counterReset, action_dailyReport, action_email, action_nftBan filter_equals.unitTests() filter_greaterOrEquals.unitTests() + filter_in.unitTests() + filter_lowerOrEquals.unitTests() filter_pcre.unitTests() filter_pcreAny.unitTests() filter_userExists.unitTests()