Version 3.0.0 ==== 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 synchronous looking code without handling multiple threads and locking mechanisms. #388 * New can viewer terminal application. (`python -m can.viewer`) #390 * More formally adds task management responsibility to the `Bus`. By default tasks created with `bus.send_periodic` will have a reference held by the bus - this means in many cases the user doesn't need to keep the task in scope for their periodic messages to continue being sent. If this behavior isn't desired pass `store_task=False` to the `send_periodic` method. Stop all tasks by calling the bus's new `stop_all_periodic_tasks` method. #412 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 * writing to closed writers is not supported any more (it was supported only for some) * the file in the reader/writer is now always stored in the attribute uniformly called `file`, and not in something like `fp`, `log_file` or `output_file`. Changed the name of the first parameter of the read/writer constructors from `filename` to `file`. Other notable changes --------------------- * can.Message class updated #413 - Addition of a `Message.equals` method. - Deprecate id_type in favor of is_extended_id - Initializer parameter extended_id deprecated in favor of is_extended_id - documentation, testing and example updates - Addition of support for various builtins: __repr__, __slots__, __copy__ * IO module updates to bring consistency to the different CAN message writers and readers. #348 - context manager support for all readers and writers - they share a common super class called `BaseIOHandler` - all file handles can now be closed with the `stop()` method - the table name in `SqliteReader`/`SqliteWriter` can be adjusted - append mode added in `CSVWriter` and `CanutilsLogWriter` - [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) and [path-like](https://docs.python.org/3/glossary.html#term-path-like-object) objects can now be passed to the readers and writers (except to the Sqlite handlers) - add a `__ne__()` method to the `Message` class (this was required by the tests) - added a `stop()` method for `BufferedReader` - `SqliteWriter`: this now guarantees that all messages are being written, exposes some previously internal metrics and only buffers messages up to a certain limit before writing/committing to the database. - the unused `header_line` attribute from `CSVReader` has been removed - privatized some attributes that are only to be used internally in the classes - the method `Listener.on_message_received()` is now abstract (using `@abc.abstractmethod`) * Start testing against Python 3.7 #380 * All scripts have been moved into `can/scripts`. #370, #406 * Added support for additional sections to the config #338 * Code coverage reports added. #346, #374 * Bug fix to thread safe bus. #397 General fixes, cleanup and docs changes: (#347, #348, #367, #368, #370, #371, #373, #420, #417, #419, #432) Backend Specific Changes ------------------------ 3rd party interfaces ~~~~~~~~~~~~~~~~~~~~ * Deprecated `python_can.interface` entry point instead use `can.interface`. #389 neovi ~~~~~ * Added support for CAN-FD #408 * Fix issues checking if bus is open. #381 * Adding multiple channels support. #415 nican ~~~~~ * implements reset instead of custom `flush_tx_buffer`. #364 pcan ~~~~ * now supported on OSX. #365 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 tasks now reuse a bcm socket #404, #425, #426, * socketcan bugfix to receive error frames #384 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) ===== * 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) ===== * 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`), this is now completely transparent for the library user. * automatic detection of available configs/channels in supported interfaces. * Added synchronized (thread-safe) Bus variant. * context manager support for the Bus class. * 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) ===== * Support for out of tree can interfaces with pluggy. * Initial support for CAN-FD for socketcan_native and kvaser interfaces. * Neovi interface now uses Intrepid Control Systems's own interface library. * Improvements and new documentation for SQL reader/writer. * Fix bug in neovi serial number decoding. * Add testing on OSX to TravisCI * Fix non english decoding error on pcan * Other misc improvements and bug fixes Version 2.0.0 (2018-01-05 ===== After an extended baking period we have finally tagged version 2.0.0! Quite a few major changes from v1.x: * New interfaces: * Vector * NI-CAN * isCAN * neoVI * Simplified periodic send API with initial support for SocketCAN * Protocols module including J1939 support removed * Logger script moved to module `can.logger` * New `can.player` script to replay log files * BLF, ASC log file support added in new `can.io` module You can install from [PyPi](https://pypi.python.org/pypi/python-can/2.0.0) with pip: ``` pip install python-can==2.0.0 ``` The documentation for v2.0.0 is available at http://python-can.readthedocs.io/en/2.0.0/