..
    This is the listparser changelog.

    It is managed and updated by scriv during development.
    Please do not edit this file directly. Instead, run
    "scriv create" to create a new changelog fragment file.


Changelog
*********


Unreleased changes
==================

Please see the fragment files in the `changelog.d directory`_.

..  _changelog.d directory: https://github.com/kurtmckee/listparser/tree/main/changelog.d


..  scriv-insert-here

.. _changelog-0.20:

0.20 - 2024-03-29
=================

Python support
--------------

*   Support Python 3.11 and 3.12.
*   Drop support for Python 3.7.

Added
-----

*   Add a ``py.typed`` file so mypy can lint listparser use in dependent applications.
*   Support lxml v5.0.0 while maintaining support for v4.6.2.

Changed
-------

*   Support malformed XML documents by using lxml's HTML parsers.

Fixed
-----

*   Fix the feed URL to the blog entries about listparser.

Documentation
-------------

*   Add the OPML 1.0 and OPML 2.0 specifications to the listparser documentation for posterity.

Development
-----------

*   Randomize the order of listparser's unit tests on each run
    to help ensure there are no testing interdependencies.
*   Add black, flake8, and isort as pre-commit hooks.
*   Add mypy as a tox test environment.
*   Add pyupgrade as a pre-commit hook and enforce Python 3.8+ syntax.
*   Python warnings encountered during testing are now escalated to errors.
*   Move tool dependencies into separate ``requirements.txt`` files.
*   Add a tox label, ``update``, so it's easy to update tool dependencies.

.. _changelog-0.19:

0.19 - 2022-06-04
=================

*"Spring cleaning"*

Added
-----

*   Add ``requests`` as an optional dependency.
*   Add ``lxml`` as an optional dependency.
    This is currently the only way to parse malformed XML files.
*   Add support for Python 3.7 through Python 3.10.

Removed
-------

*   Drop support for CPython 3.6 and lower.
*   Drop support for IronPython.
*   Drop support for Jython.
*   Remove some ancient Jython compatibility code.
*   HTML entities are no longer automatically injected into the DTD.

    If ``lxml`` is installed and undeclared HTML entities are encountered,
    they will be ignored.

    If lxml is not installed and undeclared HTML entities are encountered,
    Python's ``xml.sax`` parser will fail to parse the document.

Fixed
-----

*   Fix some coverage messages that were output during testing.
*   Fix the combined coverage HTML report's paths.

Changed
-------

*   Migrate to a ``src/``-based directory structure.
*   Migrate to Read the Docs for documentation hosting.
*   ``parse()`` no longer accepts *etag*, *modified*, or *agent* arguments.
*   HTTP response information is no longer available in the return dictionary.
*   The unit tests no longer launch an HTTP server.
*   Coverage data is now erased before the unit tests begin.
*   ``bozo`` is now ``True`` or ``False``, not ``1`` or ``0``.
*   ``bozo_exception`` is guaranteed to exist in the return dict.
*   The RFC 822 parser now returns timezone-aware ``datetime`` objects
    instead of converting to UTC and losing timezone info.
*   Move and split ``lptest.py`` into the ``tests/`` subdirectory
    and into specific ``test_*`` files.
*   Increased test coverage reporting to include test runners.
*   Decreased the number of ``tox`` environments where listparser must be built and installed.
*   Internally rely on ``dict`` key-based lookups instead of ``SuperDict`` attribute-based lookups.
*   Cache XML parsing method lookup results to avoid excessive string formatting.
*   Change the name of the ``ListError`` to ``ListparserError``.
*   Split the codebase into multiple files.
*   Use ``tox`` to automate testing across multiple interpreters and versions.
*   Migrate to ``pytest`` for unit testing.
*   Remove dependence on the ``six`` package.
*   Add type annotations.
*   Remove compatibility code.
*   Migrate to Poetry and ``pyproject.toml`` for project configuration.
*   Change the license from LGPLv3 to MIT.
*   Use scriv to manage the CHANGELOG.


0.18 - 2015-04-21
=================

*   Replace the regex RFC 822 date parser with procedural code.


0.17 - 2012-12-16
=================

*"Territory expansion"*

*   Python 3.3 is now tested and supported!
*   PyPy is now tested and supported!
*   Jython 2.5.2 and 2.5.3 are now tested and supported!
*   Python 2 and 3 are now supported without 2to3 conversion
*   Remove the hack to work around Jython bug 1375.
    (This means that Jython 2.5.1 is no longer supported.)
*   Support single-digit days in RFC822 dates


0.16 - 2011-12-17
=================

*"Refresh"*

*   Python 3.2 is now supported!
*   Made setup.py auto-convert listparser using 2to3 if necessary.
*   Switched to absolute URLs in the HTTP redirect tests.


0.15 - 2010-11-15
=================

*"A special day"*

*   IronPython 2.6.2 is now supported!


0.14 - 2010-10-22
=================

*"A good year"*

*   Added support for LiveJournal FOAF files.
*   Improved the documentation.
*   Improved the code quality.


0.13 - 2010-02-01
=================

*"Revelations"*

*   Fixed an infinite loop bug in Injector.
*   Fixed a threading-related bug in the unit tests.
*   Made Injector inject after the first '>', not '\n'.
*   Overhauled and modularized the unit test code.
*   Increased the code coverage of the unit tests.


0.12 - 2010-01-03
=================

*"Safety net"*

*   Fixed global USER_AGENT behavior.
*   Fixed several crasher bugs.
*   Fixed a 2to3 tool warning in lptest.py.
*   Made lptest.py return a status code to the shell.


0.11 - 2009-12-25
=================

*"Floodgates"*

*   Jython 2.5.1 is now supported!
*   Added support for opening relative and absolute filenames.


0.10 - 2009-12-12
=================

*"Internet-ready"*

*   Python 3 is now supported!
*   Correctly interpret undeclared HTML character entities.
*   Significantly sped up large RDF+FOAF document parsing.
*   Fixed RFC 822 date and time creation bug.
*   Fixed RFC 822 crasher bugs.
*   Fixed iGoogle-related crasher bug.
*   Refreshed and added to documentation.
*   Added many more tests.


0.9 - 2009-10-03
================

*"Celery wolves"*

*   Support RDF+FOAF!
*   Capture opportunity URLs.
*   Added duplicate URL detection.
*   Added distutils support for easier distribution.


0.8 - 2009-09-03
================

*"Three day weekend"*

*   Support the iGoogle exported settings format!
*   Support Liferea's version of subscription lists in OPML.
*   Removed ``feeds[i].claims``.
*   Removed almost all of listparser's bozo warnings.


0.7 - 2009-08-28
================

*"The Codex"*

*   Added documentation!
*   Unified feed and subscription list code.
*   Extended category and tag support to subscription lists.
*   Result dictionary keys are now also attributes (i.e. ``result['meta']['title']`` -> ``result.meta.title``).
*   Feed and list titles are no longer filled with the associated URL if the title is not found.


0.6 - 2009-08-07
================

*"Hatchet Hotel"*

*   Certain return result elements are now guaranteed.
*   ``bozo_detail`` has been renamed ``bozo_exception``.
*   Better support for Wordpress' wp-links-opml.php output.
*   Added 22 new tests (and modified several others).


0.5 - 2009-08-01
================

*"Going green"*

*   Send a (configurable) User-Agent header.
*   Support HTTP ETag and Last-Modified headers.
*   Support HTTP redirects and errors.
*   Support parsing of strings and file-like objects (not just URLs).
*   The subscription list title is now stripped of whitespace.
*   Added 11 more tests.


0.4 - 2009-07-18
================

*"07/18,29"*

*   Support categories and tags specified in ``@category``.
*   Support categorization using nested ``<outline>`` tags.
*   Added 21 more tests.


0.3 - 2009-07-03
================

*"...and Recursion for all."*

*   The feed key ``name`` is now ``title``.
*   Additional optional attributes supported.
*   Support subscription list inclusions.
*   Added 13 more tests.


0.2 - 2009-06-26
================

*"Leveling up"*

*   RFC 822 date and time support added (+39 tests).
*   Added more thorough OPML version attribute detection (+5 tests).
*   ``dateModified`` and ``dateCreated`` OPML tags supported (+4 tests).
*   Added test cases for existing functionality (+2 tests).
*   ``<outline>`` ``htmlUrl`` attribute support added (+1 test).


0.1 - 2009-06-19
================

*"Achievement unlocked"*

*   Initial release.
