==========
Change Log
==========

UNRELEASED
==========

v4.1
====

Additions:
----------

- Add RATELIMITE_HASH_ALGORITHM setting (#282, #285)

Minor changes:
--------------

- Fixed links in docs (#277)
- Test on Django 4.2 (#284)

v4.0
====

Breaking changes:
-----------------

- Renamed the package from ratelimit to django_ratelimit (#226)
- Changed the default value of the decorator's block kwarg to True (#271)
- Dropped support for Django versions < 3.2 (#263)
- Dropped support for Python versions < 3.7 (#263, #254, #266)

Additions:
----------

- Add RATELIMIT_IP_META_KEY setting (#218)
- Add RATELIMIT_EXCEPTION_CLASS setting (#247)
- Add a system check for cache configuration (#268)

Minor changes:
--------------

- Factor up _get_ip() logic into a single place (#218)
- Exception on empty REMOTE_ADDR is clearer (#220)
- Moved CI process to GitHub Actions (#219, #225)
- Automated release process (#273)

v3.0.1
======

Bug fixes
---------

- Fix import path values for rate= argument (#206)

v3.0
====

Breaking changes:
-----------------

- Drop Python 2 support (#167)
- Drop Django < 2.1 support (#167, #198)
- @ratelimit no longer directly supports class methods, use
  @method_decorator
- Drop RatelimitMixin in favor of @method_decorator
- Moved is_ratelimited to ratelimit.core from ratelimit.utils
- Moved ratelimit.utils.get_usage_count to ratelimit.core.get_usage

Additions:
----------

- Made ratelimit.core.get_usage a documented, public method.
- Add IP address masking (#178)
- Add "Recipes" section to documentation

Minor changes:
--------------

- Update RatelimitMiddleware to modern style (#168)
- Refactor is_ratelimited and get_usage so is_ratelimited is a thinner
  wrapper

v2.0.0
======

- A number of docs fixes
- Fail open when cache is unavailable
- Drop support for Django 1.8, 1.9, and 1.10
- Fix Django 2.0 compatibility and update documentation
- Test Django 2.1 support

v1.1.0
======

- Test against Django 1.11 and 2.0b
- Fix #85, explicitly set cache expiration slightly longer than cache
  window.
- Add Django version classifiers.

v1.0.1
======

- Added Django 1.10 support.

v1.0.0
======

- Allow requests through when cache backend is unavailable.
- Add support for Django 1.9, drop support for Django <=1.7.
- Fix several small documentation issues.
- Fix support for missing headers.

v0.6
====

- Fix CBV inheritance.
- Better Django 1.8 support, fixing deprecation warnings and testing.
- Clean up some out-of-date docs.
- Fix counting behavior around increment and new cache keys.
- Correctly pass `group` to callable `key`s.

v0.5
====

- Rates are now counted in fixed—instead of sliding—windows, except for
  per-second limits. See the Upgrade Notes.
- Mixin renamed to `RatelimitMixin` (lowercase `l`) for consistency.
- Dramatic rewrite.
  - `ip`, `field`, and `keys` arguments replaced with `key`.
  - well-known "key" values support.
- Custom callable rate functions.
  - Support for "not limited" rate.
  - Replaces ``skip_if`` argument.

v0.4
====

- (Sort of) make @ratelimit decorators stack.
- Add RateLimitMixin for CBVs.
- Fixes for Python <2.7.
- Clean up Travis and tox tests.

v0.3
====

- Drop the 'Backend' concept.
- Add settings: RATELIMIT_USE_CACHE and RATELIMIT_CACHE_PREFIX.
- Allow custom key functions.
- Tests with Django 1.4.x and 1.5.x.
- Refactor to simplify tests and development requirements.

v0.2
====

- Added real docs.
- Fix unicode field values.
- Add real tests.
- Use the Ratelimited exception, RatelimitMiddleware, and
  RATELIMIT_VIEW setting.
- Add RATELIMIT_ENABLE setting.
- Add the skip_if argument.
- Always add request.limited.

v0.1
====

- Initial release.
