4.15.2 (2023-01-19)
-------------------

- Update Thrift to 0.16
- Fixed incompatibility with Python 3.8 caused by use of deprecated
  name for Python standard library class
- Add support for Python 3.10
- Drop support for Python 3.5, 3.6


4.15.1 (2019-05-19)
-------------------

- Fixed bug where `concrete.context` code was not included in 4.15.0
  release


4.15.0 (2019-05-19)
-------------------

- Updated to Concrete schema 4.15, which adds `Context` structure and
  `AnnotateWithContextService` service.  `Context`s are intended to be
  used to convey additional information alongside a `Communication` to
  be annotated.

- Dropped support for Python 2.7

- Added `add_references` flag to CommunicationContainer classes

- Added shell script `install-mojave-homebrew-accelerated-thrift.sh`
  for installing accelerated Thrift on macOS using the Homebrew
  package manager.


4.14.1 (2019-02-28)
-------------------

- Added `scripts/comms2csv.py` and `scripts/csv2comms.py` script for
  converting Communication archives to/from a CSV file of TJSONProtocol
  encoded Communications

- Updated Thrift dependency from 0.10.0 to 0.11.0

- Added `--uri` flag for THttp/TJSONProtocol support to
  `scripts/annotate-communication-client.py` and
  `scripts/fetch-client.py`

- Added Concrete Service wrappers using Thrift THttp/TJSONProtocol

- CommunicationReader.__next__() now throws EOFError when reading a
  truncated (invalid) Communication file.

- Improvements to `scripts/search-client.py`
  - Command line argument for hostname changed from positional
    argument to optional `--host` flag
  - Command line argument for port changed from positional
    argument to optional `--port` flag
  - Added batch mode for command line queries
  - Search terms with Non-ASCII characters now properly supported on
    both Python 2 and Python 3
  - Added `--with-scores` flag to print search result scores

- Improved newline handling for concrete.util.simple_comm.create_comm()
  - Leading and trailing document newlines no longer generate empty
    sentences
  - Multiple lines of whitespace are now treated as section breaks;
    previous behavior was that only '\n\n' was used for section
    breaks

- Twitter (sometimes) uses the incorrect ISO-639-1 code for
  Indonesian.  The code should be 'id', but Twitter sometimes uses
  'in'.  `concrete.util.twitter.twitter_lid_to_iso639_3()` now
  converts this incorrect ISO-639-1 code to the correct ISO-639-3 code
  for Indonesian ('ind').

- Fixed import errors in `examples/annotate-communication-service.py`
  caused by schema changes


4.14.0 (2017-08-08)
-------------------

- Updated for Concrete schema 4.14
  - Removed `constituent` field from `MentionArgument` and
    `SituationMention`.
  - Added `dependencies` and `constituent` fields to `TokenRefSequence`


4.13.3 (2017-08-01)
-------------------

- Fix bug in wait-concrete-service.py in which timeout would sometimes
  be ignored.


4.13.2 (2017-08-01)
-------------------

- Use home as WORKDIR in Docker image to avoid import errors.

- Add .dockerignore.

- Add script to wait for a Concrete service to become alive.

- Add S3 fetch and store server scripts.


4.13.1 (2017-07-29)
-------------------

- Added 'bottle' dependency needed by scripts/access-http-server.py

- Add S3 fetch (communication container) and store handler.

- Add Redis store handler.

- Add concrete.util.summarization_wrapper submodule for
  SummarizationService introduced with concrete 4.13


4.13.0 (2017-07-18)
-------------------

- Update to concrete 4.13 schema.


4.12.10 (2017-06-27)
--------------------

- Breaking change: update concrete-inspect.py to support multiple
  annotations of the same type.  Changes CoNLL output for an annotation
  type that is not present: an empty column is no longer printed.

- Refactor concrete.inspect to use annotation filter callbacks to select
  annotations rather than tool names, as tool names no longer uniquely
  identify an annotation.  The new filter_annotations function can be
  used to create simple filters; that functionality is exposed in
  concrete-inspect.py.

- Add timestamp_to_datetime in concrete.util.metadata

- Add optional gzip compression to CommunicationWriter

- Print situation mention kind and intensity in concrete.inspect


4.12.9 (2017-05-13)
-------------------

- Clean up sphinx doc: suppress thrift_spec fields, render
  comments from Thrift verbatim

- Update help for concrete-inspect.py --annotation-headers
  (and a few other help messages)

- Add --other-tag option to concrete-inspect.py to enable CoNLL output
  of arbitrary token tags

- Move get_tokenizations from concrete.inspect to
  concrete.util.tokenization

- Added PropertyLists to situation-mentions output of
  concrete-inspect.py

- Fix concrete2json TJSONProtocol UTF-8 bug


4.12.8 (2017-02-27)
-------------------

- Store tweet JSON in Communication.originalText.

- Expand/modify functionality of fetch-client.py:
    - Accept communication IDs on standard input
    - Write results to tar.gz archive

- Expand functionality of search-client.py:
    - Accept search terms as command-line arguments
    - Populate SearchQuery.rawQuery field
    - Add command-line flags --about, --alive, --capabilities, --corpora

- Add child mentions to "concrete-inspect.py --entities" output.

- concrete.util.simple_comm.create_sentence now sets Token.textSpan field

- CommunicationWriterTar.write() now uses CommID for default filename

- concrete.validate.validate_communication_file() now returns a boolean

- Added script access-http-server.py

- Now using Sphinx to generate documentation

- fetch-client.py can now read Communication IDs from stdin,
  and save Communications to a TGZ file

4.12.7 (2017-01-29)
-------------------

- Add brief tutorial to README.rst.

- Switch to zest.releaser for releases.

- Add Python 3 support.


4.12.6 (2017-01-28)
-------------------

- Refactor build, simplifying with tox.

- Turn on public Appveyor and GitHub builds.

- Remove hard numpy/scipy dependency in concrete.util.tokenization,
  adding (slower) fallback implementations.

- Add concrete.services.results to top-level package import.

- Expand Windows test coverage to (most) integration tests.

- Update package-level imports and use them in README.rst (as before).

- Rename
  annotate-communication-example.py to create-tokentagging-example.py.

- Add Redis hash backed Communication container implementation.


4.12.5 (2017-01-26)
-------------------

- Add command-line Fetch client, server scripts.

- Add wrappers for all current Concrete (4.12) services.

- Add Communication container interface and implementations:
    - filesystem directory
    - Fetch service
    - file loaded into memory
    - zip file

- Increase flake8 max-line-length from 79 to 99.

- Add note about accelerated protocol C++ dependency to README.rst.

- Fix syntax error in CONTRIBUTING.rst.

- Add CHANGELOG, AUTHORS.


4.12.4 (2017-01-15)
-------------------

- Deprecate remaining scripts containing underscores (to be removed in
  the future):
    - concrete_inspect.py
    - concrete_diff.py
    - validate_communication.py
    - inspect_dependency_parses.py

- Add new scripts using hyphens instead of underscores, for easy typing:
    - concrete-inspect.py
    - concrete-diff.py
    - validate-communication.py
    - inspect-dependency-parses.py

- Fix import errors in new AnnotateCommunicationService scripts:
    - examples/annotate-communication-service.py
    - scripts/annotate-communication-client.py

- Add check for accelerated protocol.  This can be used directly as
  concrete.util.thrift_factory.is_accelerated(); acceleration is also
  now reported in the version string reported by scripts (when the
  --version flag is passed).


4.12.3 (2017-01-15)
-------------------

- Select accelerated compact protocol in thrift_factory.  The
  accelerated protocol will now be used by default; if it is not
  supported, Thrift will fall back to the unaccelerated protocol.

- Switch to reStructuredText in README and CONTRIBUTING to improve look
  and feel on PyPI.


4.12.2 (2017-01-15)
-------------------

- Update to Thrift 0.10.0.
    - __hash__ implementations are removed for mutable objects,
      including all Concrete types.  This is in response to the existing
      __hash__ implementation breaking on lists and other mutable
      container types.

- Remove accel branch from documentation and build.  Thrift 0.10.0
  includes the accelerated compact protocol, so the accelerated
  protocol is now available on Concrete-Python master and installations
  using pip.
    - The accel branch is now defunct; 4.12.1 is the final release on
      the accel branch.

- Add g++ to Docker image, needed to build accelerated protocols.

- Rename build.bash to generate.bash (affects maintainers only).


4.12.1 (2017-01-15)
-------------------

- accel branch corresponding to 4.12.0.


4.12.0 (2017-01-15)
-------------------

- Update to concrete 4.12 schema.

- Remove wrappers and scripts interfacing with the Annotator service
  removed in the 4.12 schema:
    - concrete.util.annotator_wrapper.AnnotatorClientWrapper
    - concrete.util.annotator_wrapper.AnnotatorServiceWrapper
    - concrete.util.annotator_wrapper.SubprocessAnnotatorServiceWrapper
    - examples/annotate_example.py
    - examples/annotator_server.py
    - scripts/annotator_client.py

- Add wrappers and scripts interfacing with the
  AnnotateCommunicationService (replacing the Annotator service):
    - concrete.util.annotate_wrapper.AnnotateCommunicationClientWrapper
    - concrete.util.annotate_wrapper.AnnotateCommunicationServiceWrapper
    - concrete.util.annotate_wrapper.SubprocessAnnotateCommunicationServiceWrapper
    - examples/annotate-communication-example.py
    - examples/annotate-communication-service.py
    - scripts/annotate-communication-client.py

- Rename search_client.py to search-client.py.

- Remove deprecated compress-uuids, tweets2concrete scripts.
