Please see the fragment files in the changelog.d directory.
- Support Python 3.11 and 3.12.
- Drop support for Python 3.7.
- 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.
- Support malformed XML documents by using lxml's HTML parsers.
- Fix the feed URL to the blog entries about listparser.
- Add the OPML 1.0 and OPML 2.0 specifications to the listparser documentation for posterity.
- 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.
"Spring cleaning"
- 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.
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.
- Fix some coverage messages that were output during testing.
- Fix the combined coverage HTML report's paths.
- 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 nowTrue
orFalse
, not1
or0
.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 thetests/
subdirectory and into specifictest_*
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 ofSuperDict
attribute-based lookups. - Cache XML parsing method lookup results to avoid excessive string formatting.
- Change the name of the
ListError
toListparserError
. - 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.
- Replace the regex RFC 822 date parser with procedural code.
"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
"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.
"A special day"
- IronPython 2.6.2 is now supported!
"A good year"
- Added support for LiveJournal FOAF files.
- Improved the documentation.
- Improved the code quality.
"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.
"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.
"Floodgates"
- Jython 2.5.1 is now supported!
- Added support for opening relative and absolute filenames.
"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.
"Celery wolves"
- Support RDF+FOAF!
- Capture opportunity URLs.
- Added duplicate URL detection.
- Added distutils support for easier distribution.
"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.
"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.
"Hatchet Hotel"
- Certain return result elements are now guaranteed.
bozo_detail
has been renamedbozo_exception
.- Better support for Wordpress' wp-links-opml.php output.
- Added 22 new tests (and modified several others).
"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.
"07/18,29"
- Support categories and tags specified in
@category
. - Support categorization using nested
<outline>
tags. - Added 21 more tests.
"...and Recursion for all."
- The feed key
name
is nowtitle
. - Additional optional attributes supported.
- Support subscription list inclusions.
- Added 13 more tests.
"Leveling up"
- RFC 822 date and time support added (+39 tests).
- Added more thorough OPML version attribute detection (+5 tests).
dateModified
anddateCreated
OPML tags supported (+4 tests).- Added test cases for existing functionality (+2 tests).
<outline>
htmlUrl
attribute support added (+1 test).
"Achievement unlocked"
- Initial release.