Let you register and use filters in right way
Project description
filterutil
filterutil is simple, yet very powerful filtering tool.
How to install
You could install from PyPi:
$ python3 -m pip install filterutil
How to use
Simple filter
from filterutil import Filter
def test_func():
my_filter = Filter(lambda x: x == 1)
# assert False
assert not my_filter.apply(2):
Coupling filters with AND policy
from filterutil import Filter
def test_func():
a = Filter(lambda x: x == 1)
b = Filter(lambda x: isinstance(x, int))
compound_filter = a & b
# order matters:
# "compound_filter = a & b" means first a then b
# "compound_filter = b & a" means first b then a
# assert False
assert not compound_filter.apply(2)
Coupling filters with OR policy
from filterutil import Filter
def test_func():
a = Filter(lambda x: x == 1)
b = Filter(lambda x: isinstance(x, int))
# order still matters
compound_filter = a | b
# assert True
assert compound_filter.apply(2)
Coupling filters with XOR policy
from filterutil import Filter
def test_func():
a = Filter(lambda x: x == 1)
b = Filter(lambda x: x == 3)
compound_filter = a ^ b
# assert True
assert compound_filter.apply(2)
Infinite nesting
from filterutil import Filter
def test_func():
a = Filter(lambda x: isinstance(x, int))
b = Filter(lambda x: isinstance(x, str))
c = Filter(lambda x: x == 1)
# multiline
compound_filter = a | b
compound_filter = compound_filter & c
# order is: (a or b) and c
# assert False
assert not compound_filter.apply(2)
# is not the same as inline
# because of python operator precedence
compound_filter = filter_a | filter_b & filter_c
# order is: a or (b and c)
# assert True
assert compound_filter.apply(2)
Collection of filters with same policy
from filterutil import Filter, Filters, OrFilters, XorFilters, FilterCouplingPolicy
def test_func():
# Filters is AND collection by default
and_filters = Filters()
and_filters['a'] = Filter(lambda x: isinstance(x, int))
and_filters['b'] = Filter(lambda x: isinstance(x, str))
# same as
and_filters = Filters(
a=Filter(lambda x: isinstance(x, int)),
b=Filter(lambda x: isinstance(x, str)),
)
# ---
# assert False
assert not and_filters.apply(2)
# OR collection
or_filters = OrFilters()
#same as
or_filters = Filters(FilterCouplingPolicy.OR)
# ---
or_filters['a'] = Filter(lambda x: isinstance(x, int))
or_filters['b'] = Filter(lambda x: isinstance(x, str))
# assert True
assert or_filters.apply(2)
# XOR collection
xor_filters = XorFilters()
#same as
xor_filters = Filters(FilterCouplingPolicy.XOR)
# ---
xor_filters['a'] = Filter(lambda x: isinstance(x, int))
xor_filters['b'] = Filter(lambda x: isinstance(x, str))
# assert True
assert xor_filters.apply(False)
It is possible to select certain filters of collection
from filterutil import Filter, Filters, OrFilters
def test_func():
and_filters = Filters(
a=Filter(lambda x: x == 2),
b=Filter(lambda x: isinstance(x, int)),
c=Filter(lambda x: isinstance(x, str)),
)
assert and_filters.apply(2, filter_names=['a', 'b'])
assert not and_filters.apply(2, filter_names=['b', 'c'])
or_filters = OrFilters(
a=Filter(lambda x: x == 1),
b=Filter(lambda x: isinstance(x, int)),
c=Filter(lambda x: isinstance(x, str)),
)
assert or_filters.apply(2, filter_names=['a', 'b'])
assert not or_filters.apply(2, filter_names=['a', 'c'])
Apply another coupling policy for the collection dinamically
from filterutil import Filter, Filters, OrFilters, FilterCouplingPolicy
def test_func():
and_filters = Filters(
a=Filter(lambda x: x == 1),
b=Filter(lambda x: isinstance(x, int)),
)
assert not and_filters.apply(2)
assert and_filters.apply_or(2)
# or
assert and_filters.apply(2, coupling_policy=FilterCouplingPolicy.OR)
or_filters = OrFilters(
a=Filter(lambda x: x == 1),
b=Filter(lambda x: isinstance(x, int)),
)
assert or_filters.apply(2)
assert not or_filters.apply_and(2)
assert not or_filters.apply_xor(2)
Infinite nesting of collections
from filterutil import Filter, Filters, OrFilters, XorFilters, FilterCouplingPolicy
def test_func():
and_filters = Filters(
FilterCouplingPolicy.AND,
a=Filter(lambda x: isinstance(x, int)),
b=Filter(lambda x: isinstance(x, str)),
)
xor_filters = Filters(
FilterCouplingPolicy.XOR,
a=Filter(lambda x: x == 1),
b=Filter(lambda x: x == 3),
)
two_collections_in_one = OrFilters(
first=and_filters,
second=xor_filters,
)
# assert True
assert two_collections_in_one.apply(2)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
filterutil-1.0.1.tar.gz
(8.9 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file filterutil-1.0.1.tar.gz.
File metadata
- Download URL: filterutil-1.0.1.tar.gz
- Upload date:
- Size: 8.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0bc3a3f734facef539fe354001d8a262ffeedcacc8f3666d2ca5816865856b70
|
|
| MD5 |
584fb49536809d7977a777d4cba15652
|
|
| BLAKE2b-256 |
1dd960449f2666a678b86ef5249b7e7998b50ea37c176b27ad97b6f113637480
|
File details
Details for the file filterutil-1.0.1-py3-none-any.whl.
File metadata
- Download URL: filterutil-1.0.1-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e5a10f0d79a1eca4f61a4b3bc0aae7f7ef8e8fa499c82537646456d095f6ffc
|
|
| MD5 |
c806b5347ac4b1a3761f43ff7f6b7e82
|
|
| BLAKE2b-256 |
23508596eec4a32c8fe4e472d9d7df32eeb608bc2d82e3aa9e30e9b8af0f1c2a
|