From fd26ca4548cb0716db44fbd46c1f0a02926349d3 Mon Sep 17 00:00:00 2001
From: zariiii9003 <52598363+zariiii9003@users.noreply.github.com>
Date: Sat, 2 Aug 2025 12:31:54 +0200
Subject: [PATCH 1/4] add towncrier configuration
---
CHANGELOG.md | 281 +++++++++++++++----------------------
doc/changelog.d/.gitignore | 11 ++
doc/development.rst | 65 +++++++--
pyproject.toml | 40 +++++-
4 files changed, 220 insertions(+), 177 deletions(-)
create mode 100644 doc/changelog.d/.gitignore
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 39cbaa716..a8ec28f12 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,17 @@
-Version 4.5.0
-=============
+# Changelog
-Features
---------
+
+
+
+
+
+## Version 4.5.0
+
+### Features
* gs_usb command-line support (and documentation updates and stability fixes) by @BenGardiner in https://github.com/hardbyte/python-can/pull/1790
* Faster and more general MF4 support by @cssedev in https://github.com/hardbyte/python-can/pull/1892
@@ -13,8 +22,7 @@ Features
* Improve TestBusConfig by @zariiii9003 in https://github.com/hardbyte/python-can/pull/1804
* Improve speed of TRCReader by @lebuni in https://github.com/hardbyte/python-can/pull/1893
-Bug Fixes
----------
+### Bug Fixes
* Fix Kvaser timestamp by @zariiii9003 in https://github.com/hardbyte/python-can/pull/1878
* Set end_time in ThreadBasedCyclicSendTask.start() by @zariiii9003 in https://github.com/hardbyte/python-can/pull/1871
@@ -25,8 +33,7 @@ Bug Fixes
* Resolve AttributeError within NicanError by @vijaysubbiah20 in https://github.com/hardbyte/python-can/pull/1806
-Miscellaneous
--------------
+### Miscellaneous
* Fix CI by @zariiii9003 in https://github.com/hardbyte/python-can/pull/1889
* Update msgpack dependency by @zariiii9003 in https://github.com/hardbyte/python-can/pull/1875
@@ -43,11 +50,10 @@ Miscellaneous
* Add zlgcan to docs by @zariiii9003 in https://github.com/hardbyte/python-can/pull/1839
-Version 4.4.2
-=============
+## Version 4.4.2
+
+### Bug Fixes
-Bug Fixes
----------
* Remove `abstractmethod` decorator from `Listener.stop()` (#1770, #1795)
* Fix `SizedRotatingLogger` file suffix bug (#1792, #1793)
* gs_usb: Use `BitTiming` class internally to configure bitrate (#1747, #1748)
@@ -56,8 +62,7 @@ Bug Fixes
* socketcan: Do not log exception on non-linux platforms (#1800)
* vector, kvaser: Activate channels after CAN filters were applied (#1413, #1708, #1796)
-Features
---------
+### Features
* kvaser: Add support for non-ISO CAN FD (#1752)
* neovi: Return timestamps relative to epoch (#1789)
@@ -66,11 +71,9 @@ Features
* vector: Add support for `listen_only` mode (#1764)
-Version 4.4.0
-=============
+## Version 4.4.0
-Features
---------
+### Features
* TRC 1.3 Support: Added support for .trc log files as generated by PCAN Explorer v5 and other tools, expanding compatibility with common log file formats (#1753).
* ASCReader refactor: improved the ASCReader code (#1717).
@@ -80,17 +83,14 @@ Features
* CAN FD Bus Connection for VectorBus: Enabled connecting to CAN FD buses without specifying bus timings, simplifying the connection process for users (#1716).
* Neousys Configs Detection: Updated the detection mechanism for available Neousys configurations, ensuring more accurate and comprehensive configuration discovery (#1744).
-
-Bug Fixes
----------
+### Bug Fixes
* Send Periodic Messages: Fixed an issue where fixed-duration periodic messages were sent one extra time beyond their intended count (#1713).
* Vector Interface on Windows 11: Addressed compatibility issues with the Vector interface on Windows 11, ensuring stable operation across the latest OS version (#1731).
* ASCWriter Millisecond Handling: Corrected the handling of milliseconds in ASCWriter, ensuring accurate time representation in log files (#1734).
* Various minor bug fixes: Addressed several minor bugs to improve overall stability and performance.
-Miscellaneous
--------------
+### Miscellaneous
* Invert default value logic for BusABC._is_shutdown. (#1774)
* Implemented various logging enhancements to provide more detailed and useful operational insights (#1703).
@@ -100,29 +100,27 @@ Miscellaneous
The release also includes various other minor enhancements and bug fixes aimed at improving the reliability and performance of the software.
-Version 4.3.1
-=============
+## Version 4.3.1
+
+### Bug Fixes
-Bug Fixes
----------
* Fix socketcand erroneously discarding frames (#1700)
* Fix initialization order in EtasBus (#1693, #1704)
-Documentation
--------------
+### Documentation
+
* Fix install instructions for neovi (#1694, #1697)
-Version 4.3.0
-=============
+## Version 4.3.0
+
+### Breaking Changes
-Breaking Changes
-----------------
* Raise Minimum Python Version to 3.8 (#1597)
* Do not stop notifier if exception was handled (#1645)
-Bug Fixes
----------
+### Bug Fixes
+
* Vector: channel detection fails, if there is an active flexray channel (#1634)
* ixxat: Fix exception in 'state' property on bus coupling errors (#1647)
* NeoVi: Fixed serial number range (#1650)
@@ -133,20 +131,22 @@ Bug Fixes
* Vector: Skip the `can_op_mode check` if the device reports `can_op_mode=0` (#1678)
* Vector: using the config from `detect_available_configs` might raise XL_ERR_INVALID_CHANNEL_MASK error (#1681)
-Features
---------
+### Features
+
+#### API
-### API
* Add `modifier_callback` parameter to `BusABC.send_periodic` for auto-modifying cyclic tasks (#703)
* Add `protocol` property to BusABC to determine active CAN Protocol (#1532)
* Change Bus constructor implementation and typing (#1557)
* Add optional `strict` parameter to relax BitTiming & BitTimingFd Validation (#1618)
* Add `BitTiming.iterate_from_sample_point` static methods (#1671)
-### IO
+#### IO
+
* Can Player compatibility with interfaces that use additional configuration (#1610)
-### Interface Improvements
+#### Interface Improvements
+
* Kvaser: Add BitTiming/BitTimingFd support to KvaserBus (#1510)
* Ixxat: Implement `detect_available_configs` for the Ixxat bus. (#1607)
* NeoVi: Enable send and receive on network ID above 255 (#1627)
@@ -156,7 +156,8 @@ Features
* Kvaser: add parameter exclusive and `override_exclusive` (#1660)
* socketcand: Add parameter `tcp_tune` to reduce latency (#1683)
-### Miscellaneous
+#### Miscellaneous
+
* Distinguish Text/Binary-IO for Reader/Writer classes. (#1585)
* Convert setup.py to pyproject.toml (#1592)
* activate ruff pycodestyle checks (#1602)
@@ -170,32 +171,29 @@ Features
* Add Python 3.12 Support / Test Python 3.12 (#1673)
-Version 4.2.2
-=============
+## Version 4.2.2
+
+### Bug Fixes
-Bug Fixes
----------
* Fix socketcan KeyError (#1598, #1599).
* Fix IXXAT not properly shutdown message (#1606).
* Fix Mf4Reader and TRCReader incompatibility with extra CLI args (#1610).
* Fix decoding error in Kvaser constructor for non-ASCII product name (#1613).
-Version 4.2.1
-=============
+## Version 4.2.1
+
+### Bug Fixes
-Bug Fixes
----------
* The ASCWriter now logs the correct channel for error frames (#1578, #1583).
* Fix PCAN library detection (#1579, #1580).
* On Windows, the first two periodic frames were sent without delay (#1590).
-Version 4.2.0
-=============
+## Version 4.2.0
+
+### Breaking Changes
-Breaking Changes
-----------------
* The ``can.BitTiming`` class was replaced with the new
``can.BitTiming`` and `can.BitTimingFd` classes (#1468, #1515).
Early adopters of ``can.BitTiming`` will need to update their code. Check the
@@ -210,17 +208,16 @@ Breaking Changes
There are open pull requests for kvaser (#1510), slcan (#1512) and usb2can (#1511). Testing
and reviewing of these open PRs would be most appreciated.
-Features
---------
+### Features
-### IO
+#### IO
* Add support for MF4 files (#1289).
* Add support for version 2 TRC files and other TRC file enhancements (#1530).
-### Type Annotations
+#### Type Annotations
* Export symbols to satisfy type checkers (#1547, #1551, #1558, #1568).
-### Interface Improvements
+#### Interface Improvements
* Add ``__del__`` method to ``can.BusABC`` to automatically release resources (#1489, #1564).
* pcan: Update PCAN Basic to 4.6.2.753 (#1481).
* pcan: Use select instead of polling on Linux (#1410).
@@ -232,21 +229,21 @@ Features
* vector: Only check sample point instead of tseg & sjw (#1486).
* vector: add VN5611 hwtype (#1501).
-Documentation
--------------
+### Documentation
+
* Add new section about related tools to documentation. Add a list of
plugin interface packages (#1457).
-Bug Fixes
----------
+### Bug Fixes
+
* Automatic type conversion for config values (#1498, #1499).
* pcan: Fix ``Bus.__new__`` for CAN-FD interfaces (#1458, #1460).
* pcan: Fix Detection of Library on Windows on ARM (#1463).
* socketcand: extended ID bug fixes (#1504, #1508).
* vector: improve robustness against unknown HardwareType values (#1500, #1502).
-Deprecations
-------------
+### Deprecations
+
* The ``bustype`` parameter of ``can.Bus`` is deprecated and will be
removed in version 5.0, use ``interface`` instead. (#1462).
* The ``context`` parameter of ``can.Bus`` is deprecated and will be
@@ -258,8 +255,8 @@ Deprecations
* The ``brs`` and ``log_errors`` parameters of `` NiXNETcanBus`` are deprecated
and will be removed in version 5.0. (#1520).
-Miscellaneous
--------------
+### Miscellaneous
+
* Use high resolution timer on Windows to improve
timing precision for BroadcastManager (#1449).
* Improve ThreadBasedCyclicSendTask timing (#1539).
@@ -271,11 +268,9 @@ Miscellaneous
* Add deprecation period to utility function ``deprecated_args_alias`` (#1477).
* Add `ruff` to the CI system (#1551)
-Version 4.1.0
-=============
+## Version 4.1.0
-Breaking Changes
-----------------
+### Breaking Changes
* ``windows-curses`` was moved to optional dependencies (#1395).
Use ``pip install python-can[viewer]`` if you are using the ``can.viewer``
@@ -284,11 +279,9 @@ Breaking Changes
from camelCase to snake_case (#1422).
-Features
---------
-
-### IO
+### Features
+#### IO
* The canutils logger preserves message direction (#1244)
and uses common interface names (e.g. can0) instead of just
channel numbers (#1271).
@@ -299,11 +292,11 @@ Features
and player initialisation (#1366).
* Initial support for TRC files (#1217)
-### Type Annotations
+#### Type Annotations
* python-can now includes the ``py.typed`` marker to support type checking
according to PEP 561 (#1344).
-### Interface Improvements
+#### Interface Improvements
* The gs_usb interface can be selected by device index instead
of USB bus/address. Loopback frames are now correctly marked
with the ``is_rx`` flag (#1270).
@@ -317,8 +310,7 @@ Features
be applied according to the arguments of ``VectorBus.__init__`` (#1426).
* Ixxat bus now implements BusState api and detects errors (#1141)
-Bug Fixes
----------
+### Bug Fixes
* Improve robustness of USB2CAN serial number detection (#1129).
* Fix channel2int conversion (#1268, #1269).
@@ -340,8 +332,7 @@ Bug Fixes
* Raise ValueError if gzip is used with incompatible log formats (#1429).
* Allow restarting of transmission tasks for socketcan (#1440)
-Miscellaneous
--------------
+### Miscellaneous
* Allow ICSApiError to be pickled and un-pickled (#1341)
* Sort interface names in CLI API to make documentation reproducible (#1342)
@@ -351,8 +342,7 @@ Miscellaneous
* Migrate code coverage reporting from Codecov to Coveralls (#1430)
* Migrate building docs and publishing releases to PyPi from Travis-CI to GitHub Actions (#1433)
-Version 4.0.0
-====
+## Version 4.0.0
TL;DR: This release includes a ton of improvements from 2.5 years of development! 🎉 Test thoroughly after switching.
@@ -366,8 +356,7 @@ Therefore, users are strongly advised to thoroughly test their programs against
Re-reading the documentation for your interfaces might be helpful too as limitations and capabilities might have changed or are more explicit.
While we did try to avoid breaking changes, in some cases it was not feasible and in particular, many implementation details have changed.
-Major features
---------------
+### Major features
* Type hints for the core library and some interfaces (#652 and many others)
* Support for Python 3.7-3.10+ only (dropped support for Python 2.* and 3.5-3.6) (#528 and many others)
@@ -375,8 +364,7 @@ Major features
* [Support for automatic configuration detection](https://python-can.readthedocs.io/en/develop/api.html#can.detect_available_configs) in most interfaces (#303, #640, #641, #811, #1077, #1085)
* Better alignment of interfaces and IO to common conventions and semantics
-New interfaces
---------------
+### New interfaces
* udp_multicast (#644)
* robotell (#731)
@@ -387,8 +375,7 @@ New interfaces
* socketcand (#1140)
* etas (#1144)
-Improved interfaces
--------------------
+### Improved interfaces
* socketcan
* Support for multiple Cyclic Messages in Tasks (#610)
@@ -465,8 +452,7 @@ Improved interfaces
* Fix transmitting onto a busy bus (#1114)
* Replace binary library with python driver (#726, #1127)
-Other API changes and improvements
-----------------------------------
+### Other API changes and improvements
* CAN FD frame support is pretty complete (#963)
* ASCWriter (#604) and ASCReader (#741)
@@ -497,8 +483,7 @@ Other API changes and improvements
* Add changed byte highlighting to viewer.py (#1159)
* Change DLC to DL in Message.\_\_str\_\_() (#1212)
-Other Bugfixes
---------------
+### Other Bugfixes
* BLF PDU padding (#459)
* stop_all_periodic_tasks skipping every other task (#634, #637, #645)
@@ -524,8 +509,7 @@ Other Bugfixes
* Some smaller bugfixes are not listed here since the problems were never part of a proper release
* ASCReader & ASCWriter using DLC as data length (#1245, #1246)
-Behind the scenes & Quality assurance
--------------------------------------
+### Behind the scenes & Quality assurance
* We publish both source distributions (`sdist`) and binary wheels (`bdist_wheel`) (#1059, #1071)
* Many interfaces were partly rewritten to modernize the code or to better handle errors
@@ -543,16 +527,13 @@ Behind the scenes & Quality assurance
* [Good test coverage](https://app.codecov.io/gh/hardbyte/python-can/branch/develop) for all but the interfaces
* Testing: Many of the new features directly added tests, and coverage of existing code was improved too (for example: #1031, #581, #585, #586, #942, #1196, #1198)
-Version 3.3.4
-====
+## Version 3.3.4
Last call for Python2 support.
* #850 Fix socket.error is a deprecated alias of OSError used on Python versions lower than 3.3.
-Version 3.3.3
-====
-
+## Version 3.3.3
Backported fixes from 4.x development branch which targets Python 3.
* #798 Backport caching msg.data value in neovi interface.
@@ -570,37 +551,30 @@ Backported fixes from 4.x development branch which targets Python 3.
* #605 Socketcan BCM status fix.
-Version 3.3.2
-====
+## Version 3.3.2
Minor bug fix release addressing issue in PCAN RTR.
-Version 3.3.1
-====
+## Version 3.3.1
Minor fix to setup.py to only require pytest-runner when necessary.
-Version 3.3.0
-====
+## Version 3.3.0
* Adding CAN FD 64 frame support to blf reader
* Updates to installation instructions
* Clean up bits generator in PCAN interface #588
* Minor fix to use latest tools when building wheels on travis.
-Version 3.2.1
-====
+## Version 3.2.1
* CAN FD 64 frame support to blf reader
* Minor fix to use latest tools when building wheels on travis.
* Updates links in documentation.
-Version 3.2.0
-====
+## Version 3.2.0
-
-Major features
---------------
+### Major features
* FD support added for Pcan by @bmeisels with input from
@markuspi, @christiansandberg & @felixdivo in PR #537
@@ -608,8 +582,7 @@ Major features
and Python 3.5. Support has been removed for Python 3.4 in this
release in PR #532
-Other notable changes
----------------------
+### Other notable changes
* #533 BusState is now an enum.
* #535 This release should automatically be published to PyPi by travis.
@@ -624,26 +597,21 @@ https://github.com/hardbyte/python-can/milestone/7?closed=1
Pulls: #522, #526, #527, #536, #540, #546, #547, #548, #533, #559, #569, #571, #572, #575
-Backend Specific Changes
-------------------------
+### Backend Specific Changes
-pcan
-~~~~
+#### pcan
* FD
-slcan
-~~~~
+#### slcan
* ability to set custom can speed instead of using predefined speed values. #553
-socketcan
-~~~~
+#### socketcan
* Bug fix to properly support 32bit systems. #573
-usb2can
-~~~~
+#### usb2can
* slightly better error handling
* multiple serial devices can be found
@@ -651,25 +619,20 @@ usb2can
Pulls #511, #535
-vector
-~~~~
+#### vector
* handle `app_name`. #525
-Version 3.1.1
-====
+## Version 3.1.1
-Major features
---------------
+### Major features
Two new interfaces this release:
- SYSTEC contributed by @idaniel86 in PR #466
- CANalyst-II contributed by @smeng9 in PR #476
-
-Other notable changes
----------------------
+### Other notable changes
* #477 The kvaser interface now supports bus statistics via a custom bus method.
* #434 neovi now supports receiving own messages
@@ -686,18 +649,15 @@ Other notable changes
* #455 Fix to `Message` initializer
* Small bugfixes and improvements
-Version 3.1.0
-====
+## Version 3.1.0
Version 3.1.0 was built with old wheel and/or setuptools
packages and was replaced with v3.1.1 after an installation
but was discovered.
-Version 3.0.0
-====
+## Version 3.0.0
-Major features
---------------
+### Major features
* Adds support for developing `asyncio` applications with `python-can` more easily. This can be useful
when implementing protocols that handles simultaneous connections to many nodes since you can write
@@ -710,8 +670,7 @@ Major features
by calling the bus's new `stop_all_periodic_tasks` method. #412
-Breaking changes
-----------------
+### Breaking changes
* Interfaces should no longer override `send_periodic` and instead implement
`_send_periodic_internal` to allow the Bus base class to manage tasks. #426
@@ -721,8 +680,7 @@ Breaking changes
read/writer constructors from `filename` to `file`.
-Other notable changes
----------------------
+### Other notable changes
* can.Message class updated #413
- Addition of a `Message.equals` method.
@@ -754,59 +712,48 @@ Other notable changes
General fixes, cleanup and docs changes: (#347, #348, #367, #368, #370, #371, #373, #420, #417, #419, #432)
-Backend Specific Changes
-------------------------
+### Backend Specific Changes
-3rd party interfaces
-~~~~~~~~~~~~~~~~~~~~
+#### 3rd party interfaces
* Deprecated `python_can.interface` entry point instead use `can.interface`. #389
-neovi
-~~~~~
+#### neovi
* Added support for CAN-FD #408
* Fix issues checking if bus is open. #381
* Adding multiple channels support. #415
-nican
-~~~~~
+#### nican
* implements reset instead of custom `flush_tx_buffer`. #364
-pcan
-~~~~
+#### pcan
* now supported on OSX. #365
-
-serial
-~~~~~~
+#### serial
* Removed TextIOWrapper from serial. #383
* switch to `serial_for_url` enabling using remote ports via `loop://`, ``socket://` and `rfc2217://` URLs. #393
* hardware handshake using `rtscts` kwarg #402
-socketcan
-~~~~~~~~~
+#### socketcan
* socketcan tasks now reuse a bcm socket #404, #425, #426,
* socketcan bugfix to receive error frames #384
-vector
-~~~~~~
+#### vector
* Vector interface now implements `_detect_available_configs`. #362
* Added support to select device by serial number. #387
-Version 2.2.1 (2018-07-12)
-=====
+## Version 2.2.1 (2018-07-12)
* Fix errors and warnings when importing library on Windows
* Fix Vector backend raising ValueError when hardware is not connected
-Version 2.2.0 (2018-06-30)
-=====
+## Version 2.2.0 (2018-06-30)
* Fallback message filtering implemented in Python for interfaces that don't offer better accelerated mechanism.
* SocketCAN interfaces have been merged (Now use `socketcan` instead of either `socketcan_native` and `socketcan_ctypes`),
@@ -817,8 +764,7 @@ Version 2.2.0 (2018-06-30)
* Dropped support for Python 3.3 (officially reached end-of-life in Sept. 2017)
* Deprecated the old `CAN` module, please use the newer `can` entry point (will be removed in an upcoming major version)
-Version 2.1.0 (2018-02-17)
-=====
+## Version 2.1.0 (2018-02-17)
* Support for out of tree can interfaces with pluggy.
* Initial support for CAN-FD for socketcan_native and kvaser interfaces.
@@ -830,8 +776,7 @@ Version 2.1.0 (2018-02-17)
* Other misc improvements and bug fixes
-Version 2.0.0 (2018-01-05
-=====
+## Version 2.0.0 (2018-01-05)
After an extended baking period we have finally tagged version 2.0.0!
diff --git a/doc/changelog.d/.gitignore b/doc/changelog.d/.gitignore
new file mode 100644
index 000000000..b56b00acb
--- /dev/null
+++ b/doc/changelog.d/.gitignore
@@ -0,0 +1,11 @@
+# Ignore everything...
+*
+!.gitignore
+
+# ...except markdown news fragments
+!*.security.md
+!*.removed.md
+!*.deprecated.md
+!*.added.md
+!*.changed.md
+!*.fixed.md
diff --git a/doc/development.rst b/doc/development.rst
index 97c175ada..40604c346 100644
--- a/doc/development.rst
+++ b/doc/development.rst
@@ -164,7 +164,36 @@ Step-by-Step Contribution Guide
Some environments require specific Python versions.
If you use `uv`, it will automatically download and manage these for you.
-5. **(Optional) Build Source Distribution and Wheels**
+
+
+5. **Add a News Fragment for the Changelog**
+
+ This project uses `towncrier `__ to manage the changelog in
+ ``CHANGELOG.md``. For every user-facing change (new feature, bugfix, deprecation, etc.), you
+ must add a news fragment:
+
+ * News fragments are short files describing your change, stored in ``doc/changelog.d``.
+ * Name each fragment ``..md``, where ```` is one of:
+ ``added``, ``changed``, ``deprecated``, ``removed``, ``fixed``, or ``security``.
+ * Example (for a feature added in PR #1234):
+
+ .. code-block:: shell
+
+ echo "Added support for CAN FD." > doc/changelog.d/1234.added.md
+
+ * Or use the towncrier CLI:
+
+ .. code-block:: shell
+
+ uvx towncrier create --dir doc/changelog.d -c "Added support for CAN FD." 1234.added.md
+
+ * For changes not tied to an issue/PR, the fragment name must start with a plus symbol
+ (e.g., ``+mychange.added.md``). Towncrier calls these "orphan fragments".
+
+ .. note:: You do not need to manually update ``CHANGELOG.md``—maintainers will build the
+ changelog at release time.
+
+6. **(Optional) Build Source Distribution and Wheels**
If you want to manually build the source distribution (sdist) and wheels for python-can,
you can use `uvx` to run the build and twine tools:
@@ -174,7 +203,7 @@ Step-by-Step Contribution Guide
uv build
uvx twine check --strict dist/*
-6. **Push and Submit Your Contribution**
+7. **Push and Submit Your Contribution**
* Push your branch:
@@ -218,13 +247,33 @@ These steps are a guideline on how to add a new backend to python-can.
Creating a new Release
----------------------
-* Releases are automated via GitHub Actions. To create a new release:
+Releases are automated via GitHub Actions. To create a new release:
+
+* Build the changelog with towncrier:
+
+
+ * Collect all news fragments and update ``CHANGELOG.md`` by running:
+
+ .. code-block:: shell
+
+ uvx towncrier build --yes --version vX.Y.Z
+
+ (Replace ``vX.Y.Z`` with the new version number. **The version must exactly match the tag you will create for the release.**)
+ This will add all news fragments to the changelog and remove the fragments by default.
+
+ .. note:: You can generate the changelog for prereleases, but keep the news
+ fragments so they are included in the final release. To do this, replace ``--yes`` with ``--keep``.
+ This will update ``CHANGELOG.md`` but leave the fragments in place for future builds.
+
+ * Review ``CHANGELOG.md`` for accuracy and completeness.
- * Ensure all tests pass and documentation is up-to-date.
- * Update ``CONTRIBUTORS.txt`` with any new contributors.
- * For larger changes, update ``doc/history.rst``.
- * Create a new tag and GitHub release (e.g., ``vX.Y.Z``) targeting the ``main`` branch. Add release notes and publish.
- * The CI workflow will automatically build, check, and upload the release to PyPI and other platforms.
+* Ensure all tests pass and documentation is up-to-date.
+* Update ``CONTRIBUTORS.txt`` with any new contributors.
+* For larger changes, update ``doc/history.rst``.
+* Create a new tag and GitHub release (e.g., ``vX.Y.Z``) targeting the ``main``
+ branch. Add release notes and publish.
+* The CI workflow will automatically build, check, and upload the release to PyPI
+ and other platforms.
* You can monitor the release status on:
`PyPi `__,
diff --git a/pyproject.toml b/pyproject.toml
index 51bcff693..72e706740 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -88,7 +88,7 @@ docs = [
]
lint = [
"pylint==3.3.*",
- "ruff==0.12.5",
+ "ruff==0.12.7",
"black==25.1.*",
"mypy==1.17.*",
]
@@ -213,3 +213,41 @@ disable = [
"too-many-public-methods",
"too-many-statements",
]
+
+[tool.towncrier]
+directory = "doc/changelog.d"
+filename = "CHANGELOG.md"
+start_string = "\n"
+underlines = ["", "", ""]
+title_format = "## Version [{version}](https://github.com/hardbyte/python-can/tree/{version}) - {project_date}"
+issue_format = "[#{issue}](https://github.com/hardbyte/python-can/issues/{issue})"
+
+[[tool.towncrier.type]]
+directory = "security"
+name = "Security"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "removed"
+name = "Removed"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "deprecated"
+name = "Deprecated"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "added"
+name = "Added"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "changed"
+name = "Changed"
+showcontent = true
+
+[[tool.towncrier.type]]
+directory = "fixed"
+name = "Fixed"
+showcontent = true
From 60b073159ae917e415d319af715a5aed1c900705 Mon Sep 17 00:00:00 2001
From: zariiii9003 <52598363+zariiii9003@users.noreply.github.com>
Date: Sat, 2 Aug 2025 12:32:04 +0200
Subject: [PATCH 2/4] add pull request template
---
.github/pull_request_template.md | 37 ++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
create mode 100644 .github/pull_request_template.md
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 000000000..e6ce365d1
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,37 @@
+
+
+## Summary of Changes
+
+
+
+-
+
+## Related Issues / Pull Requests
+
+
+
+- Closes #
+- Related to #
+
+## Type of Change
+
+- [ ] Bug fix
+- [ ] New feature
+- [ ] Documentation update
+- [ ] Refactoring
+- [ ] Other (please describe):
+
+## Checklist
+
+- [ ] I have followed the [contribution guide](https://python-can.readthedocs.io/en/main/development.html).
+- [ ] I have added or updated tests as appropriate.
+- [ ] I have added or updated documentation as appropriate.
+- [ ] I have added a [news fragment](doc/changelog.d/) for towncrier.
+- [ ] All checks and tests pass (`tox`).
+
+## Additional Notes
+
+
From 9d8d42c4aeefe930c332f7257e6d4d0962a5803e Mon Sep 17 00:00:00 2001
From: zariiii9003 <52598363+zariiii9003@users.noreply.github.com>
Date: Sat, 2 Aug 2025 12:32:22 +0200
Subject: [PATCH 3/4] add news fragments
---
doc/changelog.d/1758.added.md | 1 +
doc/changelog.d/1851.changed.md | 1 +
doc/changelog.d/1890.added.md | 1 +
doc/changelog.d/1904.fixed.md | 1 +
doc/changelog.d/1906.fixed.md | 1 +
doc/changelog.d/1908.fixed.md | 1 +
doc/changelog.d/1914.added.md | 1 +
doc/changelog.d/1920.added.md | 1 +
doc/changelog.d/1921.fixed.md | 1 +
doc/changelog.d/1927.fixed.md | 1 +
doc/changelog.d/1931.removed.md | 1 +
doc/changelog.d/1934.fixed.md | 1 +
doc/changelog.d/1940.fixed.md | 1 +
doc/changelog.d/1941.added.md | 1 +
doc/changelog.d/1945.changed.md | 2 ++
doc/changelog.d/1946.changed.md | 1 +
doc/changelog.d/1947.changed.md | 1 +
doc/changelog.d/1948.added.md | 1 +
doc/changelog.d/1949.added.md | 1 +
doc/changelog.d/1951.removed.md | 1 +
doc/changelog.d/1953.added.md | 1 +
doc/changelog.d/1954.added.md | 1 +
doc/changelog.d/1957.fixed.md | 1 +
doc/changelog.d/1960.changed.md | 1 +
doc/changelog.d/1961.added.md | 1 +
25 files changed, 26 insertions(+)
create mode 100644 doc/changelog.d/1758.added.md
create mode 100644 doc/changelog.d/1851.changed.md
create mode 100644 doc/changelog.d/1890.added.md
create mode 100644 doc/changelog.d/1904.fixed.md
create mode 100644 doc/changelog.d/1906.fixed.md
create mode 100644 doc/changelog.d/1908.fixed.md
create mode 100644 doc/changelog.d/1914.added.md
create mode 100644 doc/changelog.d/1920.added.md
create mode 100644 doc/changelog.d/1921.fixed.md
create mode 100644 doc/changelog.d/1927.fixed.md
create mode 100644 doc/changelog.d/1931.removed.md
create mode 100644 doc/changelog.d/1934.fixed.md
create mode 100644 doc/changelog.d/1940.fixed.md
create mode 100644 doc/changelog.d/1941.added.md
create mode 100644 doc/changelog.d/1945.changed.md
create mode 100644 doc/changelog.d/1946.changed.md
create mode 100644 doc/changelog.d/1947.changed.md
create mode 100644 doc/changelog.d/1948.added.md
create mode 100644 doc/changelog.d/1949.added.md
create mode 100644 doc/changelog.d/1951.removed.md
create mode 100644 doc/changelog.d/1953.added.md
create mode 100644 doc/changelog.d/1954.added.md
create mode 100644 doc/changelog.d/1957.fixed.md
create mode 100644 doc/changelog.d/1960.changed.md
create mode 100644 doc/changelog.d/1961.added.md
diff --git a/doc/changelog.d/1758.added.md b/doc/changelog.d/1758.added.md
new file mode 100644
index 000000000..0b95b14e2
--- /dev/null
+++ b/doc/changelog.d/1758.added.md
@@ -0,0 +1 @@
+Support 11-bit identifiers in the `serial` interface.
diff --git a/doc/changelog.d/1851.changed.md b/doc/changelog.d/1851.changed.md
new file mode 100644
index 000000000..672f7bd7d
--- /dev/null
+++ b/doc/changelog.d/1851.changed.md
@@ -0,0 +1 @@
+Allow sending Classic CAN frames with a DLC value larger than 8 using the `socketcan` interface.
\ No newline at end of file
diff --git a/doc/changelog.d/1890.added.md b/doc/changelog.d/1890.added.md
new file mode 100644
index 000000000..802629ed3
--- /dev/null
+++ b/doc/changelog.d/1890.added.md
@@ -0,0 +1 @@
+Keep track of active Notifiers and make Notifier usable as a context manager. Add function `Notifier.find_instances(bus)` to find the active Notifier for a given bus instance.
diff --git a/doc/changelog.d/1904.fixed.md b/doc/changelog.d/1904.fixed.md
new file mode 100644
index 000000000..80b665a6b
--- /dev/null
+++ b/doc/changelog.d/1904.fixed.md
@@ -0,0 +1 @@
+Fix a bug in `slcanBus.get_version()` and `slcanBus.get_serial_number()`: If any other data was received during the function call, then `None` was returned.
\ No newline at end of file
diff --git a/doc/changelog.d/1906.fixed.md b/doc/changelog.d/1906.fixed.md
new file mode 100644
index 000000000..f8988ff48
--- /dev/null
+++ b/doc/changelog.d/1906.fixed.md
@@ -0,0 +1 @@
+Fix incorrect padding of CAN FD payload in `BlfReader`.
\ No newline at end of file
diff --git a/doc/changelog.d/1908.fixed.md b/doc/changelog.d/1908.fixed.md
new file mode 100644
index 000000000..ce8947029
--- /dev/null
+++ b/doc/changelog.d/1908.fixed.md
@@ -0,0 +1 @@
+Set correct message direction for messages received with `kvaser` interface and `receive_own_messages=True`.
\ No newline at end of file
diff --git a/doc/changelog.d/1914.added.md b/doc/changelog.d/1914.added.md
new file mode 100644
index 000000000..a1f838001
--- /dev/null
+++ b/doc/changelog.d/1914.added.md
@@ -0,0 +1 @@
+Add Windows support to `udp_multicast` interface.
\ No newline at end of file
diff --git a/doc/changelog.d/1920.added.md b/doc/changelog.d/1920.added.md
new file mode 100644
index 000000000..c4f0e532e
--- /dev/null
+++ b/doc/changelog.d/1920.added.md
@@ -0,0 +1 @@
+Add FD support to `slcan` according to CANable 2.0 implementation.
diff --git a/doc/changelog.d/1921.fixed.md b/doc/changelog.d/1921.fixed.md
new file mode 100644
index 000000000..139d2979f
--- /dev/null
+++ b/doc/changelog.d/1921.fixed.md
@@ -0,0 +1 @@
+Fix timestamp rounding error in `BlfWriter`.
diff --git a/doc/changelog.d/1927.fixed.md b/doc/changelog.d/1927.fixed.md
new file mode 100644
index 000000000..5fb005d05
--- /dev/null
+++ b/doc/changelog.d/1927.fixed.md
@@ -0,0 +1 @@
+Fix timestamp rounding error in `BlfReader`.
\ No newline at end of file
diff --git a/doc/changelog.d/1931.removed.md b/doc/changelog.d/1931.removed.md
new file mode 100644
index 000000000..416329a83
--- /dev/null
+++ b/doc/changelog.d/1931.removed.md
@@ -0,0 +1 @@
+Remove support for Python 3.8.
diff --git a/doc/changelog.d/1934.fixed.md b/doc/changelog.d/1934.fixed.md
new file mode 100644
index 000000000..a12e4ffb2
--- /dev/null
+++ b/doc/changelog.d/1934.fixed.md
@@ -0,0 +1 @@
+Handle timer overflow message and build timestamp according to the epoch in the `ixxat` interface.
\ No newline at end of file
diff --git a/doc/changelog.d/1940.fixed.md b/doc/changelog.d/1940.fixed.md
new file mode 100644
index 000000000..9f4fc09ba
--- /dev/null
+++ b/doc/changelog.d/1940.fixed.md
@@ -0,0 +1 @@
+Avoid unsupported `ioctl` function call to allow usage of the `udp_multicast` interface on MacOS.
\ No newline at end of file
diff --git a/doc/changelog.d/1941.added.md b/doc/changelog.d/1941.added.md
new file mode 100644
index 000000000..a3d87cb6b
--- /dev/null
+++ b/doc/changelog.d/1941.added.md
@@ -0,0 +1 @@
+Add support for error messages to the `socketcand` interface.
\ No newline at end of file
diff --git a/doc/changelog.d/1945.changed.md b/doc/changelog.d/1945.changed.md
new file mode 100644
index 000000000..59a48774f
--- /dev/null
+++ b/doc/changelog.d/1945.changed.md
@@ -0,0 +1,2 @@
+The `gs_usb` extra dependency was renamed to `gs-usb`.
+The `lint` extra dependency was removed and replaced with new PEP 735 dependency groups `lint`, `docs` and `test`.
\ No newline at end of file
diff --git a/doc/changelog.d/1946.changed.md b/doc/changelog.d/1946.changed.md
new file mode 100644
index 000000000..d5dad4225
--- /dev/null
+++ b/doc/changelog.d/1946.changed.md
@@ -0,0 +1 @@
+Update dependency name from `zlgcan-driver-py` to `zlgcan`.
\ No newline at end of file
diff --git a/doc/changelog.d/1947.changed.md b/doc/changelog.d/1947.changed.md
new file mode 100644
index 000000000..db12a0318
--- /dev/null
+++ b/doc/changelog.d/1947.changed.md
@@ -0,0 +1 @@
+Use ThreadPoolExecutor in `detect_available_configs()` to reduce runtime and add `timeout` parameter.
\ No newline at end of file
diff --git a/doc/changelog.d/1948.added.md b/doc/changelog.d/1948.added.md
new file mode 100644
index 000000000..132d49d98
--- /dev/null
+++ b/doc/changelog.d/1948.added.md
@@ -0,0 +1 @@
+Add support for remote and error frames in the `serial` interface.
\ No newline at end of file
diff --git a/doc/changelog.d/1949.added.md b/doc/changelog.d/1949.added.md
new file mode 100644
index 000000000..6e8ac79b5
--- /dev/null
+++ b/doc/changelog.d/1949.added.md
@@ -0,0 +1 @@
+Add public functions `can.cli.add_bus_arguments` and `can.cli.create_bus_from_namespace` for creating bus command line options. Currently downstream packages need to implement their own logic to configure *python-can* buses. Now *python-can* can create and parse bus options for third party packages.
\ No newline at end of file
diff --git a/doc/changelog.d/1951.removed.md b/doc/changelog.d/1951.removed.md
new file mode 100644
index 000000000..6d56c5d50
--- /dev/null
+++ b/doc/changelog.d/1951.removed.md
@@ -0,0 +1 @@
+Remove `can.io.generic.BaseIOHandler` class. Improve `can.io.*` type annotations by using `typing.Generic`.
diff --git a/doc/changelog.d/1953.added.md b/doc/changelog.d/1953.added.md
new file mode 100644
index 000000000..76ef5137a
--- /dev/null
+++ b/doc/changelog.d/1953.added.md
@@ -0,0 +1 @@
+Add support for remote frames to `TRCReader`.
diff --git a/doc/changelog.d/1954.added.md b/doc/changelog.d/1954.added.md
new file mode 100644
index 000000000..d2d50669b
--- /dev/null
+++ b/doc/changelog.d/1954.added.md
@@ -0,0 +1 @@
+Mention the `python-can-candle` package in the plugin interface section of the documentation.
diff --git a/doc/changelog.d/1957.fixed.md b/doc/changelog.d/1957.fixed.md
new file mode 100644
index 000000000..9d5dd6071
--- /dev/null
+++ b/doc/changelog.d/1957.fixed.md
@@ -0,0 +1 @@
+Fix configuration file parsing for the `state` bus parameter.
diff --git a/doc/changelog.d/1960.changed.md b/doc/changelog.d/1960.changed.md
new file mode 100644
index 000000000..f3977aedb
--- /dev/null
+++ b/doc/changelog.d/1960.changed.md
@@ -0,0 +1 @@
+Update contribution guide.
diff --git a/doc/changelog.d/1961.added.md b/doc/changelog.d/1961.added.md
new file mode 100644
index 000000000..483427ec0
--- /dev/null
+++ b/doc/changelog.d/1961.added.md
@@ -0,0 +1 @@
+Add new CLI tool `python -m can.bridge` (or just `can_bridge`) to create a software bridge between two physical buses.
From 52c43ba10ae7f6652a86ed62a4d59de540d091f0 Mon Sep 17 00:00:00 2001
From: zariiii9003 <52598363+zariiii9003@users.noreply.github.com>
Date: Tue, 5 Aug 2025 14:18:44 +0200
Subject: [PATCH 4/4] add fragment for 1967
---
doc/changelog.d/1967.fixed.md | 1 +
1 file changed, 1 insertion(+)
create mode 100644 doc/changelog.d/1967.fixed.md
diff --git a/doc/changelog.d/1967.fixed.md b/doc/changelog.d/1967.fixed.md
new file mode 100644
index 000000000..fdd72b363
--- /dev/null
+++ b/doc/changelog.d/1967.fixed.md
@@ -0,0 +1 @@
+Mf4Reader: support non-standard `CAN_DataFrame.Dir` values in mf4 files created by [ihedvall/mdflib](https://github.com/ihedvall/mdflib).