Collecting data with Trackers and Webhooks

  1. Home
  2. Docs
  3. Collecting data with Trackers and Webhooks
  4. Trackers – collecting data from your own applications
  5. Python Tracker
  6. Contracts


Python is a dynamically typed language, but each of our methods expects its arguments to be of specific types and value ranges and validates that to be the case. These checks are done using the PyContracts library.

If the validation check fails, then a runtime error is thrown:

s = Subject() t.set_color_depth("walrus")
Code language: JavaScript (javascript)
contracts.interface.ContractNotRespected: Breach for argument 'depth' to Subject:set_color_depth(). Expected type 'int', got 'str'. checking: Int for value: Instance of str: 'walrus' checking: $(Int) for value: Instance of str: 'walrus' checking: int for value: Instance of str: 'walrus' Variables bound in inner context: - self: Instance of Tracker: <snowplow_tracker.tracker.Tracker object...> [clip]
Code language: JavaScript (javascript)

If your value is of the wrong type, convert it before passing it into the track...() method, for example:

level_idx = 42 t.track_screen_view("Game Level", str(level_idx))
Code language: JavaScript (javascript)

You can turn off type checking to improve performance like this:

from snowplow_tracker import disable_contracts disable_contracts()
Code language: JavaScript (javascript)

If you’d like to learn more about Snowplow Insights you can book a demo with our team, or if you’d prefer, you can try Snowplow technology for yourself quickly and easily.