Changes
=======

3.1.2
-----

- Added :class:`~mhi.common.codec.FuzzyCodec`
- ``@deprecated`` now works on functions, instead of just methods.

3.1.1
-----

- Launching applications with ``minimized=False`` no longer uses
  ``SW_SHOWNOACTIVATE``, which no longer seems to be obeyed,
  and was preventing the application window position from being
  preserved between launches.

3.1.0
-----

- Added :meth:`~mhi.common.process.host_addresses`,
  :meth:`~mhi.common.process.is_local_host`, and
  :meth:`~mhi.common.process.host_filter` to simplify connect() functions


3.0.3
-----

- :class:`~mhi.common.version.Version` now treats ` (Beta)` as `.99`
- Reintroduce support for 'allow_beta' in :meth:`~mhi.common.process.find_exe`


3.0.2
-----

- :meth:`~mhi.common.process.unused_tcp_port` now allows restricted port ranges
- Added :class:`~mhi.common.lingering_cache.LingeringCache`
- Live proxy objects are cached and returned where possible.
- Improved IPv4/IPv6 support


3.0.1
-----

- Fix: Cached exceptions needed to be raised, not returned.


3.0.0
-----

- Drops support for Python 3.5 and 3.6
- Add ``@rmi(fallback=True)`` option for remote methods.


2.5.1
-----

- Corrected handling of exceptions in :meth:`~mhi.common.remote.Application.map_call`
  and :meth:`~mhi.common.remote.Application.map_property`.


2.5.0
-----

- Added :meth:`~mhi.common.remote.Context.call` method.
- Added :meth:`~mhi.common.remote.Context.get_prop` method.
- Added :meth:`~mhi.common.remote.Context.set_prop` method.


2.4.5
-----

- Added :meth:`~mhi.common.remote.Context.server_address` method.
- Added :meth:`~mhi.common.remote.Application.map_call` method.
- Added :meth:`~mhi.common.remote.Application.map_property` method.
- Fixed :meth:`~mhi.common.colour.Colour.argb_to_colour` when negative value is decoded.
- ``allow_alpha`` and ``allow_beta`` are no longer supported in :meth:`~mhi.common.process.find_exe`


2.4.4
-----

- When listener is bound to port 0, expose actual port number used.


2.4.3
-----

- Replaced `set[bool]` with `Set[bool]` to restore Python 3.5 compatibility.

2.4.2
-----

- (recalled)

2.4.1
-----

- Added default module help command subprocessor
- Only retry `SystemError('Could not queue task')`
  instead of all `SystemError` exceptions.

2.4.0
-----
- Add support for auto-retry of RMI requestes
- Add `CodecMap`

2.3.11
------
- Version class is now hashable
- `py -m mhi.common.process` show PIDs, etc.
- Removed `Thread.isAlive` call (deprecated in 3.8)

2.3.10
------
- Version class is now hashable

2.3.9
-----
- Added `Application.is_embedded()` method
- Fixed crash when an uncomparible version identifier is found.
- Fixed packaging module requirement

2.3.8
-----
- Added `Application.server_address()` method
- Added `Application.secondary_connection()` method

2.3.7
-----
- Replaced deprecated `distutils` package.

2.3.6
-----
- Corrected Windows pathname accidently resulting in illegal escapes.
- Replaced f-strings, to restore Python 3.5 compatibility.

2.3.5
-----
- Added `requires` attribute for rmi_properties.
- Added `shell_folder(...)` function.

2.3.4
-----
- Fix Enerplot 1.0.0 legacy communication issue.

2.3.3
-----
- Optimized communication memory buffer usage.

2.3.2
-----
- Python server kept awake one additional task cycle, to improve responsiveness.

2.3.1
-----
- Removed Python 3.9 specific typehint syntax from `LibraryZipper`.

2.3.0
-----
- Added `mhi.common.zipper.LibraryZipper` to support updating embedded libraries
  with versions downloaded from PyPI.

2.2.1
-----
- Added type-hints for mypy type checking.
- Allow `Remotable` objects to override their persistent id module name.
- Clear the linecache after each program execution, to avoid tracebacks from showing
  old file contents.

2.2.0
-----
- Renamed from `mhi.*.common` namespace submodules to `mhi.common`.

2.1.3
-----
- Input to BooleanCodec restricted to booleans, integers `0` and `1`, and the strings
  `"true"`, `"false"`, `"0"`, `"1"`, `"yes"`, `"no"`.  Additionally, emits a warning
  if the input is not a boolean.
- Update rmi_property to work with newer versions of Sphinx

2.1.2
-----
- Added ``repr`` to MapCodec

2.1.1
-----

2.1.0
-----

- Added ``minimum``, ``maximum``, ``allow_alpha`` and ``allow_beta`` to ``find_exe``.
- Added user configuration readers

2.0.1
-----

- Added Application.minimum_version(version) and Application.requires(version) methods
- Added @requires(version) and @deprecated decorators
- Increased socket throughput (disable Nagling, use MSG_WAITALL flag with recv())

