# Changelog

## 2.3.1

- Fixed
  - Backport: Limit number of parts of a TOML key to address quadratic time complexity

## 2.4.1

- Fixed
  - Limit number of parts of a TOML key to address quadratic time complexity

## 2.4.0

- Added
  - TOML v1.1.0 compatibility
  - Binary wheels for Windows arm64

## 2.3.0

- Added
  - Binary wheels for Python 3.14 (also free-threaded)
- Performance
  - Reduced import time

## 2.2.1

- Fixed
  - Don't attempt to compile binary wheels for Python 3.8, 3.9 and 3.10 where cibuildwheel depends on a conflicting Tomli version

## 2.2.0

- Added
  - mypyc generated binary wheels for common platforms

## 2.1.0

- Deprecated
  - Instantiating `TOMLDecodeError` with free-form arguments.
    `msg`, `doc` and `pos` arguments should be given.
- Added
  - `msg`, `doc`, `pos`, `lineno` and `colno` attributes to `TOMLDecodeError`

## 2.0.2

- Removed
  - Python 3.7 support
- Improved
  - Make `loads` raise `TypeError` not `AttributeError` on bad input types that do not have the `replace` attribute.
    Improve error message when `bytes` is received.
- Type annotations
  - Type annotate `load` input as `typing.IO[bytes]` (previously `typing.BinaryIO`).

## 2.0.1

- Improved
  - Make bundling easier by using relative imports internally and adding license and copyright notice to source files.
  - Make error messages more uniform
  - Raise a friendly `TypeError` for wrong file mode
  - Allow `parse_float` to return objects having the `append` attr
  - Eagerly raise an error if `parse_float` returns an illegal type
- Packaging
  - Move from `pytest` testing framework to `unittest` and remove `python-dateutil` test dependency.
    Tests now only require Python interpreter.

## 1.2.3

- Fixed
  - Backport: Allow lower case "t" and "z" in datetimes

## 2.0.0

- Removed
  - Python 3.6 support
  - Support for text file objects as `load` input. Use binary file objects instead.
  - First argument of `load` and `loads` can no longer be passed by keyword.
- Fixed
  - Allow lower case "t" and "z" in datetimes
- Improved
  - Raise an error when dotted keys define values outside the "current table".
    Technically speaking TOML v1.0.0 does allow such assignments
    but that isn't intended by specification writers,
    and will change in a future specification version (see the [pull request](https://github.com/toml-lang/toml/pull/848)).

## 1.2.2

- Fixed
  - Illegal characters in error messages were surrounded by two pairs of quotation marks
- Improved
  - `TOMLDecodeError.__module__` is now the public import path (`tomli`) instead of private import path (`tomli._parser`)
  - Eliminated an import cycle when `typing.TYPE_CHECKING` is `True`.
    This allows `sphinx-autodoc-typehints` to resolve type annotations.

## 1.2.1

- Fixed
  - Raise an error if a carriage return (without a following line feed) is found in a multi-line basic string
- Type annotations
  - Type annotate `load` input as `typing.BinaryIO` only to discourage use of deprecated text file objects.
- Packaging
  - Remove legacy `setup.py` from PyPI source distribution.
    If you're a packager and absolutely need this file, please create an issue.

## 1.2.0

- Deprecated
  - Text file objects as input to `load`.
    Binary file objects should be used instead to avoid opening a TOML file with universal newlines or with an encoding other than UTF-8.

## 1.1.0

- Added
  - `load` can now take a binary file object

## 1.0.4

- Performance
  - Minor boost (~4%)

## 1.0.3

- Fixed
  - Raise `TOMLDecodeError` instead of `ValueError` when parsing dates and datetimes that pass the regex check but don't correspond to a valid date or datetime.
- Performance
  - Improved multiline literal string parsing performance

## 1.0.2

- Performance
  - Minor boost (~4%)

## 1.0.1

- Performance
  - A significant boost

## 1.0.0

- Fixed
  - Raise `TOMLDecodeError` instead of `KeyError` when overwriting implicitly in an inline table

## 0.2.10

- Fixed
  - Raise `TOMLDecodeError` if overwriting nested inline tables from the parent inline
  - Raise `TOMLDecodeError` if escaped Unicode character is not a Unicode scalar value
- Performance
  - Increased parsing speed of single line basic strings, and multi-line literal and basic strings

## 0.2.9

- Fixed
  - `TOMLDecodeError` now raised when opening a table implicitly created by a key/value pair
  - Don't error when two array-of-tables items open a subtable with the same name
  - Don't error when opening parent table of an already defined array-of-tables item

## 0.2.8

- Performance
  - Significant boost to comment parsing speed

## 0.2.7

- Added
  - Improved `TOMLDecodeError` error messages.
    Line and column are included when applicable.

## 0.2.6

- Performance
  - Over 5% boost

## 0.2.5

- Fixed
  - Made exception type `TOMLDecodeError` when overwriting a value with a deeply nested table

## 0.2.4

- Fixed
  - `TOMLDecodeError` is now raised when attempting to overwrite a value in an inline table's or array's namespace with a table definition

## 0.2.3

- Fixed
  - Error type was not TOMLDecodeError in some obscure cases

## 0.2.2

- Added
  - `tomli.load` for parsing IO streams returned by `open()`
  - `parse_float` keyword argument to `tomli.loads`.
    Allows parsing TOML floats to a non-float type in Python.

## 0.2.1

- Fixed
  - `TOMLDecodeError` is now raised for duplicate keys in inline tables,
    as opposed to silently overriding the previous value

## 0.2.0

- Changed
  - Project name to Tomli
- Performance
  - A performance boost

## 0.1.0

- Added
  - `tomli.loads` for parsing TOML strings
  - `tomli.TOMLDecodeError` that is raised for parse errors
