Skip to content

Releases: todofixthis/filters

Filters v3.4.0

06 Oct 02:20
de88e13
Compare
Choose a tag to compare

⚠️ This release drops support for Python 3.9 ⚠️

Breaking changes

  • Added support for Python 3.12, dropped support for Python 3.9.
  • Removed filters.__version__.

Other changes

  • Added documentation build step to GitHub Actions (to check for build warnings/errors only).
  • Added now-required readthedocs.yaml file for RTD documentation builds.
  • Fixed some reStructuredText parse errors in tests and docstrings.

SHA256 Checksums

  • 3ccaa18de8e7ff10cf89d6bbe5ba80dd3e0aa5524fa17d32822abdbb81a2ad41 phx-filters-3.4.0.tar.gz
  • 5ad74dfa75e13764191bf7a333d4de57dcf9c7e40bca418096b51050808f7bdf phx_filters-3.4.0-py3-none-any.whl
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

⚠️ This release drops support for Python 3.9 ⚠️

## Breaking changes
* Added support for Python 3.12, dropped support for Python 3.9.
* Removed `filters.__version__`.
     * If needed, use [`importlib.metadata.version()`](https://docs.python.org/3/library/importlib.metadata.html#distribution-versions) to check the library's version string.

## Other changes
* Added documentation build step to GitHub Actions (to check for build warnings/errors only).
* Added now-required `readthedocs.yaml` file for RTD documentation builds.
* Fixed some reStructuredText parse errors in tests and docstrings.

# SHA256 Checksums
* `3ccaa18de8e7ff10cf89d6bbe5ba80dd3e0aa5524fa17d32822abdbb81a2ad41  phx-filters-3.4.0.tar.gz`
* `5ad74dfa75e13764191bf7a333d4de57dcf9c7e40bca418096b51050808f7bdf  phx_filters-3.4.0-py3-none-any.whl`
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEnIUO0KsYbEbt5eQY330i9k++dSEFAmUfbsgACgkQ330i9k++
dSEysg/+JXJuATjVKl3CcprtLWnQJ3QJlM39oSPs5mGNNxN/EL5CrIYFE5oxQWIN
bmzxkldT93ViMPLuVFa6u9rBmwLeQoNunGx3nNHcKQ05qOsDuoYccpGNBY0BYa7n
bfCB14ATvpkh1TCnxHm8rsXU3a8orWWk3UjFHe4Re7PEEkDKG9DJGIoz3987ejgO
DAXiryYyUj9EydIdHg0b3KInhBmuVyBvYM1N5zPLOYPJVa3ms8zxHWkj5lsydeQf
9yUCNcaGAYedm8u5U+cI89R6P89KZR7aAwsL0ccMEvJFAohi4sYrrGVqOBKe3hrp
hevPidwKB6SY18nv1z+wuVhpP8KKb7O0YX2flIAX6xNtKK4xKkiEoFWSZdmboz7M
ynlaw4rRHaqp2ybzGSP/rZqWxqXa5AGkwBG2E6e7s9mFLi03scfx474+brnVc2gQ
SL1wMaL6PdeWBly8J1Z4WBfDoBqjioFyjDHXqF4dbkOVGBjxeFNI5lnt0FxAccSY
Eb++eG/oE5mJsaKncWU2uSzlOYiBJHkoAAGOFkwhMBRhoazYIqWrZyDZUY/p79qH
/4YxbLU19jbE6feFE9krcJqY8y6wY80QzVefWi8y+GHq0PRw2EGo8oD+ub6lFuem
oD12JHjMSIr7xHgVUvHsno9Zq6PQ2txXukvn2h5G/Qd2j5laVnw=
=Z6yB
-----END PGP SIGNATURE-----

Filters v3.3.0

09 Feb 23:26
93faced
Compare
Choose a tag to compare

⚠️ Backwards-Incompatible Changes

  • [#14] If Optional is configured with a default that is callable, it will now call default to get the replacement value.

    • If your code relies on the previous behaviour, pass call_default=False to the filter:

      import filters as f
      
      # New behaviour: the replacement value is an empty list instead of ``list``:
      runner = f.FilterRunner(f.Optional(default=list), None)
      assert runner.cleaned_data == []
      
      # To get the previous behaviour, add `call_default=False` to the filter initialiser:
      runner = f.FilterRunner(f.Optional(default=list, call_default=False), None)
      assert runner.cleaned_data is list
  • Choice now raises a FilterError when initialised with an empty collection of valid choices:

    import filters as f
    
    try:
        # This raises a FilterError; must be at least 1 valid choice.
        f.Choice(choices=[])
    except f.FilterError:
        pass
  • MaxBytes now raises a FilterError when initialised with a max_bytes value less than 1:

    import filters as f
    
    try:
        # This raises a FilterError; ``max_bytes`` must be at least 1
        f.MaxBytes(max_bytes=0)
    except f.FilterError:
        pass

Other Changes

  • [#15] Added MaxChars filter for checking/truncating unicode strings.
  • [#15] Added truncate param to MaxLength.
  • Made MaxBytesTestCase more portable (just in case you're running the unit tests on a little-endian system 🥚).
  • [#28] Set up GitHub Actions for CI.
  • Lots of code cleanup, especially in comments.

SHA256 Checksums

  • 2fc1423cb7631678e4885d50de53c4bf930267ed178e29a603c913ab684e4cd3 phx-filters-3.3.0.tar.gz
  • e8f048c20937b3566c02fc0bb90902714ba81f7aa31bbcdd030e3cd26ca5939b phx_filters-3.3.0-py3-none-any.whl

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

# ⚠️ Backwards-Incompatible Changes
* [#14] If `Optional` is configured with a `default` that is callable, it will now call `default` to get the replacement value.
    * If your code relies on the previous behaviour, pass `call_default=False` to the filter:

        ```py
        import filters as f

        # New behaviour: the replacement value is an empty list instead of ``list``:
        runner = f.FilterRunner(f.Optional(default=list), None)
        assert runner.cleaned_data == []

        # To get the previous behaviour, add `call_default=False` to the filter initialiser:
        runner = f.FilterRunner(f.Optional(default=list, call_default=False), None)
        assert runner.cleaned_data is list
        ```
* `Choice` now raises a `FilterError` when initialised with an empty collection of valid choices:

    ```py
    import filters as f

    try:
        # This raises a FilterError; must be at least 1 valid choice.
        f.Choice(choices=[])
    except f.FilterError:
        pass
    ```
* `MaxBytes` now raises a `FilterError` when initialised with a `max_bytes` value less than 1:

    ```py
    import filters as f

    try:
        # This raises a FilterError; ``max_bytes`` must be at least 1
        f.MaxBytes(max_bytes=0)
    except f.FilterError:
        pass
    ```

# Other Changes
* [#15] Added `MaxChars` filter for checking/truncating unicode strings.
* [#15] Added `truncate` param to `MaxLength`.
* Made `MaxBytesTestCase` more portable (just in case you're running the unit tests on a little-endian system 🥚).
* [#28] Set up GitHub Actions for CI.
* Lots of code cleanup, especially in comments.

# SHA256 Checksums
* `2fc1423cb7631678e4885d50de53c4bf930267ed178e29a603c913ab684e4cd3  phx-filters-3.3.0.tar.gz`
* `e8f048c20937b3566c02fc0bb90902714ba81f7aa31bbcdd030e3cd26ca5939b  phx_filters-3.3.0-py3-none-any.whl`
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEnIUO0KsYbEbt5eQY330i9k++dSEFAmPlgOcACgkQ330i9k++
dSFLZhAAmuKxa3jko06CyUh93N/MnqQKsp4Us7To3d9ng3IKmt4r5Tq++KG7LHg2
6Mgm+erCcyEPiumQRhoDcTYwhCZIqZvWh4fPWEqvNl81qo54WDb6q5llg40UXp1n
lqmR6mc8XY4jxFxK8vGSHadroKslwImvIAUBsM2BnbI7mkphGqXKFRFRQOR2pVZ6
7Zf4zWmqk2qHtHK6IFriZjsZNLrsMOg0002G0RRtynvlTi1XN/ireGMYmfAOGXdb
QUnPYCc/gkyF3Y1F+w3WKSjxJiMAPAE3z/1iOoXq16SXqt6uiV45BlOp+d9ewQtJ
CFWdBkQ4K5sc/fTS9DaWyHz3itIIytbnFkDI90JhXdW4tBhXDv1U4s/USvpDZGAk
giqK9Hl1LpBKPCC6YQ/0mgl5J1kvHtC1kcWZR4xjwbZ/2OT6Hz2WtK7vNZk52FQd
01ip3Ow0zGJiTjdCs3uCxtFM5zchjh18pTXtFGnOwKOipjz6S5Tjd/fNf4sbtiJg
a6Hbk4PQuOrMKfMXTx8CXn7f9VodqaH4wJpgB5rg0ssV2Cbtv2hpkmfIGV2k1btQ
mm/i1m2jTDIxzGQL7qpIVhAL+LvoEzd02CUEV49UJqKSe4xZYUAS6Lo08k0bJ3Kf
wF8oFyKiCiEVHVdx0C/V1xnuB+5hswiobVD/GmDBPTkwsXFONNc=
=TiaB
-----END PGP SIGNATURE-----

Filters v3.2.1

06 Feb 05:18
91b1ade
Compare
Choose a tag to compare

⚠️ Filters v3.2.0 includes some backwards-incompatible changes; please review the release notes for v3.2.0 before updating!

Changelog

  • Added documentation for Choice.case_sensitive. I knew I'd forgotten something 😅

Sha256 Checksums

  • af0c3aebe34aa654c18975fe59a9307055584d0980c203bf010f7b764900ee70 phx-filters-3.2.1.tar.gz
  • 340526fa37e764007e009f6fe96434bbdbc4f9b97599ad10d7743a211736ee92 phx_filters-3.2.1-py3-none-any.whl

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

**⚠️ Filters v3.2.0 includes some backwards-incompatible changes; please review the [release notes for v3.2.0](https://github.com/todofixthis/filters/releases/tag/3.2.0) before updating!**

# Changelog
* Added documentation for `Choice.case_sensitive`.  I knew I'd forgotten something 😅

# Sha256 Checksums
* `af0c3aebe34aa654c18975fe59a9307055584d0980c203bf010f7b764900ee70  phx-filters-3.2.1.tar.gz`
* `340526fa37e764007e009f6fe96434bbdbc4f9b97599ad10d7743a211736ee92  phx_filters-3.2.1-py3-none-any.whl`
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEnIUO0KsYbEbt5eQY330i9k++dSEFAmPgjZ0ACgkQ330i9k++
dSGKcw//f4OpjBIVlhtH3JoTUk/jrAGcTqClNA1OuOdiIIBmZqxrD523HNPzY7bO
FqYYCQ1pgkpJiJsA8p9yGqjVqd5OYIvKxsPPXBXsmqTWgXjIyrPShbHZF3jmI817
TxUWZLcPymDh6lDl/yuucDpxpEFNGLPPsvURNDaIe/vl1epqvAUYXssq8mrQKH/u
uWTqKeNnQKWNNYlFncyGMTNLgK20AywtvLhg7w5IOogIOWfkUhfLKuGMmPRSIbDZ
/4nYCHsDvqa3hVtN27tG5M3+MKzjFkk58RhM2qeC97IqdWflEzho78g4m5N/QTyN
eZ78vKSRczUYpBExQ4WnOnz8qrC8OGHZumaXtXe7/GQjxaAYnPFxKO/deKRk7fqz
QNCLnkwA7JxKab60yIfiegppQmWwShvhDHdoExcCW55VM2Jp0ayn8Tf9f5MW6D4i
zQ04JiryPJknC5q17DaIEbKZQhB5ySlHxwP3f8Ca/3BHj94bETONF9JhMa6TtV8z
4fXXndHNqB0hBK1iW6Y1SXL3v+PrdZJj07sjo81uDThThH2auT/9qhEocE3385dH
deo7OghAUNxuEh3LfeBDvaaHTOzIxIJvYEhQab8ReeKrSCTJk/nPG888YENsVG8e
OQEyUZ9w2aBMmaNtxh1VKJY92rgtABfFpydblgs2ITfK/9tJ6nI=
=LSaY
-----END PGP SIGNATURE-----

Filters v3.2.0

06 Feb 04:53
64e312c
Compare
Choose a tag to compare

⚠️ Backwards-Incompatible Changes

  • FilterMapper no longer returns OrderedDict values; since Python 3.6 dict maintains key insertion order.
    • If your code relies on the previous behaviour, you can restore it by subclassing FilterMapper, like this:

      class CustomFilterMapper(f.FilterMapper):
          mapping_result_type = OrderedDict
  • Split no longer returns OrderedDict values when keys are provided (same reason as for FilterMapper).
    • There is no workaround for this, but if your code does rely on the previous behaviour, please post an issue in the issue tracker (or better yet, post a PR 😇).
    • Officially I'm no longer supporting Python 3.6, but it would be a super simple fix to make the return type override-able the same as FilterMapper.
  • Choice is now located in filters.string instead of filters.simple. However, it is still accessible under the top-level filters namespace (i.e., filters.Choice still works as expected).
    • If your code references filters.simple.Choice, you'll need to update the references to filters.string.Choice or (better) filters.Choice.
    • Despite the semantic change, you can still use Choice with any hashable types (e.g., Choice([1, 2, 3]) is still valid).
  • Many filters that were previously checking for str type now check for typing.Text (introduced in Python 3.5.2).

Other Changes

  • [#25] Added case_sensitive parameter to Choice.

    • Defaults to True, to preserve backwards-compatibility.
  • [#13] Added Item filter.

  • [#10] Added Omit filter.

  • [#9 ] Added Pick filter.

  • [#11] Added FilterRunner.apply()

  • Fixed incorrect string representation for Choice.

  • Test methods assertFilterPasses() and assertFilterErrors now return the corresponding FilterRunner instance.

    Previously you would have to do this in your tests:

    def test_something(self):
        runner = self._filter(...)
        self.assertFilterPasses(runner, ...)
        self.assertSomething(runner.cleaned_data, ...)

    In this version, you can now simplify the code a bit:

    def test_something(self):
        runner = self.assertFilterPasses(self._filter(...), ...)
        self.assertSomething(runner.cleaned_data, ...)
  • Fixed documentation entry for Round; it is now in the correct place and has a proper heading.

  • Added lots of cross-links within the documentation.

  • General code cleanup.

Sha256 Hashes

  • 1d7611f5d855172f1a8bbad5bf30aee45e929c40dc45bc769bf33d0e945042fe phx-filters-3.2.0.tar.gz
  • 457528dc09f4214a19f6c11e87033f31463f50fb5109976bd28ac00a388effdc phx_filters-3.2.0-py3-none-any.whl

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

# ⚠️ Backwards-Incompatible Changes
* `FilterMapper` no longer returns `OrderedDict` values; since Python 3.6 `dict` maintains key insertion order.
    * If your code relies on the previous behaviour, you can restore it by subclassing `FilterMapper`, like this:

        ```python
        class CustomFilterMapper(f.FilterMapper):
            mapping_result_type = OrderedDict
        ```
* `Split` no longer returns `OrderedDict` values when `keys` are provided (same reason as for `FilterMapper`).
    * There is no workaround for this, but if your code does rely on the previous behaviour, please post an issue in the issue tracker (or better yet, post a PR 😇).
    * Officially I'm no longer supporting Python 3.6, but it would be a super simple fix to make the return type override-able the same as `FilterMapper`.
* `Choice` is now located in `filters.string` instead of `filters.simple`.  However, it is still accessible under the top-level `filters` namespace (i.e., `filters.Choice` still works as expected).
    * If your code references `filters.simple.Choice`, you'll need to update the references to `filters.string.Choice` or (better) `filters.Choice`.
    * Despite the semantic change, you can still use `Choice` with any hashable types (e.g., `Choice([1, 2, 3])` is still valid).
* Many filters that were previously checking for `str` type now check for `typing.Text` (introduced in Python 3.5.2).

# Other Changes
* [#25] Added `case_sensitive` parameter to `Choice`.
    * Defaults to `True`, to preserve backwards-compatibility.
* [#13] Added `Item` filter.
* [#10] Added `Omit` filter.
* [#9 ] Added `Pick` filter.
* [#11] Added `FilterRunner.apply()`
* Fixed incorrect string representation for `Choice`.
* Test methods `assertFilterPasses()` and `assertFilterErrors` now return the corresponding `FilterRunner` instance.

    Previously you would have to do this in your tests:

    ```python
    def test_something(self):
        runner = self._filter(...)
        self.assertFilterPasses(runner, ...)
        self.assertSomething(runner.cleaned_data, ...)
    ```

    In this version, you can now simplify the code a bit:

    ```python
    def test_something(self):
        runner = self.assertFilterPasses(self._filter(...), ...)
        self.assertSomething(runner.cleaned_data, ...)
    ```

* Fixed documentation entry for `Round`; it is now in the correct place and has a proper heading.
* Added lots of cross-links within the documentation.
* General code cleanup.

# Sha256 Hashes
* `1d7611f5d855172f1a8bbad5bf30aee45e929c40dc45bc769bf33d0e945042fe  phx-filters-3.2.0.tar.gz`
* `457528dc09f4214a19f6c11e87033f31463f50fb5109976bd28ac00a388effdc  phx_filters-3.2.0-py3-none-any.whl`
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEnIUO0KsYbEbt5eQY330i9k++dSEFAmPgh44ACgkQ330i9k++
dSFo+g/6Aq/JyOTRhD+b/t3bu0GN/bfviPO/zQNmLO8YzyH8MpaBJDX8arzjj+A+
936lOUAftlhoFcvt37MACBBQveh2vtFHhV05NV8wgGXZleD9RjCHk2JJxb9RTFDo
9gi9IwR9U5aB2Cr7ysP9IKKqqFCmivp3xvTX/Kxskl89UM20iE9e9SR9Ip6821xG
iep56ZKPDKMqA/GrLOweSHGqHoo2TzHCfH9KqaZ5nuzTjFY8rEPYJxFPqJmWesRw
SmPliu5qs3iF7B1Lz7Ad2N0OYzylkuCbUgp+IukcesEEQe2/PJGsF31jUwxrYfuA
EApfDTfInsiQ1qSzr8sMhGWousbU3ewfbYFCe95m7ioWoy9CQkO13TK4aKlPGRxl
7hROo3fgpU1ehG5Ig9EHJNJM2Dcnt4aY+5nAUDLhZDBer9QPC622fsWbrAYV5qbj
nccDPMKVazU3CgcfzBG1HsQvN+RYSPQFwtiny0nUbS7Qw29iTZJNIYQT3vMlGXJ5
eaYGMQOZanOkumnX3+5HprgsZRArJNWEG/VtEbkB6IEkB+FOfHFZILRP6kbnk7tl
8I8rG8PqAKd3aynkeBjsO7hjVkV0PTGKgiNL6DJ4+sDi/Bzi2Ce6Dqhj6quXi2du
R7BcZVM+oIpZfzU+OUb/iAnTRvAU+VARXOOhRMYtTBPFWhTnCco=
=7bkT
-----END PGP SIGNATURE-----

Filters v3.1.0

03 Feb 01:08
5843483
Compare
Choose a tag to compare

Breaking Changes

MaxBytes

  • truncate now defaults to False (previously defaulted to True).
  • When truncate=True, values that get truncated are considered valid (previously, any value that was too long would be treated as invalid, regardless of whether it got truncated).

Example:

import filters as f

# In v3.1.0, truncated values are considered valid.
runner = f.FilterRunner(f.MaxBytes(22, truncate=True), 'हैलो वर्ल्ड')
assert runner.is_valid() is True  # In previous versions, this would be ``False``
assert runner.cleaned_data ==\
    b'\xe0\xa4\xb9\xe0\xa5\x88\xe0\xa4\xb2\xe0' \
    b'\xa5\x8b \xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d'

# When `truncate=False`, the behaviour is the same as previous versions.
runner = f.FilterRunner(f.MaxBytes(22, truncate=False), 'हैलो वर्ल्ड')
assert runner.is_valid() is False
assert runner.cleaned_data is None

Other Changes

MaxBytes

  • [#8] Added support for suffix, which applies a suffix to truncated values.
  • MaxBytes.truncate_bytes() (previously truncate_string) can now be used independently from a filter chain:
import filters as f

truncated = f.MaxBytes(12, suffix='...').truncate_bytes(b'Hello, world!')
assert truncated == b'Hello, wo...'

Misc

  • Fixed broken Tox configuration — it now ACTUALLY runs the unit tests 😅
  • Fixed an issue preventing test files from getting included in sdist.
  • Renamed test files to match default unittest discovery pattern.
  • Fixed a couple of typos in the documentation.

SHA256 Checksums

  • 936a1203c20f805cec024edb150ad8956cf24ed492232390132889a75ddf3d1d phx-filters-3.1.0.tar.gz
  • ca6e14a09789d806ee49ee3cfcbdd2e0f1b9a24fcb72bce8e3716744323745fb phx_filters-3.1.0-py3-none-any.whl

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

# Breaking Changes
## MaxBytes
* `truncate` now defaults to `False` (previously defaulted to `True`).
* When `truncate=True`, values that get truncated are considered valid (previously, any value that was too long would be treated as invalid, regardless of whether it got truncated).

Example:

```python
import filters as f

# In v3.1.0, truncated values are considered valid.
runner = f.FilterRunner(f.MaxBytes(22, truncate=True), 'हैलो वर्ल्ड')
assert runner.is_valid() is True  # In previous versions, this would be ``False``
assert runner.cleaned_data ==\
    b'\xe0\xa4\xb9\xe0\xa5\x88\xe0\xa4\xb2\xe0' \
    b'\xa5\x8b \xe0\xa4\xb5\xe0\xa4\xb0\xe0\xa5\x8d'

# When `truncate=False`, the behaviour is the same as previous versions.
runner = f.FilterRunner(f.MaxBytes(22, truncate=False), 'हैलो वर्ल्ड')
assert runner.is_valid() is False
assert runner.cleaned_data is None
```

# Other Changes
## MaxBytes
* [#8] Added support for `suffix`, which applies a suffix to truncated values.
* `MaxBytes.truncate_bytes()` (previously `truncate_string`) can now be used independently from a filter chain:

```python
import filters as f

truncated = f.MaxBytes(12, suffix='...').truncate_bytes(b'Hello, world!')
assert truncated == b'Hello, wo...'
```

## Misc
* Fixed broken Tox configuration — it now ACTUALLY runs the unit tests 😅
* Fixed an issue preventing test files from getting included in sdist.
* Renamed test files to match default unittest discovery pattern.
* Fixed a couple of typos in the documentation.

# SHA256 Checksums
* `936a1203c20f805cec024edb150ad8956cf24ed492232390132889a75ddf3d1d  phx-filters-3.1.0.tar.gz`
* `ca6e14a09789d806ee49ee3cfcbdd2e0f1b9a24fcb72bce8e3716744323745fb  phx_filters-3.1.0-py3-none-any.whl`
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEnIUO0KsYbEbt5eQY330i9k++dSEFAmPcXuwACgkQ330i9k++
dSE+UA//RgoFliQWKOAl8p7NQhQP8iuFycNVR8SD6zUxnj4AaVhZW/ErRijnI4cf
B3Ajdy+Ir/HGuqaXVvoc77nyBae8Q3CumrWhfZhjG1Gi2EcHKctlmzSYUZ2IXXQN
oDX0iNi6/LSw8NGAz7D4Aad/IKnmd/CXNLZsac/u9aaPtQgTXXz3gyKhuXmqR7gi
vrHsgOxrd8gNGwTbuIiIYj+aDk/S9jFbaYGKK/e6HcY/5CuweD9wGWYLOIcXPATN
Vo40qYyKT4kHyqn50ugq8sDcvBY5CP9LeKa8aM3m7WT77JjDHy1QKBTJLkZBdifG
VLcyz1hLEjjwMrp2kfDxy8emjnxvwpHG0X9+aDKHNDXBS+O9si2QdELwBF6sS14x
ZkV431AojAn0EDO4oPXJxywOle161HyjsqqxaDIhN3r4vhNkY2TDqcAynO17jTJ2
VPVdiimD2eXdrUSkuhxPMIcZKoKqtssmNznkucwY4zXN+2D2pnGUgOhHBxB3OWSE
CKgmbiccMiBlnqsJag8qb6tOwgBXxZhNpBr5Icyr9Nkhlq780NI/qV4MDAkk82Ff
R3uBT+/6RZ9ys4b0YzKkkIwoP3n3QYJVa53QxSEGXhT8AMvCXEkHGYmhJtCvVcy8
u0pg0uJ8gaH+CB7Sgo/ApNSLKfi2vO8SLQ3xDv86oJ6yaCtfXg4=
=HAX+
-----END PGP SIGNATURE-----

Filters v3.0.1

27 Jan 02:42
191466e
Compare
Choose a tag to compare

Changelog

  • Switched official support to Python 3.11, 3.10, and 3.9 (but older versions are supported unofficially).
  • Added filter_macro and FilterMacroType to the top-level filters namespace.
  • Refactored some Python 2 type hinting syntax that sneaked past previous revisions.
  • Complete overhaul of the documentation:
    • It's now much easier to navigate and link to individual filters.
    • Added examples for every single filter.
    • Fixed some issues with the example code in Writing Your Own Filters.
  • Translate documentation to NZ English 🇳🇿
  • Added release instructions to README.

SHA256 Hashes

  • 4898eab2a22f79a44bd7cab4d6ffe57333cfc1762474034dcc54dcadc2b99780 phx-filters-3.0.1.tar.gz
  • 3d77b2d2f8e601c6b94ac96cb4d87330637866515bea0c196cf62883ddbcb196 phx_filters-3.0.1-py3-none-any.whl

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

# Changelog
* Switched official support to Python 3.11, 3.10, and 3.9 (but older versions are supported unofficially).
* Added `filter_macro` and `FilterMacroType` to the top-level `filters` namespace.
* Refactored some Python 2 type hinting syntax that sneaked past previous revisions.
* Complete overhaul of the documentation:
    * It's now much easier to navigate and link to individual filters.
    * Added examples for every single filter.
    * Fixed some issues with the example code in Writing Your Own Filters.
* Translate documentation to NZ English 🇳🇿
* Added release instructions to README.

# SHA256 Hashes
* `4898eab2a22f79a44bd7cab4d6ffe57333cfc1762474034dcc54dcadc2b99780  phx-filters-3.0.1.tar.gz`
* `3d77b2d2f8e601c6b94ac96cb4d87330637866515bea0c196cf62883ddbcb196  phx_filters-3.0.1-py3-none-any.whl`
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEnIUO0KsYbEbt5eQY330i9k++dSEFAmPTOfMACgkQ330i9k++
dSE7xg//b5VMH2/1y47zxzs7ASRZ2M9QFRAQyobFESGvhSMJeFSSlZA8+pg+m1V+
cd0GJTXJKW5eijElw9Y7KOQP/ZvjsOZFSbd/CS3+W6W5u7JByOb2Y1ek+EB986ZE
U3wY3PvFI5khMGCdd565Ajbv1d+oNfIgF2mgkgSBzhwy8KR+c3y1OyfJstQtmXP7
BITACexvPwUTyvYaI/9NF2T3hDlgF7MbJ8bQMnNqGfcGi3c5bEwYXAAie9l3FKLb
zj+P5II//zbWws7rMsPUMy2jityRVl8iZMA49ISPxhQqdJWWYPkYDwFZkCpotJ/t
K/g4QWEH0Uq+IhOvXQ4vD2o6OdIrgz0InhtyplpgrAfXforYcMwTPgQyW3jwpZCs
xeYjBXRuwUeDfN/0j8THZ8vgo/FCDvJNFr2cYcMwgS9WC5BQoy6IsA00Oy63NAtR
rphzRTZoMZZaUZXJX7v1nuB58/dwiEe3viF9RdH8hkj+XxbERvFQUmaqKW6xIrGz
s4WNgrxpGcf5vWgXN6URoy17tDDeL3LmBIqzPOsdBIsAzhRQLzk5QCnWB470HznU
W6jrtEsNoMe1vzroW5gy+UNOMLHhWZKzydYJdSYYPA4Hg5DGvSaKU4+ysw88tltq
1fb4A4K1rwHcUnfxMt+5yG9eqUfcvi0I/wXcmGRIylyzs8/rvwo=
=2AEf
-----END PGP SIGNATURE-----

Filters v2.0.2

08 Oct 02:34
473eb6d
Compare
Choose a tag to compare
  • Fix links for installing extra packages (e.g., pip install phx-filters[django,iso]).

Filters v2.0.1

30 Sep 03:08
a832697
Compare
Choose a tag to compare
  • [#4] Implemented Switch filter.
  • [#5] Implemented Call filter.
  • Fixed headings in docs.
  • All super() calls are now py3-style.

Filters v2.0.0

29 Aug 12:33
6866e72
Compare
Choose a tag to compare
  • Dropped support for Python 2.
  • Added support for Python 3.7 and 3.8.
  • Adopted PEP-8.
  • Renamed fork to phx-filters.