NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #892 most downloaded on PyPI
Snowplow event tracker for Python. Add analytics to your Python and Django apps, webapps and games
Last release 2 years ago
no release in 18 months
Release timing varies
gaps range from 4 weeks to 10 months
Nearly every release is documented
notes for 27 of 28 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
33 releases · first in 2014
Bump Ubuntu Version in GH Actions (#375) Avoid installing types-requests at run-time (#370) (Thanks to @edgarrmondragon)
Bump Ubuntu Version in GH Actions (#375) Avoid installing types-requests at run-time (#370) (Thanks to @edgarrmondragon)
Test with Python 3.13 ( #365 ) (Thanks to Edgar Ramírez Mondragón (@edgarrmondragon) )
Under the hood
One column per quarter.
Test with Python 3.13 (#365) (Thanks to @edgarrmondragon) Shorten automatic github release title (#352)
Fix docs action (close #367) Update on_success docstring (close #358) Add py.typed to package (close #360) (Thanks to @edgarrmondragon) Update typing
Fix docs action (close #367)
Update on_success docstring (close #358)
Add py.typed to package (close #360) (Thanks to @edgarrmondragon)
Update typing
Fix PagePing, PageView, and StructuredEvent property getters (close #361)
Add Python 3.12 to CI tests (#356) (Thanks to @edgarrmondragon)
Add Python 3.12 to CI tests (#356) (Thanks to @edgarrmondragon)
We are pleased to announce the release of the Snowplow Python Tracker v1.0.1. This release fixes a small bug in the self describing event timestamp as
We are pleased to announce the release of the Snowplow Python Tracker v1.0.1. This release fixes a small bug in the self describing event timestamp assignment.
CHANGELOG
Fix tstamp parameter in track_self_describing_event (#350) (Thanks to @andehen)
It contains a number of new features and breaking changes including a new Event class and improved tracking API.
We are pleased to announce the release of the Snowplow Python Tracker v1.
This release brings the Snowplow Python tracker out of "Early Release" and into "Maintained" status. It contains a number of new features and breaking changes including a new Event class and improved tracking API.
CHANGELOG
Features
Adds new tracking API and Event classes (#343)
Adds ability to combine tracker and event subjects (#347)
Under the hood
Makes tracker Namespace a required variable (#337)
Track function returns Event Id (#338)
Removes Redis and Celery Emitters (#335)
Bug Fixes
Fix namespace assignment in Snowplow API (#341)
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)
We are pleased to announce the release of the Snowplow Python Tracker v0.15.0.
We are pleased to announce the release of the Snowplow Python Tracker v0.15.0.
This release adds the option to parse a Session object to the emitter allowing users to pool connections increasing efficiency of the tracker under heavy usage. It also adds an example Redis app in preparation for the removal of the Redis emitter in V1.
CHANGELOG
New Features:
Use Requests session for sending events (#221)
Add Redis example app (#322 )
Use Requests Session for sending eventss (#221) Add Redis example app (#322)
It also updates the Node version used in the Github Actions and adds deprecation warnings for the upcoming V1 release.
We are pleased to announce the release of the Snowplow Python Tracker v0.14.0.
This is a minor release that fixes some minor bugs in the Snowplow interface and async emitter. It also updates the Node version used in the Github Actions and adds deprecation warnings for the upcoming V1 release.
Bug Fixes:
Adds event store parameter to Snowplow interface (#320)
Adds missing parameters to async emitter (#323)
Under the hood:
Update GH actions to use Node16 (#317)
Adds deprecation warnings for V1 changes (#315)
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)
We are pleased to announce the release of the Snowplow Python Tracker v0.13.0.
We are pleased to announce the release of the Snowplow Python Tracker v0.13.0.
This release contains a number of new features including the introduction of the Snowplow API, built in retry mechanism for failed events and the EventStore.
New Features:
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)
Under the hood:
Fix Collector URL with trailing '/' (#300)
Rename unstruct_event to self_describing_event (#298)
Upgrade set-output in cd (#294)
This release contains breaking changes with updates to the default method and protocol settings in the emitter. It also adds additional properties to…
We are pleased to announce the release of the Snowplow Python Tracker v0.12.0.
This release contains breaking changes with updates to the default method and protocol settings in the emitter. It also adds additional properties to the subject class and adds support for Python 3.11.
New features:
Adds Domain Session ID and Domain Session Index to Subject class (#282) (Thanks to Colin Nattrass (@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)
Under the hood:
Update Docker base image (#283) (Thanks to Colin Nattrass (@cpnat))
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 (
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)
Add Python 3.10 support (#254) Add configurable timeout for HTTP requests
Add Python 3.10 support (#254) Add configurable timeout for HTTP requests (#258)
Update python versions in run-tests script (#256) Fix pycontracts incompatibility with pyparsing v3
Update python versions in run-tests script (#256) Fix pycontracts incompatibility with pyparsing v3 (#255)
Nothing published for this version
…of Content-Type header (#152) Replace deprecating syntax (#243) Allow celery and redis to be optional dependencies (#232) Update gevent to the last ma…
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)
Nothing published for this version
Fix incompatible versions of greenlet and gevent (closes #236) Update build to Active Python Releases (closes #237) Add Snyk monitoring (closes #238)
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)
Fix test_bytelimit test (#227) Initialize Celery in CeleryEmitter (#226) Allow non ascii characters to be encoded using Base64 (#194) Allow empty stri
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)
Nothing published for this version
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 a
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)
Nothing published for this version
Nothing published for this version
Nothing published for this version
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
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)
Corrected contract typo in the docstring of AsyncEmitter's constructor (#147) Ensured that Travis uses latest versions of dependencies (#149) Fixed 0.
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)
Ensured synchronous flush always waits for the task queue to empty
Ensured synchronous flush always waits for the task queue to empty (#142)
Added SelfDescribingJson class (#140) Added support for Python 2 unicode strings using six library, thanks @mthomas! (#138) Started handling RequestEx
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)
Improved logging (#109) Removed unnecessary whitespace from POST requests (#110) Started sending payload_data version 1-0-2 (#113) Added set_domain_us
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)
Converted payload values to strings for POST requests (#100) Set content type to "application/json; charset=utf-8" for POST requests (#99) Changed col
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)
Migrated unstructured events to self-describing JSON (#87) Migrated custom contexts to self-describing JSON (#88) Gave separate events within an ecomm
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)
Added custom context vendor configuration option (#67) Changed the return value of the tracking methods to a tuple (#65) Added coveralls code coverage
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)
Fixed Pycontracts dependency (#63) Made unrequired tracker method arguments optional (#40) Linked the Technical Docs and Setup Guide images to the app
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)
Initial release
Initial release
Your coding agent can read these notes before it upgrades. Set up the MCP server →