4.18.1 (2023-07-09)
-------------------

- Build Updates:
  - Fix coverage report generation in GitLab build
  - Created GitHub Actions build
  - Switched to Python 3.8 as minimal version
- Fixed CommunicationReader to skip directories in zip archives


4.18.0 (2023-07-09)
-------------------

- Updated to Concrete schema 4.18, which adds
  AnnotateCommunicationBatchService


4.17.0 (2023-02-06)
-------------------

- Update to Concrete schema 4.17, which adds convert package with
  ConvertCommunicationService, property package with Property type
  abstracted from situations, and id, canonical name, and property list
  fields to situation and entity types
- Fix stale build


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.
