view CHANGES.txt @ 654:0d6673d06c2c

Add support for using "tomllib" (in Python's stdlib since 3.11) and "tomli" TOML packages. They are preferred if they are found to be installed. But note that the declared dependency for the "toml" extra nevertheless is the "toml" package. Because it is available for all supported Python versions. So use Python 3.11+ or install "tomli" manually if you want to use the alternate packages.
author Franz Glasner <fzglas.hg@dom66.de>
date Thu, 19 May 2022 22:10:59 +0200
parents 211288645f02
children 2b1c7a68f913
line wrap: on
line source

.. -*- coding: utf-8; mode: rst; indent-tabs-mode: nil; -*-

..
.. Valid tags: breaking, feature, bugfix, misc, test, doc
..

.. _changelog:

Changelog
=========

Pre-1.0 Series
--------------

n/a (n/a)
~~~~~~~~~

- **[feature]**
  Allow to enable and disable the internal caching

- **[feature]**
  Add support for using :py:mod:`tomllib` (in Python's stdlib since 3.11)
  and :py:mod:`tomli` TOML packages. They are preferred if they are found
  to be installed.

  But note that the declared dependency for the ``toml`` extra nevertheless
  is the :py:mod:`toml` package. Because it is available for all supported
  Python versions.
  So use Python 3.11+ or install :py:mod:`tomli` manually if you want to
  use the alternate packages.

- **[bugfix]**
  For better consistency: use `.getvarl_s()` instead of `.getvarl()`
  in the implementation of `__len__()` in jailed configurations.

- **[bugfix]**
  For better TOML compatibility open TOML files with ``encoding=""``.


0.20.5 (2022-03-07)
~~~~~~~~~~~~~~~~~~~

- **[bugfix]**
  The configuration value ``{{::DEL::}}`` is not subject to
  interpolation any more.  This fixes the handling of these deletion
  markers when merging configurations: sometimes they were tried to be
  interpolated -- and this failed.

- **[bugfix]**
  The merge login should never interpolate variables. But some parts
  of the merge logic did this unintentionally.


0.20.4 (2022-01-17)
~~~~~~~~~~~~~~~~~~~

- **[bugfix]**
  In the C extension: make sure that a default is returned as-is and not
  as copy.

- **[misc]**
  Bring the exception messages from the C extension more in-line with the
  Python implementation.


0.20.3 (2022-01-12)
~~~~~~~~~~~~~~~~~~~

- **[feature]**
  Add some more functions to the optional C-extension module:
  :py:meth:`configmix.config.Configuration.getvarl_s` and
  :py:meth:`configmix.config.Configuration.getvar`.

- **[feature]**
  Some internal enhancements within the C-extension module.


0.20.2 (2022-01-11)
~~~~~~~~~~~~~~~~~~~

- **[bugfix]**
  The source distribution archive file did not contain any of the
  `__init__.py` files because of a bogus entry in :file:`MANIFEST.in`.

- **[feature]**
  More speedsups by implementing
  :py:meth:`~configmix.config.Configuration.getvarl` and
  :py:meth:`~configmix.config.Configuration.getvar_s` within the
  C-extension also.


0.20.1 (2022-01-10)
~~~~~~~~~~~~~~~~~~~

- **[misc]**
  Add an optional C-extension with some speedups to often used functions
  and methods. Also allow to cross-build this modules for Windows with
  LLVM-11 and Ninja on POSIX systems.

- **[misc]**
  Some internal code refactoring. This also yields more consistency in
  interpreting the `varname` string arguments.


0.20 (2021-12-21)
~~~~~~~~~~~~~~~~~

- **[breaking]**
  Removed some unused keyword arguments from methods -- also public ones:

  * :py:meth:`~configmix.config.Configuration.expand_ref_uri`
  * :py:meth:`~configmix.config.Configuration.expand_if_reference`
  * :py:meth:`~configmix.config.Configuration._lookupref`

- **[breaking]**
  Change methodname from `expand_variable()` to
  :py:meth:`configmix.config.Configuration.interpolate_variables`

- **[misc]**
  Improved overall performance by a factor of 0.25 to 0.3 using
  algorithmic changes.

- **[misc]**
  Improved performance by internal caching.

- **[bugfix]**
  Implement :py:meth:`~configmix.config.Configuration.values` and
  :py:meth:`~configmix.config.Configuration.items` that yield non-interpolated
  configuration values. This is needed now because attribute access now
  yields interpolated results.


0.19.2 (2021-12-16)
~~~~~~~~~~~~~~~~~~~

- **[feature]**
  Implement "__len__()"-support for jailed configurations.
  Their container-like interface is now fairly complete.


0.19.1 (2021-12-15)
~~~~~~~~~~~~~~~~~~~

- **[feature]**
  Jailed configuration support proper evaluation in boolean context
- **[feature]**
  Proper iteration support for jailed configurations
- **[bugfix]**
  Fixes for proper exception formatting in many cases
- **[bugfix]**
  Proper "yield" support for older Python versions
- **[test]**
  Test fixes and enhancements


0.19.1b1 (2021-12-14)
~~~~~~~~~~~~~~~~~~~~~

- **[feature]**
  Attribute-style access also for jailed configurations

- **[bugfix}**
  Make exception formatting robust when there is a single parameter for
  "%"-style formatting and the single parameter happend to be a tuple;
  now it is wrapped into a tuple.


0.19 (2021-12-10)
~~~~~~~~~~~~~~~~~

- **[breaking] [feature}**
  Access to a configuration key using dict-level access now does variable
  interpolation

- **[feature]**
  Simple dict-style access for jailed configuration

- **[feature]**
  Optimized "__contains__()" implementation for jailed and unjailed
  configurations


0.18.1 (2021-12-10)
~~~~~~~~~~~~~~~~~~~

- **[feature]**
  Proper "repr()" for jailed configurations


0.18.1b1 (2021-12-09)
~~~~~~~~~~~~~~~~~~~~~

- **[bugfix]**
  Jailed configurations assumed that their "default" marker object is
  identical to the "default" marker object in the unjailed base
  configuration.  This is not always true, especially if
  :py:meth:`~configmix.config._JailedConfiguration.rebind` is used.


0.18 (2021-12-02)
~~~~~~~~~~~~~~~~~

- **[feature]**
  Allow empty variable names in some cases to get the root object of a
  configuration.
- **[feature]**
  Allow to get sub-jails from an already jailed configuration.
- **[feature]**
  Implement :meth:`~configmix.config.Configuration.getkeysl` and
  :meth:`~configmix.config.Configuration.getkeys` that return generators
  over all keys of a configuration value.


0.17 (2021-11-22)
~~~~~~~~~~~~~~~~~

- **[feature]**
  Complete the set of configuration retrieval methods for the jailed
  configuration.


0.17b2 (2021-11-19)
~~~~~~~~~~~~~~~~~~~

- **[feature]** All configuration objects carry a flag `is_jail` that
  allows to determine whether a configuration is jailed
- **[feature]** Allow a jailed configuration to be rebound to another
  unjailed configuration
- **[feature}** A public accessor property to the base configuration
  of a jailed configuration


0.17b1 (2021-11-19)
~~~~~~~~~~~~~~~~~~~

- **[feature]** Jailed (aka "restricted" or "rooted") configurations
  with :py:meth:`~configmix.config.Configuration.jailed`


0.16.1 (2021-11-10)
~~~~~~~~~~~~~~~~~~~

- **[feature]** New access methods
  :py:meth:`~configmix.config.Configuration.getfirstvarl`,
  :py:meth:`~configmix.config.Configuration.getfirstvarl_s`,
  :py:meth:`~configmix.config.Configuration.getfirstintvarl_s`
  :py:meth:`~configmix.config.Configuration.getfirstboolvarl_s`,
  :py:meth:`~configmix.config.Configuration.getfirstfloatvarl_s`

- **[feature]** New access method
  :py:meth:`~configmix.config.Configuration.getfirstfloatvar_s`


0.16 (2021-07-11)
~~~~~~~~~~~~~~~~~

- **[feature]** New access methods
  :py:meth:`~configmix.config.Configuration.getfirstvar`,
  :py:meth:`~configmix.config.Configuration.getfirstvar_s`,
  :py:meth:`~configmix.config.Configuration.getfirstintvar_s` and
  :py:meth:`~configmix.config.Configuration.getfirstboolvar_s`


0.15.1 (2021-07-09)
~~~~~~~~~~~~~~~~~~~

- **[bugfix]** Handle the `default` keyword parameter in
  :py:meth:`configmix.config.Configuration.getvar` properly.


0.15 (2021-06-25)
~~~~~~~~~~~~~~~~~

- **[feature]**
  New filter function :py:func:`urlquote_plus`

- **[feature]**
  New filter functions :py:func:`None` and :py:func:`Empty`. They are
  useful in variable interpolation context where they suppress
  possible lookup errors (aka :py:exc:`KeyError`) and instead return
  with :py:obj:`None` or an empty string.


0.14 (2021-05-10)
~~~~~~~~~~~~~~~~~

- **[breaking] [feature]**
  Allowed quoting of variable and namespace names.

  This is mostly important for variable names that contain ``.``,
  ``:`` or ``|`` but probably useful for characters like ``"` ``'``
  and ``#`` also.

- **[breaking] [misc]**
  Moved some important public constants from :py:mod:`configmix` into
  the :py:mod:`configmix.constants` module.

- **[feature]**
  Configuration tree references are implemented in the ``ref``
  namespace

- **[feature]**
  Implemented new access methods
  :py:meth:`configmix.config.Configuration.getvarl` and
  :py:meth:`configmix.config.Configuration.getvarl_s`


0.13 (2021-04-21)
~~~~~~~~~~~~~~~~~

- **[feature]**
  All YAML load functions got a new optional keyword `strict` to
  detect and prevent duplicate keys within a single YAML document.

  The top-level load function also understands this flag and provides
  it to low-level-loaders that understand it.


0.12 (2020-12-07)
~~~~~~~~~~~~~~~~~

- **[feature]**
  Provide an ``AWS`` namespace to retrieve some AWS instance metadata.


0.11 (2020-10-05)
~~~~~~~~~~~~~~~~~

- **[feature]**
  Allow the deletion of key-value pairs while merging configurations.

  This is done by recognizing and handling the special configuration
  value ``{{::DEL::}}``.


0.10 (2020-09-10)
~~~~~~~~~~~~~~~~~

- **[feature]**
  Allow loading configuration files from directories when using the
  "<dir>" prefix in filenames.

  Unknown filetypes within these directories are ignored
  automatically.

- **[feature]**
  Implemented a function to delete an association:
  :py:func:`configmix.del_assoc`.


0.9 (2020-07-28)
~~~~~~~~~~~~~~~~

- **[breaking] [feature]**
  Do not set "root", "self" and "here" variables any more. The old
  behaviour hindered proper automatic configuration on some PyPy
  configurations when using `genapplib`.

  Only the INI-parser did set this variables automatically.


0.8.1 (2020-07-08)
~~~~~~~~~~~~~~~~~~

- **[bugfix]**
  Allow non-string keys when merging configurations.


0.8 (2020-07-08)
~~~~~~~~~~~~~~~~

- **[breaking] [feature]**
  Do not implicitely convert a configuration value to text if the
  value is the result of just a variable expansion.


0.7.4 (2020-05-21)
~~~~~~~~~~~~~~~~~~

- **[feature]**
  Implemented new namespace function ``OS:node`` to return the node's
  computername.

- **[bugfix]**
  The ``OS`` namespace lookup did not handle non-existing variables
  properly and ignored the `default` parameter.


0.7.3 (2020-05-13)
~~~~~~~~~~~~~~~~~~

- No code changes.


0.7.2 (2019-05-13)
~~~~~~~~~~~~~~~~~~

- **[feature]**
  Implemented a loader with key ``-*-ignore-*-`` effectively ignores
  the contents of given file. No file extensions are by default
  associated with this loader.


0.7.1 (2019-05-10)
~~~~~~~~~~~~~~~~~~

- **[feature]**
  :py:func:`configmix.load` and :py:func:`configmix.safe_load` got a
  new keyword argument `extras` that (if given) will be used as the
  *last* configuration dictionary to be merged into the configuration.

  This can be used to overwrite configuration file settings from
  commandline arguments.

- **[bugfix]**
  :py:func:`configmix.safe_load` did some preliminary unsafe merges
  from `defaults` and an extra additional unneeded merge.


0.7 (2019-05-06)
~~~~~~~~~~~~~~~~

- **[breaking]**
  Additional or alternative loaders can be installed by changing the
  :py:data:`configmix.mode_loaders` dictionary directly.

- **[breaking]**
  The public functions to associate filename extensions to filemodes
  have been renamed to :py:func:`configmix.set_assoc`,
  :py:func:`configmix.get_assoc`, :py:func:`configmix.clear_assoc`,
  :py:func:`configmix.get_default_assoc`.

  The filemodes must be keys in the :py:data:`configmix.mode_loaders`
  dictionary.

- **[breaking] [feature]**
  The associations from filename extensions to parsers are
  :py:mod:`fnmatch` style patterns now.

  Calling :py:func:`configmix.set_assoc` by default prepends to the
  currently defined associations and therefore gets the highest
  priority. Appending is possible also.

- **[feature]**
  :py:func:`configmix.load` and :py:func:`configmix.safe_load` got a
  keyword argument `defaults` that allow the provision of an already
  existing default configuration into which all additional
  configuration settings are merged into.

- **[feature]**
  Added support for TOML style configuration files. This needs the
  external package :py:mod:`toml` (from https://github.com/uiri/toml).


0.6 (2019-03-14)
~~~~~~~~~~~~~~~~

- **[breaking] [feature]**
  Reimplemented :py:func:`configmix.safe_merge` to do a deepcopy of
  all source configurations when merging. Previously is was sort of a
  shallow copy.

- **[breaking] [feature]**
  The default file encoding when reading INI style files with
  :py:func:`configmix.ini.load` is now "UTF-8". Previously it was
  undefined and therefore dependent on the user's locale.

  An `encoding` keyword argument can be specified explicitely now.

- **[breaking] [feature]**
  Support comment-like key-value pairs with configuration keys
  starting with ``__doc`` or ``__comment``.

- **[misc]**
  Use the filesystem encoding where appripriate.

- **[doc]**
  Begin the documentation with `Sphinx <http://www.sphinx-doc.org>`_

- **[test]**
  Begin formal unittests

- **[feature]**
  Build a tree of configuration settings from INI files

- **[feature]**
  Support JSON formatted files as configuration files also (suffix
  ".json").

- **[feature]**
  Allow custom configuration filename extensions and custom loaders
  that can handle custom configuration file syntax styles.


0.5 (2016-04-19)
~~~~~~~~~~~~~~~~

- **[feature]]**
  First really used release.