Version 1.0.0a3 (2022-06-03)
--------------------------
Breaking: Changed import from `snowplow_tracker` to `aio_snowplow_tracker` to support installing both libraries.

Version 1.0.0a2 (2022-06-02)
--------------------------
Breaking: Emitter and Tracker leverage asyncio. `Tracker.track_*` calls must now be awaited.
Breaking: Remove AsyncEmitter. Use `asyncio.gather` instead.

Version 1.0.0a1 (2022-06-01)
--------------------------
Breaking: Drop support for Python < 3.7

Version 0.10.0 (2021-12-16)
--------------------------
Add Python 3.10 support (#254)
Add configurable timeout for HTTP requests (#258)

Version 0.9.1 (2021-10-26)
--------------------------
Update python versions in run-tests script (#256)
Fix pycontracts incompatibility with pyparsing v3 (#255)

Version 0.9.0 (2021-04-23)
--------------------------
Fix items default value issue in track_ecommerce_transaction (#252)
Make optional timestamp argument set 'true timestamp' rather than 'device created timestamp' (#251)
Pass successfully sent events through to on_success callback (#228)
Restrict endpoint parameter as non-empty string for Emitter (#249)
Add ability to set Subject per event (#158)
Extract correct version in deploy workflow (#182)
Support Unicode in adding events to buffer (#162)
Use mocks for unit tests (#250)
Replace regular file test operator in run-tests.sh (#247)
Bump dependencies (#246)
Add a Python 3 wheel to pypi (#244)
Make sure that tracker attaches timestamp even if wrong type was passed (#190)
Correct capitalization of Content-Type header (#152)
Replace deprecating syntax (#243)
Allow celery and redis to be optional dependencies (#232)
Update gevent to the last major version (#233)
Switch to GitHub Actions (#234)
Allow custom json encoder to be passed when configuring tracker (#242)
Update Copyright notices to 2021 (#241)
Pin decorator package version for Python2 platforms (#245)

Version 0.8.4 (2020-10-10)
--------------------------
Fix incompatible versions of greenlet and gevent (closes #236)
Update build to Active Python Releases (closes #237)
Add Snyk monitoring (closes #238)
Update Copyright notices to 2020 (closes #235)

Version 0.8.3 (2019-06-28)
--------------------------
Fix test_bytelimit test (#227)
Initialize Celery in CeleryEmitter (#226)
Allow non ascii characters to be encoded using Base64 (#194)
Allow empty strings in string_or_none contract (#184)
Fix on_failure param docstring description (#225)
Bump max version requirement of redis (#223)
Remove Vagrant & Ansible (#222)

Version 0.8.2 (2018-12-01)
--------------------------
Fix date for 0.8.0 release in CHANGELOG (#183)
Remove Python 3.3 from tests (#206)
Update PyPI deployment to use Twine (#207)
Add version bounds for all dependencies (#208)
Upgrade Celery to 4.x (#210)
Fix flush argument clash with async keyword (#211)
Add Python 3.7 to test suite (close #212)

Version 0.8.0 (2016-10-13)
--------------------------
Add byte_limit to Emitter (#170)
Add support for dvce_sent_tstamp (#159)
Use SelfDescribingJson class to build payload_data JSON (#141)
Add ability to automatically send all events in buffer at a regular time interval (#114)
Add support for attaching true timestamp for events (#161)
Use exact dependencies versions and remove requirements.txt (#175)
Add missing dependencies (#174)
Remove Python 3.2 from travis testing (#173)
Add missing classifiers to setup.py (#148)
Add additional supported platforms to Subject (#172)
Add missing tracker events (#165)
Add support for Python 3.4 and 3.5 (#169)
Add `track_self_describing_event()` method (#160)

Version 0.7.2 (2015-08-16)
--------------------------
Corrected contract typo in the docstring of AsyncEmitter's constructor (#147)
Ensured that Travis uses latest versions of dependencies (#149)
Fixed 0.7.0 reference for 0.7.1 in CHANGELOG (#146)

Version 0.7.1 (2015-08-11)
--------------------------
Ensured synchronous flush always waits for the task queue to empty (#142)

Version 0.7.0 (2015-08-07)
--------------------------
Added SelfDescribingJson class (#140)
Added support for Python 2 unicode strings using six library, thanks @mthomas! (#138)
Started handling RequestExceptions (#134)
Started treating all 2xx and 3xx status codes as successful (#133)
Made Emitter and AsyncEmitter thread-safe (#130)
Made synchronous flush wait until buffer is empty (#139)
Made the number of worker threads used by the AsyncEmitter configurable (#136)
Fixed on_failure implementation for POST requests (#135)
Fixed to latest Peru version (#132)
Fixed code formatting in README (#129)

Version 0.6.0.post1 (2015-02-14)
--------------------------------
Improved logging (#109)
Removed unnecessary whitespace from POST requests (#110)
Started sending payload_data version 1-0-2 (#113)
Added set_domain_user_id method (#115)
Added set_useragent method (#116)
Added set_ip_address method (#117)
Added set_network_user_id method (#118)
Updated contexts schema to 1-0-1 (#119)
Added integration tests using mocked POST requests (#122)
Started preserving unicode characters in JSONs (#123)
Used Travis CI image for master branch in README (#125)
Added license button to README (#126)
Added dedicated Vagrant setup (#127)
Added Vagrant push to publish tracker to PyPI (#128)

Version 0.5.0 (2014-08-13)
--------------------------
Converted payload values to strings for POST requests (#100)
Set content type to "application/json; charset=utf-8" for POST requests (#99)
Changed collector endpoint for POST to /com.snowplowanalytics.snowplow/tp2 (#98)
Stopped setting and sending tid (#94)
Started setting and sending eid (#93)
Allowed a single Tracker instance to send events to multiple Emitters (#91)
Started passing a list of dictionaries to the on_failure callback for POST requests (#104)
Made the "name" argument of track_screen_view optional (#103)
Made all tracker methods chainable (#105)
Stopped sending empty payloads (#106)

Version 0.4.0 (2014-06-10)
--------------------------
Migrated unstructured events to self-describing JSON (#87)
Migrated custom contexts to self-describing JSON (#88)
Gave separate events within an ecommerce transaction different transaction IDs (#89)
Added https support for tracker (#81)
Added callbacks for flushing (#78)
Added Python-logging (#76)
Added Redis and gevent based async approach (#75)
Added thread-based AsyncBufferedConsumer (#74)
Added ability to specify port for collector (#72)
Added POST support to tracker (#70)
Added Redis-based queue (#45)
Added Buffered Consumer (#44)
Changed user_id to be set on a per-event basis (#39)
Removed type hint suffixes from unstructured events (#36)

Version 0.3.0 (2014-04-25)
--------------------------
Added custom context vendor configuration option (#67)
Changed the return value of the tracking methods to a tuple (#65)
Added coveralls code coverage button (#64)
Added currency parameter to ecommerce tracking methods (#62)
Added config option to disable contracts (#61)
Added event_vendor as argument to track_unstruct_event (#54)
Added classifiers to setup.py (#48)
Added support for custom context to all track() methods (#38)
Updated Tracker constructor to use map of optional args (#37)
Updated so a transaction and its items have the same txnid and dtm (#25)
Added support for Python 3.2 (#41)

Version 0.2.0 (2014-04-15)
--------------------------
Fixed Pycontracts dependency (#63)
Made unrequired tracker method arguments optional (#40)
Linked the Technical Docs and Setup Guide images to the appropriate pages (#60)
Changed API to no longer specify a collector URL option (#57)
Removed the "URL from Cloudfront subdomain" option (#56)
Started sending event vendor parameter through on querystring (#55)
Changed track screen view to use an unstructured event (#53)
Added ability to name individual instances of the Python Tracker (#52)
Validated GET payload in all integration tests (#33)
Added support for Python 2.7 (#42)
Fixed versions in requirements.txt (#47)
Added platform and tracker version to payload (#50)
Changed tracker version prefix from "python-" to "py-" (#51)

Version 0.1.0 (2014-03-28)
--------------------------
Initial release
