Defining an event schema#

All Jupyter Events schemas are valid JSON schema and can be written in valid YAML or JSON. More specifically, these schemas are validated against Jupyter Event’s “meta”-JSON schema, here.

A common pattern is to define these schemas in separate files and register them with an EventLogger using the .register_event_schema(...) method:

schema_filepath = Path("/path/to/schema.yaml")

logger = EventLogger()
logger.register_event_schema(schema_file)

Note that a file path passed to register_event_schema() must be a Pathlib object. This is required for register_event_schema() to distinguish between file paths and schemas specified in a Python string.

At a minimum, a valid Jupyter event schema requires the following keys:

  • $id : a URI to identify (and possibly locate) the schema.

  • version : the schema version.

  • properties : attributes of the event being emitted.

Beyond these required items, any valid JSON should be possible. Here is a simple example of a valid JSON schema for an event.

$id: https://event.jupyter.org/example-event
version: 1
title: My Event
description: |
  Some information about my event
type: object
properties:
  thing:
    title: Thing
    description: A random thing.
  user:
    title: User name
    description: Name of user who initiated event
required:
  - thing
  - user

Checking if a schema is valid#

When authoring a schema, how do you check if you schema is following the expected form? Jupyter Events offers a simple command line tool to validate your schema against its Jupyter Events metaschema.

First, install the CLI:

pip install "jupyter_events[cli]"

Then, run the CLI against your schema:

jupyter-events validate path/to/my_schema.json

The output will look like this, if it passes:

──────────────────────────────────── Validating the following schema ────────────────────────────────────

    {
      "$id": "http://event.jupyter.org/test",
      "version": 1,
      "title": "Simple Test Schema",
      "description": "A simple schema for testing\n",
      "type": "object",
      "properties": {
        "prop": {
          "title": "Test Property",
          "description": "Test property.",
          "type": "string"
        }
      }
    }

──────────────────────────────────────────────── Results ────────────────────────────────────────────────

✔ Nice work! This schema is valid.

or this if fails:

──────────────────────────────────── Validating the following schema ────────────────────────────────────

    {
      "$id": "http://event.jupyter.org/test",
      "version": 1,
      "title": "Simple Test Schema",
      "description": "A simple schema for testing\n",
      "type": "object",
      "properties": {
        "__badName": {
          "title": "Test Property",
          "description": "Test property.",
          "type": "string"
        }
      }
    }

──────────────────────────────────────────────── Results ────────────────────────────────────────────────
❌ The schema failed to validate.

We found the following error with your schema:

    '__badName' is an invalid property name because it starts with `__`. Properties starting with
    'dunder' are reserved as special meta-fields for Jupyter Events to use.