v0.18.5
=======

- Async Context: awaiting a queued call now flushes the context (everything
  queued so far, in order, as a single request) and returns that call's
  result. Previously this deadlocked, since nothing resolved the returned
  future until the context was flushed explicitly or on exit. The flush is
  shielded from cancellation so a timed-out awaiter (e.g. asyncio.wait_for)
  cannot strand other queued calls.

- Context result parsing now tolerates per-call futures that the caller has
  cancelled, instead of failing the whole batch with InvalidStateError.

v0.18.4
=======

Released 2026-05-19

- Allow HTTP timeout to be specified across the API (via TuberObject, tuber_context)
- Fix "self" argument in function signatures
- Add useful string __repr__  for TuberObjects

There are a few CI/CD chores included in this release as well.

v0.18.3
=======

Released 2025-09-02

New features:

- Added support for transparent gzip compression
Bug fixes:

- Pybind11 3.x fixes for str_enum

- tuberd: Unify simplejson/json/cbor treatment of bytes objects (simplejson
  encodes bytes using utf-8 by default, which doesn't match either of the other
  two encoders)

Distribution / CI / CD:

- CI/CD: Linux/x84 packages are now built natively

- tuberd: tests are no longer installed by default

- tuberd: Python requests, requests-futures are no longer pre-requisites

v0.18.2
=======

Released 2025-07-07

- Pass through trace-backs for server-side exceptions

v0.18.1
=======

Released 2025-06-26

- Fixes convert_json=False behaviour with SimpleTuberContext. (Fixes #3)

v0.18
=====

Released 2025-06-13

- Adds "convert_json" support to prevent dict results from being converted
  into TuberResult objects. This is an optional setting for those who prefer
  dict["like"]["APIs"] to the current object.like.API.

- Replaces the underlying "TuberResult" objects with SimpleNamespace objects.
  This is part of an ongoing effort to make the Tuber codebase less special
  where it doesn't need to be special.

- Python 3.8 support has been removed.

- When remote exceptions occur inside a chain of RPC calls in a Context,
  it's now possible to return them "in-band" (as list elements) rather than
  "out-of-band" (as an exception, which interrupts control flow). This is an
  optional setting and does not affect default behaviour.

- Mandate use of mDNS-capable resolver (either aiohttp_asyncmdnsresolver if
  available, falling back on ThreadedResolver.) aiohttp's DefaultResolver is
  AsyncResolver under some conditions (and that resolver doesn't support mDNS.)

v0.17
=====

Released 2024-12-13

Bug fixes:

- DocStrings and __signature__ metadata has been reworked. This fixes missing
  DocStrings and correctly attempts to tunnel signatures to Python clients.

v0.16
=====

Released 2024-09-13

- Adds "--validate" to tuberd invocation, which checks served data against a
  jsonschema. This is intended as a developer aid, NOT as a security feature
  (since it's only server-side, and not default!)

- Synchronous (SimpleTuberObject) and asynchronous (TuberObject) APIs are
  brought together using requests-futures package, and tested alongside each
  other.

- Server hotpath is now partly Python - this has very little performance cost
  and is much more maintainable.

- Libfmt dependency removed.

- Server-side container API added (allowing objects to host other objects)

v0.15
=====

Released 2024-08-20

- Fix enum class serialization. The str_enum helper now produces enum.Enum()
  classes in Python that are also str() subclasses. For all 3 serializers we
  use (json, orjson, cbor2) this is enough to correctly serialize enum classes.

v0.14
=====

Released 2024-08-08

- CI/CD improvements: builds wheels for manylinux and OS X

v0.13
=====

Released 2024-05-29

- A "simple" (non-asyncio) client now lives alongside the asyncio client. The
  points of entry for these are "resolve" and "resolve_simple". They are
  approximately API-compatible, but the non-asyncio version entirely avoids
  async code style (async def / await / ...).

- Multiple calls (using a Context or SimpleContext) can now optionally continue
  after errors, using the continue_on_error flag. When this is True, all calls
  in a Context/SimpleContext run to completion even if some of them fail.
  The default behaviour remains the same - when continue_on_error is False,
  server-side execution proceeds in sequence and halts at the first call that
  encounters an error.

v0.12
=====

Released 2024-04-22

- Headers are now properly included in binary builds (.whl files)
- Corrected PYTHONPATH for "make test"; broken in 0.11.

v0.11
=====

Released 2024-04-22

- resolve now required (20)
- tuber package rearranged to tuber.server / tuber.client; registry moved to server (#19)
- linter (black) added to CI/CD flow (#17)
- client-side Python packages (aiohttpd) no longer required in server environment (#18)
- setuptools now builds client and server (#14)

v0.10
=====

Released 2024-04-16

- Adds support for CBOR as a transport mechanism.

v0.9
====

Released 2024-02-21

- Removes dependency on boost::program_options in favour of getoptA
- Compatibility fixes for libfmt, libhttpserver, OS X, Clang

v0.8
====

Released 2024-01-29

- Compatibility fix for libfmt

v0.7
====

Released 2023-12-11

* New features:

  - Added support for warnings.warn calls in server-side code - these are
    propagated through a "warnings" field in the result object and bubbled up
    as client-side warnings.

v0.6
====

Released 2023-02-24

* Fixes:

  - Acquire GIL earlier in response scope, outside "try" block.  Otherwise, the
    exception path occurs outside the GIL block, and it's not valid to use
    json_dumps to emit error messages. Fixes a segfault when invalid JSON is
    supplied.

v0.5
====

Released 2022-05-24

* Fixes:

  - Correct preamble install path.

v0.4
====

Released 2022-04-14

* Features:

  - Adds --orjson-with-numpy extension to enable orjson fast-path. This
    serializer offers significant performance gains, especially when using
    numpy objects.

v0.3
====

Released 2022-04-07

* Features:

  - Adds option for use of user-specified JSON module.

v0.2
====

Released 2022-04-06

* Features:

  - Removes dependency on nlohmann::json. The JSON dependency is intended to
    speed up serialization. The Python-native JSON serializer is implemented in
    C under the hood, and should be better able to avoid casual
    copy-conversions of arguments and results.

  - Adds Python test framework. The test framework is a starting point (it does not exercise unhappy
    paths or argument variations right now.)

v0.1
====

Released 2022-04-03

* Features:

   - Initial release.
