Version 1.0.1 (2023-07-12)
--------------------------
Fix tstamp parameter in track_self_describing_event (#350) (Thanks to @andehen)

Version 1.0.0 (2023-06-16)
--------------------------
Remove Redis and Celery Emitters (#335)
Make tracker namespace mandatory (#337) 
Track function to return event_id (#338) 
Fix namespace assignment in Snowplow API (#341) 
Refactor track_xxx() methods (#343) 
Update payload builder to combine event subjects (#347) 

Version 0.15.0 (2023-04-19)
---------------------------
Use Requests Session for sending eventss (#221)
Add Redis example app (#322)

Version 0.14.0 (2023-03-21)
---------------------------
Adds deprecation warnings for V1 changes (#315)
Update GH actions to use Node16 (#317)
Adds event store parameter to Snowplow interface (#320)
Adds missing parameters to async emitter (#323)

Version 0.13.0 (2023-01-24)
---------------------------
Adds Snowplow Interface (#295)
Adds retry for failed events (#296)
Adds customisable retry codes (#297)
Adds EventStore with max limit (#309)
Adds Snowplow Example App (#302)
Fix Collector URL with trailing '/' (#300)
Rename unstruct_event to self_describing_event (#298)
Upgrade `set-output` in cd (#294)

Version 0.12.0 (2022-11-03)
---------------------------
Adds Domain Session ID and Domain Session Index to Subject class (#282) (Thanks to @cpnat)
Add support for Python 3.11 (#286)
Change default protocol to HTTPS in the Emitter (#14)
Change default method to POST in the Emitter (#289)
Update Docker base image (#283) (Thanks to @cpnat)

Version 0.11.0 (2022-10-06)
---------------------------
Update README file (#264) 
Update CONTRIBUTING.md file (#265) 
Add API doc generation in CI (#277) 
Add Demo App (#279) 
Fix failing build in Dockerfile (#266) 
Bump Copyright to 2022 (#271) 
Update README.rst to README.md (#270)

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
