<commit_before>Changelog
=========

Upcoming
--------
* Add `AccessStateExtensionMixin` to add an `access_state` field to FeinCMS objects,
  making it easier to control access to them with middleware.
* Add `MiddlewareMixin` utility class that makes extending the `incuna_auth` middleware
  functionality much easier. No more copying and pasting!
* Update `LoginRequiredMiddleware` to be based on `MiddlewareMixin`.

v2.2.0
--------
* `settings.LOGIN_URL` accepts named url in `LoginRequiredMiddleware`. (Excluding
  django < 1.5.)

v2.1.0
------
* Support Python 3.  (Note that Django < 1.5 and Python 3 don't support each other.)
* Add a battery of unit tests.<commit_msg>[ci skip] Update that changelog.<commit_after>Changelog
=========

Upcoming
--------
* Add `AccessStateExtensionMixin` to add an `access_state` field to FeinCMS objects,
  making it easier to control access to them with middleware.
* Re-implement `LoginRequiredMiddleware` using a series of inherited classes for better
  extensibility.  `BasePermissionMiddleware` is the base class, and
  `UrlPermissionMiddleware` descends from that.  `LoginPermissionMiddlewareMixin` adds
  an access condition and nice error output for authentication-related middlewares.
* Add `FeinCMSLoginRequiredMiddleware`, an equivalent middleware for FeinCMS `Page`-based
  sites.  This middleware descends from `FeinCMSPermissionMiddleware` and uses the same
  mixin.
* Add checks that verify that both of those middlewares are used with their dependencies.

v2.2.0
--------
* `settings.LOGIN_URL` accepts named url in `LoginRequiredMiddleware`. (Excluding
  django < 1.5.)

v2.1.0
------
* Support Python 3.  (Note that Django < 1.5 and Python 3 don't support each other.)
* Add a battery of unit tests.
{'fraction_non_alphanumeric': 0.10136674259681093, 'fraction_numerical': 0.01366742596810934, 'mean_word_length': 4.1982248520710055, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5644635', 'n_tokens_mistral': 507, 'n_tokens_neox': 497, 'n_words': 200}