Changelog
=========

All notable changes to this project will be documented in this file.
The format is inspired by `Keep a Changelog <https://keepachangelog.com/en/1.0.0/>`_
and this project adheres to `Semantic Versioning <https://semver.org/spec/v2.0.0.html>`_.

`v0.14.0`_ - 18-June-2026
-------------------------
Added
+++++
- Added type annotations and matching docstring information to ``Env`` methods
  `#633 <https://github.com/joke2k/django-environ/pull/633>`_.
- Added a Python 3.9 compatibility dependency on ``typing_extensions`` for
  ``TypeAlias``
  `#633 <https://github.com/joke2k/django-environ/pull/633>`_.

Changed
+++++++
- Updated ``Env.read_env()`` to accept path-like and file-like objects without
  closing file-like objects supplied by the caller
  `#633 <https://github.com/joke2k/django-environ/pull/633>`_.

Fixed
+++++
- Added an explicit error when ``Env.read_env()`` cannot determine its caller
  frame while resolving the default ``.env`` path
  `#633 <https://github.com/joke2k/django-environ/pull/633>`_.


`v0.13.0`_ - 18-February-2026
-----------------------------
Added
+++++
- Added optional warnings when defaults are used
  `#582 <https://github.com/joke2k/django-environ/pull/582>`_.
- Added `choices` argument support for value validation in ``Env.str(...)``
  `#555 <https://github.com/joke2k/django-environ/pull/555>`_.
- Added Valkey support via ``valkey://`` and ``valkeys://`` cache URL schemes
  `#554 <https://github.com/joke2k/django-environ/pull/554>`_.
- Added support for ``rediss://`` scheme in channels URL parsing
  `#573 <https://github.com/joke2k/django-environ/pull/573>`_.
- Added django-prometheus database backend aliases to DB URL parsing schemes
  `#559 <https://github.com/joke2k/django-environ/pull/559>`_.

Changed
+++++++
- Declared support for Python 3.14
  `#580 <https://github.com/joke2k/django-environ/pull/580>`_.
- Declared support for Django 5.2 and Django 6.0
  `#578 <https://github.com/joke2k/django-environ/pull/578>`_.

Fixed
+++++
- Improved type hint coverage and related lint issues
  `#546 <https://github.com/joke2k/django-environ/pull/546>`_.
- Fixed typos in the FAQ page
  `#445 <https://github.com/joke2k/django-environ/pull/445>`_.


`v0.12.1`_ - 13-February-2026
-----------------------------
Fixed
+++++
- Fixed PostgreSQL cluster URL parsing with bracketed IPv6 hosts in recent
  Python versions, preventing failures in runtime URL parsing and related
  regression tests
  `#574 <https://github.com/joke2k/django-environ/issues/574>`_.
- Fixed debug logging in ``Env.get_value()`` to avoid evaluating lazy default
  objects when DEBUG logging is enabled
  `#571 <https://github.com/joke2k/django-environ/issues/571>`_.


`v0.12.0`_ - 8-November-2024
-----------------------------
Fixed
+++++
- Include prefix in the ``ImproperlyConfigured`` error message
  `#513 <https://github.com/joke2k/django-environ/issues/513>`_.

Added
+++++
- Add support for Python 3.12 and 3.13
  `#538 <https://github.com/joke2k/django-environ/issues/538>`_.
- Add support for Django 5.1
  `#535 <https://github.com/joke2k/django-environ/issues/535>`_.
- Add support for Django CockroachDB driver
  `#509 <https://github.com/joke2k/django-environ/issues/509>`_.
- Add support for Django Channels
  `#266 <https://github.com/joke2k/django-environ/issues/266>`_.

Changed
+++++++
- Disabled inline comments handling by default due to potential side effects.
  While the feature itself is useful, the project's philosophy dictates that
  it should not be enabled by default for all users
  `#499 <https://github.com/joke2k/django-environ/issues/499>`_.

Removed
+++++++
- Removed support of Python 3.6, 3.7 and 3.8
  `#538 <https://github.com/joke2k/django-environ/issues/538>`_.
- Removed support of Django 1.x.
  `#538 <https://github.com/joke2k/django-environ/issues/538>`_.


`v0.11.2`_ - 1-September-2023
-----------------------------
Fixed
+++++
- Revert "Add variable expansion." feature
  due to `#490 <https://github.com/joke2k/django-environ/issues/490>`_.


`v0.11.1`_ - 30-August-2023
---------------------------
Fixed
+++++
- Revert "Add interpolate argument to avoid resolving proxied values." feature
  due to `#485 <https://github.com/joke2k/django-environ/issues/485>`_.


`v0.11.0`_ - 30-August-2023
---------------------------
Added
+++++
- Added support for Django 4.2
  `#456 <https://github.com/joke2k/django-environ/pull/456>`_.
- Added support for secure Elasticsearch connections
  `#463 <https://github.com/joke2k/django-environ/pull/463>`_.
- Added variable expansion
  `#468 <https://github.com/joke2k/django-environ/pull/468>`_.
- Added capability to handle comments after ``#``, after quoted values,
  like ``KEY= 'part1 # part2' # comment``
  `#475 <https://github.com/joke2k/django-environ/pull/475>`_.
- Added support for ``interpolate`` parameter
  `#415 <https://github.com/joke2k/django-environ/pull/415>`_.

Changed
+++++++
- Used ``mssql-django`` as engine for SQL Server
  `#446 <https://github.com/joke2k/django-environ/pull/446>`_.
- Changed handling bool values, stripping whitespace around value
  `#475 <https://github.com/joke2k/django-environ/pull/475>`_.
- Use ``importlib.util.find_spec`` to ``replace pkgutil.find_loader``
  `#482 <https://github.com/joke2k/django-environ/pull/482>`_.


Removed
+++++++
- Removed support of Python 3.5.


`v0.10.0`_ - 2-March-2023
-------------------------
Added
+++++
- Use the core redis library by default if running Django >= 4.0
  `#356 <https://github.com/joke2k/django-environ/issues/356>`_.
- Value of dict can now contain an equal sign
  `#241 <https://github.com/joke2k/django-environ/pull/241>`_.
- Added support for Python 3.11.
- Added ``CONN_HEALTH_CHECKS`` to database base options
  `#413 <https://github.com/joke2k/django-environ/issues/413>`_.
- Added ``encoding`` parameter to ``read_env`` with default value 'utf8'
  `#442 <https://github.com/joke2k/django-environ/pull/442>`_.
- Added support for Django 4.1
  `#416 <https://github.com/joke2k/django-environ/issues/416>`_.

Deprecated
++++++++++
- Support of Python < 3.6 is deprecated and will be removed
  in next major version.

Changed
+++++++
- Used UTF-8 as a encoding when open ``.env`` file.
- Provided access to ``DB_SCHEMES`` through ``cls`` rather than
  ``Env`` in ``db_url_config``
  `#414 <https://github.com/joke2k/django-environ/pull/414>`_.
- Correct CI workflow to use supported Python versions/OS matrix
  `#441 <https://github.com/joke2k/django-environ/pull/441>`_.
- Reworked trigger CI workflows strategy
  `#440 <https://github.com/joke2k/django-environ/pull/440>`_.

Fixed
+++++
- Fixed logic of ``Env.get_value()`` to skip parsing only when
  ``default=None``, not for all default values that coerce to ``False``
  `#404 <https://github.com/joke2k/django-environ/issues/404>`_.
- Deleted duplicated include in docs/quickstart.rst
  `#439 <https://github.com/joke2k/django-environ/pull/439>`_.

Removed
+++++++
- Removed deprecated ``Env.unicode()``.
- Removed ``environ.register_schemes`` calls and do not modify global
  ``urllib.parse.urlparse``'s ``uses_*`` variables as this no longer needed
  `#246 <https://github.com/joke2k/django-environ/pull/246>`_.


`v0.9.0`_ - 15-June-2022
------------------------
Added
+++++
- Added support for Postgresql cluster URI
  `#355 <https://github.com/joke2k/django-environ/pull/355>`_.
- Added support for Django 4.0
  `#371 <https://github.com/joke2k/django-environ/issues/371>`_.
- Added support for prefixed variables
  `#362 <https://github.com/joke2k/django-environ/issues/362>`_.
- Amended documentation.

Deprecated
++++++++++
- ``Env.unicode()`` is deprecated and will be removed in the next
  major release. Use ``Env.str()`` instead.

Changed
+++++++
- Attach cause to ``ImproperlyConfigured`` exception
  `#360 <https://github.com/joke2k/django-environ/issues/360>`_.

Fixed
+++++
- Fixed ``_cast_urlstr`` unquoting
  `#357 <https://github.com/joke2k/django-environ/issues/357>`_.
- Fixed documentation regarding unsafe characters in URLs
  `#220 <https://github.com/joke2k/django-environ/issues/220>`_.
- Fixed ``environ.Path.__eq__()`` to compare paths correctly
  `#86 <https://github.com/joke2k/django-environ/issues/86>`_,
  `#197 <https://github.com/joke2k/django-environ/issues/197>`_.


`v0.8.1`_ - 20-October-2021
---------------------------
Fixed
+++++
- Fixed "Invalid line" spam logs on blank lines in env file
  `#340 <https://github.com/joke2k/django-environ/issues/340>`_.
- Fixed ``memcache``/``pymemcache`` URL parsing for correct identification of
  connection type `#337 <https://github.com/joke2k/django-environ/issues/337>`_.


`v0.8.0`_ - 17-October-2021
---------------------------
Added
+++++
- Log invalid lines when parse ``.env`` file
  `#283 <https://github.com/joke2k/django-environ/pull/283>`_.
- Added docker-style file variable support
  `#189 <https://github.com/joke2k/django-environ/issues/189>`_.
- Added option to override existing variables with ``read_env``
  `#103 <https://github.com/joke2k/django-environ/issues/103>`_,
  `#249 <https://github.com/joke2k/django-environ/issues/249>`_.
- Added support for empty var with None default value
  `#209 <https://github.com/joke2k/django-environ/issues/209>`_.
- Added ``pymemcache`` cache backend for Django 3.2+
  `#335 <https://github.com/joke2k/django-environ/pull/335>`_.

Fixed
+++++
- Keep newline/tab escapes in quoted strings
  `#296 <https://github.com/joke2k/django-environ/pull/296>`_.
- Handle escaped dollar sign in values
  `#271 <https://github.com/joke2k/django-environ/issues/271>`_.
- Fixed incorrect parsing of ``DATABASES_URL`` for Google Cloud MySQL
  `#294 <https://github.com/joke2k/django-environ/issues/294>`_.


`v0.7.0`_ - 11-September-2021
------------------------------
Added
+++++
- Added support for negative float strings
  `#160 <https://github.com/joke2k/django-environ/issues/160>`_.
- Added Elasticsearch5 to search scheme
  `#297 <https://github.com/joke2k/django-environ/pull/297>`_.
- Added Elasticsearch7 to search scheme
  `#314 <https://github.com/joke2k/django-environ/issues/314>`_.
- Added the ability to use ``bytes`` or ``str`` as a default value for ``Env.bytes()``.

Fixed
+++++
- Fixed links in the documentation.
- Use default option in ``Env.bytes()``
  `#206 <https://github.com/joke2k/django-environ/pull/206>`_.
- Safely evaluate a string containing an invalid Python literal
  `#200 <https://github.com/joke2k/django-environ/issues/200>`_.

Changed
+++++++
- Added 'Funding' and 'Say Thanks!' project urls on pypi.
- Stop raising ``UserWarning`` if ``.env`` file isn't found. Log a message with
  ``INFO`` log level instead `#243 <https://github.com/joke2k/django-environ/issues/243>`_.


`v0.6.0`_ - 4-September-2021
----------------------------
Added
+++++
- Python 3.9, 3.10 and pypy 3.7 are now supported.
- Django 3.1 and 3.2 are now supported.
- Added missed classifiers to ``setup.py``.
- Accept Python 3.6 path-like objects for ``read_env``
  `#106 <https://github.com/joke2k/django-environ/issues/106>`_,
  `#286 <https://github.com/joke2k/django-environ/issues/286>`_.

Fixed
+++++
- Fixed various code linting errors.
- Fixed typos in the documentation.
- Added missed files to the package contents.
- Fixed ``db_url_config`` to work the same for all postgres-like schemes
  `#264 <https://github.com/joke2k/django-environ/issues/264>`_,
  `#268 <https://github.com/joke2k/django-environ/issues/268>`_.

Changed
+++++++
- Refactor tests to use pytest and follow DRY.
- Moved CI to GitHub Actions.
- Restructuring of project documentation.
- Build and test package documentation as a part of CI pipeline.
- Build and test package distribution as a part of CI pipeline.
- Check ``MANIFEST.in`` in a source package for completeness as a part of CI
  pipeline.
- Added ``pytest`` and ``coverage[toml]`` to setuptools' ``extras_require``.


`v0.5.0`_ - 30-August-2021
--------------------------
Added
+++++
- Support for Django 2.1 & 2.2.
- Added tox.ini targets.
- Added secure redis backend URLs via ``rediss://``.
- Added ``cast=str`` to ``str()`` method.

Fixed
+++++
- Fixed misspelling in the documentation.

Changed
+++++++
- Validate empty cache url and invalid cache schema.
- Set ``long_description_content_type`` in setup.
- Improved Django 1.11 database configuration support.


`v0.4.5`_ - 25-June-2018
------------------------
Added
+++++
- Support for Django 2.0.
- Support for smart casting.
- Support PostgreSQL unix domain socket paths.
- Tip: Multiple env files.

Changed
+++++++
- Fix parsing option values ``None``, ``True`` and ``False``.
- Order of importance of engine configuration in ``db_url_config``.

Removed
+++++++
- Remove ``django`` and ``six`` dependencies.


`v0.4.4`_ - 21-August-2017
--------------------------

Added
+++++
- Support for ``django-redis`` multiple locations (master/slave, shards).
- Support for Elasticsearch2.
- Support for Mysql-connector.
- Support for ``pyodbc``.
- Added ``__contains__`` feature to Environ class.

Fixed
+++++
- Fix Path subtracting.

`v0.4.3`_ - 21-August-2017
--------------------------
Changed
+++++++
- Rollback the default Environ to ``os.environ``.


`v0.4.2`_ - 13-April-2017
-------------------------
Added
+++++
- Confirm support for Django 1.11.
- Support for Redshift database URL.

Changed
+++++++
- Fixed uwsgi settings reload problem
  `#55 <https://github.com/joke2k/django-environ/issues/55>`_.
- Update support for ``django-redis`` urls
  `#109 <https://github.com/joke2k/django-environ/pull/109>`_.


`v0.4.1`_ - 13-November-2016
----------------------------
Added
+++++
- Add support for Django 1.10.

Changed
+++++++
- Fixed for unsafe characters into URLs.
- Clarifying warning on missing or unreadable file.
  Thanks to `@nickcatal <https://github.com/nickcatal>`_.
- Fixed support for Oracle urls.
- Fixed support for ``django-redis``.


`v0.4`_ - 23-September-2015
---------------------------
Added
+++++
- New email schemes - ``smtp+ssl`` and ``smtp+tls`` (``smtps`` would be deprecated).
- Added tuple support. Thanks to `@anonymouzz <https://github.com/anonymouzz>`_.
- Added LDAP url support for database. Thanks to
  `django-ldapdb/django-ldapdb <https://github.com/django-ldapdb/django-ldapdb>`_.

Changed
+++++++
- Fixed non-ascii values (broken in Python 2.x).
- ``redis_cache`` replaced by ``django_redis``.
- Fixed psql/pgsql url.


`v0.3.1`_ - 19 Sep 2015
-----------------------
Added
+++++
- Added ``email`` as alias for ``email_url``.
- Django 1.7 is now supported.
- Added LDAP scheme support for ``db_url_config``.

Fixed
+++++
- Fixed typos in the documentation.
- Fixed ``environ.Path.__add__`` to correctly handle plus operator.
- Fixed ``environ.Path.__contains__`` to correctly work on Windows.


`v0.3`_ - 03-June-2014
----------------------
Added
+++++
- Added cache url support.
- Added email url support.
- Added search url support.

Changed
+++++++
- Rewriting README.rst.


v0.2.1 - 19-April-2013
----------------------
Changed
+++++++
- ``Env.__call__`` now uses ``Env.get_value`` instance method.


v0.2 - 16-April-2013
--------------------
Added
+++++
- Added advanced float parsing (comma and dot symbols to separate thousands and decimals).

Fixed
+++++
- Fixed typos in the documentation.


v0.1 - 2-April-2013
-------------------
Added
+++++
- Initial release.


.. _v0.14.0: https://github.com/joke2k/django-environ/compare/v0.13.0...v0.14.0
.. _v0.13.0: https://github.com/joke2k/django-environ/compare/v0.12.1...v0.13.0
.. _v0.12.1: https://github.com/joke2k/django-environ/compare/v0.12.0...v0.12.1
.. _v0.12.0: https://github.com/joke2k/django-environ/compare/v0.11.2...v0.12.0
.. _v0.11.2: https://github.com/joke2k/django-environ/compare/v0.11.1...v0.11.2
.. _v0.11.1: https://github.com/joke2k/django-environ/compare/v0.11.0...v0.11.1
.. _v0.11.0: https://github.com/joke2k/django-environ/compare/v0.10.0...v0.11.0
.. _v0.10.0: https://github.com/joke2k/django-environ/compare/v0.9.0...v0.10.0
.. _v0.9.0: https://github.com/joke2k/django-environ/compare/v0.8.1...v0.9.0
.. _v0.8.1: https://github.com/joke2k/django-environ/compare/v0.8.0...v0.8.1
.. _v0.8.0: https://github.com/joke2k/django-environ/compare/v0.7.0...v0.8.0
.. _v0.7.0: https://github.com/joke2k/django-environ/compare/v0.6.0...v0.7.0
.. _v0.6.0: https://github.com/joke2k/django-environ/compare/v0.5.0...v0.6.0
.. _v0.5.0: https://github.com/joke2k/django-environ/compare/v0.4.5...v0.5.0
.. _v0.4.5: https://github.com/joke2k/django-environ/compare/v0.4.4...v0.4.5
.. _v0.4.4: https://github.com/joke2k/django-environ/compare/v0.4.3...v0.4.4
.. _v0.4.3: https://github.com/joke2k/django-environ/compare/v0.4.2...v0.4.3
.. _v0.4.2: https://github.com/joke2k/django-environ/compare/v0.4.1...v0.4.2
.. _v0.4.1: https://github.com/joke2k/django-environ/compare/v0.4...v0.4.1
.. _v0.4: https://github.com/joke2k/django-environ/compare/v0.3.1...v0.4
.. _v0.3.1: https://github.com/joke2k/django-environ/compare/v0.3...v0.3.1
.. _v0.3: https://github.com/joke2k/django-environ/compare/v0.2.1...v0.3
