# Run

## class nominal.core.Run(rid, name, description, properties, labels, links, start, end, run_number, assets, created_at, is_archived)

Bases: `HasRid`, `RefreshableGrpcMixin`[`Run`], `_DatasetScopeIngestMixin`

A view of asset and dataset data within a time interval.

### rid: str

### name: str

### description: str

### properties: NominalProperties

### labels: Sequence[str]

### links: Sequence[LinkDict]

### start: IntegralNanosecondsUTC

### end: IntegralNanosecondsUTC | None

### run_number: int

### assets: Sequence[str]

### created_at: IntegralNanosecondsUTC

### is_archived: bool

### property nominal_url: str

Returns a link to the page for this Run in the Nominal app

### add_ardupilot_dataflash(data_scope_name, path, tags=None)

Add a Dataflash file to the dataset selected by `data_scope_name`.

This method behaves like [`nominal.core.Dataset.add_ardupilot_dataflash`](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset.add_ardupilot_dataflash "nominal.core.Dataset.add_ardupilot_dataflash"), except that the data scope’s
required tags are merged into `tags` before ingest (with user-provided tags taking precedence on key
collisions).

For file expectations and return value details, see
[`nominal.core.Dataset.add_ardupilot_dataflash`](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset.add_ardupilot_dataflash "nominal.core.Dataset.add_ardupilot_dataflash").

Raises:
:   [**NominalNotFoundError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalNotFoundError.md#nominal.exceptions.NominalNotFoundError "nominal.exceptions.NominalNotFoundError") – If no readable dataset has this data scope name.

Return type:
:   [*DatasetFile*](https://dev.nominal.io/python/ref/generated/nominal.core.DatasetFile.md#nominal.core.DatasetFile "nominal.core.dataset_file.DatasetFile")

### add_attachments(attachments)

Add attachments that have already been uploaded to this run.

`attachments` can be [`Attachment`](https://dev.nominal.io/python/ref/generated/nominal.core.Attachment.md#nominal.core.Attachment "nominal.core.Attachment") instances, or attachment RIDs.

Raises:
:   [**NominalError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalError.md#nominal.exceptions.NominalError "nominal.exceptions.NominalError") – If adding the attachments fails.

### add_avro_stream(data_scope_name, path, *, timestamp_type=None, tags=None)

Upload an avro stream file to the dataset selected by `data_scope_name`.

This method behaves like [`nominal.core.Dataset.add_avro_stream`](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset.add_avro_stream "nominal.core.Dataset.add_avro_stream"), except that the data scope’s required
tags are merged into `tags` before ingest (with user-provided tags taking precedence on key collisions).
Tags in the avro records take precedence over both, so a scope tag whose key a record already sets is
not applied to that record’s data.

For schema requirements, argument semantics, and return value details, see
[`nominal.core.Dataset.add_avro_stream`](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset.add_avro_stream "nominal.core.Dataset.add_avro_stream").

Raises:
:   [**NominalNotFoundError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalNotFoundError.md#nominal.exceptions.NominalNotFoundError "nominal.exceptions.NominalNotFoundError") – If no readable dataset has this data scope name.

Return type:
:   [*DatasetFile*](https://dev.nominal.io/python/ref/generated/nominal.core.DatasetFile.md#nominal.core.DatasetFile "nominal.core.dataset_file.DatasetFile")

### add_comment(content)

Post a markdown comment to this run’s discussion.

Parameters:
:   **content** ([*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)"))

    Markdown content for the comment.

Returns:
:   The created [`Comment`](https://dev.nominal.io/python/ref/generated/nominal.core.Comment.md#nominal.core.Comment "nominal.core.Comment").

Raises:
:   [**NominalError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalError.md#nominal.exceptions.NominalError "nominal.exceptions.NominalError") – If the comments service request fails.

Return type:
:   [*Comment*](https://dev.nominal.io/python/ref/generated/nominal.core.Comment.md#nominal.core.Comment "nominal.core.comment.Comment")

### add_containerized(data_scope_name, extractor, sources, *, arguments=None, tags=None, timestamp_column=None, timestamp_type=None)

Add data from proprietary formats using a pre-registered custom extractor.

This method behaves like [`nominal.core.Dataset.add_containerized`](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset.add_containerized "nominal.core.Dataset.add_containerized"), except that the data scope’s required
tags are merged into `tags` before ingest (with user-provided tags taking precedence on key collisions).

Pass both `timestamp_column` and `timestamp_type`, or neither; this wrapper enforces that before
delegating.

For extractor inputs, tagging semantics, timestamp metadata behavior, and return value details, see
[`nominal.core.Dataset.add_containerized`](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset.add_containerized "nominal.core.Dataset.add_containerized").

Raises:
:   - [**NominalNotFoundError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalNotFoundError.md#nominal.exceptions.NominalNotFoundError "nominal.exceptions.NominalNotFoundError") – If no readable dataset has this data scope name.
    - [**ValueError**](https://docs.python.org/3/builtins/exceptions.html#ValueError "(in Python v3.15)") – If only one of `timestamp_column` and `timestamp_type` is given.

Return type:
:   [*IngestionJob*](https://dev.nominal.io/python/ref/generated/nominal.core.IngestionJob.md#nominal.core.IngestionJob "nominal.core.ingestion_job.IngestionJob")

### add_dataset(ref_name, dataset, *, series_tags=None, offset=None)

Add a dataset to this run.

Datasets map “ref names” (their name within the run) to a Dataset (or dataset rid). The same type of datasets
should use the same ref name across runs, since checklists and templates use ref names to reference datasets.

Parameters:
:   - **ref_name** ([*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)"))

      Logical name for the data scope within the run
    - **dataset** ([*Dataset*](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset "nominal.core.dataset.Dataset") *|* [*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)"))

      Dataset to add to the run
    - **series_tags** ([*Mapping*](https://docs.python.org/3/library/typing.html#typing.Mapping "(in Python v3.15)")*[*[*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")*,* [*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")*]* *|* *None*)

      Key-value tags to pre-filter the dataset with before adding to the run.
    - **offset** ([*timedelta*](https://docs.python.org/3/library/datetime.html#datetime.timedelta "(in Python v3.15)") *|* [*int*](https://docs.python.org/3/builtins/functions.html#int "(in Python v3.15)") *|* *None*)

      Add the dataset to the run with a pre-baked offset

Raises:
:   [**NominalError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalError.md#nominal.exceptions.NominalError "nominal.exceptions.NominalError") – If adding the data source fails.

### add_datasets(datasets, *, series_tags=None, offset=None)

Add multiple datasets to this run.

Datasets map “ref names” (their name within the run) to a Dataset (or dataset rid). The same type of datasets
should use the same ref name across runs, since checklists and templates use ref names to reference datasets.

Parameters:
:   - **datasets** ([*Mapping*](https://docs.python.org/3/library/typing.html#typing.Mapping "(in Python v3.15)")*[*[*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")*,* [*Dataset*](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset "nominal.core.dataset.Dataset") *|* [*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")*]*)

      Mapping of logical names to datasets to add to the run
    - **series_tags** ([*Mapping*](https://docs.python.org/3/library/typing.html#typing.Mapping "(in Python v3.15)")*[*[*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")*,* [*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")*]* *|* *None*)

      Key-value tags to pre-filter the datasets with before adding to the run.
    - **offset** ([*timedelta*](https://docs.python.org/3/library/datetime.html#datetime.timedelta "(in Python v3.15)") *|* [*int*](https://docs.python.org/3/builtins/functions.html#int "(in Python v3.15)") *|* *None*)

      Add the datasets to the run with a pre-baked offset

Raises:
:   [**NominalError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalError.md#nominal.exceptions.NominalError "nominal.exceptions.NominalError") – If adding the data sources fails.

### add_from_io(data_scope_name, data_stream, file_type, *, timestamp_column, timestamp_type, file_name=None, tag_columns=None, tags=None)

Append to the dataset selected by `data_scope_name` from a file-like object.

This method behaves like [`nominal.core.Dataset.add_from_io`](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset.add_from_io "nominal.core.Dataset.add_from_io"), except that the data scope’s required tags
are merged into `tags` before ingest (with user-provided tags taking precedence on key collisions).

For stream requirements, supported file types, argument semantics, and return value details, see
[`nominal.core.Dataset.add_from_io`](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset.add_from_io "nominal.core.Dataset.add_from_io").

Raises:
:   [**NominalNotFoundError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalNotFoundError.md#nominal.exceptions.NominalNotFoundError "nominal.exceptions.NominalNotFoundError") – If no readable dataset has this data scope name.

Return type:
:   [*DatasetFile*](https://dev.nominal.io/python/ref/generated/nominal.core.DatasetFile.md#nominal.core.DatasetFile "nominal.core.dataset_file.DatasetFile")

### add_journal_json(data_scope_name, path, *, channel=None, timestamp_column=None, timestamp_type=None)

Add a journald json file to the dataset selected by `data_scope_name`.

This method behaves like [`nominal.core.Dataset.add_journal_json`](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset.add_journal_json "nominal.core.Dataset.add_journal_json"), with one important difference: the
journal json ingest request has no field for tags, so a scope’s required tags cannot be applied to the
ingested logs. If the selected scope requires tags, this method raises [`RuntimeError`](https://docs.python.org/3/builtins/exceptions.html#RuntimeError "(in Python v3.15)") rather than
ingesting logs that would be missing them. The file can still be ingested on the dataset directly, if
its own contents already carry what the scope needs.

Pass both `timestamp_column` and `timestamp_type`, or neither; this wrapper enforces that before
delegating.

For file expectations, timestamp argument semantics, and return value details, see
[`nominal.core.Dataset.add_journal_json`](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset.add_journal_json "nominal.core.Dataset.add_journal_json").

Raises:
:   - [**NominalNotFoundError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalNotFoundError.md#nominal.exceptions.NominalNotFoundError "nominal.exceptions.NominalNotFoundError") – If no readable dataset has this data scope name.
    - [**RuntimeError**](https://docs.python.org/3/builtins/exceptions.html#RuntimeError "(in Python v3.15)") – If the data scope requires series tags.
    - [**ValueError**](https://docs.python.org/3/builtins/exceptions.html#ValueError "(in Python v3.15)") – If only one of `timestamp_column` and `timestamp_type` is given.

Return type:
:   [*DatasetFile*](https://dev.nominal.io/python/ref/generated/nominal.core.DatasetFile.md#nominal.core.DatasetFile "nominal.core.dataset_file.DatasetFile")

### add_mcap(data_scope_name, path, *, include_topics=None, exclude_topics=None, tags=None, ignore_invalid_topics=None)

Add an MCAP file to the dataset selected by `data_scope_name`.

This method behaves like [`nominal.core.Dataset.add_mcap`](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset.add_mcap "nominal.core.Dataset.add_mcap"), except that the data scope’s required
tags are merged into `tags` before ingest (with user-provided tags taking precedence on key collisions).

For topic-filtering semantics and return value details, see
[`nominal.core.Dataset.add_mcap`](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset.add_mcap "nominal.core.Dataset.add_mcap").

Raises:
:   [**NominalNotFoundError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalNotFoundError.md#nominal.exceptions.NominalNotFoundError "nominal.exceptions.NominalNotFoundError") – If no readable dataset has this data scope name.

Return type:
:   [*DatasetFile*](https://dev.nominal.io/python/ref/generated/nominal.core.DatasetFile.md#nominal.core.DatasetFile "nominal.core.dataset_file.DatasetFile")

### add_tabular_data(data_scope_name, path, *, timestamp_column, timestamp_type, tag_columns=None, tags=None)

Append tabular data on-disk to the dataset selected by `data_scope_name`.

This method behaves like [`nominal.core.Dataset.add_tabular_data`](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset.add_tabular_data "nominal.core.Dataset.add_tabular_data"), except that the data scope’s required
tags are merged into `tags` before ingest (with user-provided tags taking precedence on key collisions).

For supported file types, argument semantics, and return value details, see
[`nominal.core.Dataset.add_tabular_data`](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset.add_tabular_data "nominal.core.Dataset.add_tabular_data").

Raises:
:   [**NominalNotFoundError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalNotFoundError.md#nominal.exceptions.NominalNotFoundError "nominal.exceptions.NominalNotFoundError") – If no readable dataset has this data scope name.

Return type:
:   [*DatasetFile*](https://dev.nominal.io/python/ref/generated/nominal.core.DatasetFile.md#nominal.core.DatasetFile "nominal.core.dataset_file.DatasetFile")

### add_video(ref_name, video)

Add a video to a run via video object or RID.

Raises:
:   [**NominalError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalError.md#nominal.exceptions.NominalError "nominal.exceptions.NominalError") – If adding the data source fails.

### archive()

Archive this run.
Archived runs are not deleted, but are hidden from the UI.

> **Note**
>
> This does not update the instance in place; call [`refresh()`](https://dev.nominal.io/python/ref/generated/nominal.core.Run.md#nominal.core.Run.refresh "nominal.core.Run.refresh") to see the change reflected.

Raises:
:   [**NominalError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalError.md#nominal.exceptions.NominalError "nominal.exceptions.NominalError") – If the archive request fails.

### create_event(name, type, start, duration=0, *, description=None, properties=None, labels=())

Create an event associated with all associated assets of this run at a given point in time.

Parameters:
:   - **name** ([*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)"))

      Name of the event
    - **type** ([*EventType*](https://dev.nominal.io/python/ref/generated/nominal.core.EventType.md#nominal.core.EventType "nominal.core._event_types.EventType"))

      Verbosity level of the event.
    - **start** ([*datetime*](https://docs.python.org/3/library/datetime.html#datetime.datetime "(in Python v3.15)") *|* [*int*](https://docs.python.org/3/builtins/functions.html#int "(in Python v3.15)"))

      Starting timestamp of the event
    - **duration** ([*timedelta*](https://docs.python.org/3/library/datetime.html#datetime.timedelta "(in Python v3.15)") *|* [*int*](https://docs.python.org/3/builtins/functions.html#int "(in Python v3.15)"))

      Duration of the event, or 0 for an event without duration.
    - **description** ([*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)") *|* *None*)

      Optionally, a human readable description of the event to create
    - **properties** ([*Mapping*](https://docs.python.org/3/library/typing.html#typing.Mapping "(in Python v3.15)")*[*[*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")*,* [*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)") *|* [*float*](https://docs.python.org/3/builtins/functions.html#float "(in Python v3.15)")*]* *|* *None*)

      String or numeric properties for the created event.
      Integers are stored as floats.
    - **labels** ([*Iterable*](https://docs.python.org/3/library/typing.html#typing.Iterable "(in Python v3.15)")*[*[*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")*]*)

      Sequence of labels to use on the created event.

Returns:
:   The created event that is associated with all of the assets associated with this run..

Raises:
:   [**TypeError**](https://docs.python.org/3/builtins/exceptions.html#TypeError "(in Python v3.15)") – If a property value is a boolean or is not a string, integer, or float.

Return type:
:   [*Event*](https://dev.nominal.io/python/ref/generated/nominal.core.Event.md#nominal.core.Event "nominal.core.event.Event")

### get_dataset(ref_name)

Get a dataset for this run by its ref name.

Parameters:
:   **ref_name** ([*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)"))

    Name of the run datasource reference to resolve.

Returns:
:   Dataset associated with the ref name.

Raises:
:   [**NominalNotFoundError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalNotFoundError.md#nominal.exceptions.NominalNotFoundError "nominal.exceptions.NominalNotFoundError") – If no readable dataset has this ref name.

Return type:
:   [*Dataset*](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset "nominal.core.dataset.Dataset")

### get_video(ref_name)

Get a video for this run by its ref name.

Parameters:
:   **ref_name** ([*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)"))

    Name of the run datasource reference to resolve.

Returns:
:   Video associated with the ref name.

Raises:
:   [**NominalNotFoundError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalNotFoundError.md#nominal.exceptions.NominalNotFoundError "nominal.exceptions.NominalNotFoundError") – If no readable video has this ref name.

Return type:
:   [*Video*](https://dev.nominal.io/python/ref/generated/nominal.core.Video.md#nominal.core.Video "nominal.core.video.Video")

### list_assets()

List assets associated with this run.

Return type:
:   *Sequence*[’Asset’]

### list_attachments()

List a sequence of Attachments associated with this Run.

Attachments that the caller cannot access are left out.

Return type:
:   [*Sequence*](https://docs.python.org/3/library/typing.html#typing.Sequence "(in Python v3.15)")[[*Attachment*](https://dev.nominal.io/python/ref/generated/nominal.core.Attachment.md#nominal.core.Attachment "nominal.core.attachment.Attachment")]

### list_datasets()

List the datasets associated with this run.

Returns:
:   (ref_name, dataset) pairs. Refs whose dataset is missing or not readable are left out.

Return type:
:   [*Sequence*](https://docs.python.org/3/library/typing.html#typing.Sequence "(in Python v3.15)")[[*tuple*](https://docs.python.org/3/builtins/stdtypes.html#tuple "(in Python v3.15)")[[*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)"), [*Dataset*](https://dev.nominal.io/python/ref/generated/nominal.core.Dataset.md#nominal.core.Dataset "nominal.core.dataset.Dataset")]]

### list_videos()

List the videos associated with this run.

Returns:
:   (ref_name, video) pairs. Refs whose video is missing or not readable are left out.

Return type:
:   [*Sequence*](https://docs.python.org/3/library/typing.html#typing.Sequence "(in Python v3.15)")[[*tuple*](https://docs.python.org/3/builtins/stdtypes.html#tuple "(in Python v3.15)")[[*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)"), [*Video*](https://dev.nominal.io/python/ref/generated/nominal.core.Video.md#nominal.core.Video "nominal.core.video.Video")]]

### refresh()

Return type:
:   [*Self*](https://docs.python.org/3/library/typing.html#typing.Self "(in Python v3.15)")

### remove_attachments(attachments)

Remove attachments from this run.
Does not remove the attachments from Nominal.

`attachments` can be [`Attachment`](https://dev.nominal.io/python/ref/generated/nominal.core.Attachment.md#nominal.core.Attachment "nominal.core.Attachment") instances, or attachment RIDs.

Raises:
:   [**NominalError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalError.md#nominal.exceptions.NominalError "nominal.exceptions.NominalError") – If removing the attachments fails.

### remove_data_sources(*, ref_names=None, data_sources=None)

Remove data sources from this run.

The list data_sources can contain Dataset or Video instances, or rids as string.
A spatial can be removed by passing its rid.

Raises:
:   [**NominalError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalError.md#nominal.exceptions.NominalError "nominal.exceptions.NominalError") – If retrieving or updating the run’s data sources fails.

### search_events(*, search_text=None, after=None, before=None, labels=None, properties=None, created_by_rid=None, workbook_rid=None, data_review_rid=None, assignee_rid=None, event_type=None, priority=None, origin_types=None, archive_status=ArchiveStatusFilter.NOT_ARCHIVED)

Search for events associated with any of the assets of this run.

The run’s assets are matched as a union: an event is included if it is associated with at
least one of the run’s assets. The remaining filters are ANDed together with that asset
filter and with each other.

Parameters:
:   - **search_text** ([*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)") *|* *None*)

      Searches for a string in the event’s metadata.
    - **after** ([*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)") *|* [*datetime*](https://docs.python.org/3/library/datetime.html#datetime.datetime "(in Python v3.15)") *|* [*int*](https://docs.python.org/3/builtins/functions.html#int "(in Python v3.15)") *|* *None*)

      Filters to end times after this time, exclusive.
    - **before** ([*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)") *|* [*datetime*](https://docs.python.org/3/library/datetime.html#datetime.datetime "(in Python v3.15)") *|* [*int*](https://docs.python.org/3/builtins/functions.html#int "(in Python v3.15)") *|* *None*)

      Filters to start times before this time, exclusive.
    - **labels** ([*Iterable*](https://docs.python.org/3/library/typing.html#typing.Iterable "(in Python v3.15)")*[*[*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")*]* *|* *None*)

      A list of labels that must ALL be present on an event to be included.
    - **properties** ([*Mapping*](https://docs.python.org/3/library/typing.html#typing.Mapping "(in Python v3.15)")*[*[*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")*,* [*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)") *|* [*float*](https://docs.python.org/3/builtins/functions.html#float "(in Python v3.15)")*]* *|* *None*)

      Property equalities that must ALL match. String values match string properties;
      numeric values match numeric properties, without coercing strings to numbers.
      Integer values are converted to floats.
    - **created_by_rid** ([*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)") *|* *None*)

      Rid of the author that must be present on an event to be included.
    - **workbook_rid** ([*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)") *|* *None*)

      Search for events on the given workbook.
    - **data_review_rid** ([*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)") *|* *None*)

      Search for events from the given data review.
    - **assignee_rid** ([*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)") *|* *None*)

      Search for events with the given assignee.
    - **event_type** ([*EventType*](https://dev.nominal.io/python/ref/generated/nominal.core.EventType.md#nominal.core.EventType "nominal.core._event_types.EventType") *|* *None*)

      Search for events of the given type.
    - **priority** ([*Priority*](https://dev.nominal.io/python/ref/generated/nominal.core.Priority.md#nominal.core.Priority "nominal.core._checklist_types.Priority") *|* *None*)

      Filter events by disposition priority. None leaves priority unrestricted.
    - **origin_types** ([*Iterable*](https://docs.python.org/3/library/typing.html#typing.Iterable "(in Python v3.15)")*[*[*SearchEventOriginType*](https://dev.nominal.io/python/ref/generated/nominal.core.SearchEventOriginType.md#nominal.core.SearchEventOriginType "nominal.core._event_types.SearchEventOriginType")*]* *|* *None*)

      Search for events created by any of the given origin types.
    - **archive_status** ([*ArchiveStatusFilter*](https://dev.nominal.io/python/ref/generated/nominal.core.ArchiveStatusFilter.md#nominal.core.ArchiveStatusFilter "nominal.core._utils.query_tools.ArchiveStatusFilter"))

      Filter by archive status. Defaults to NOT_ARCHIVED.

Returns:
:   Events associated with any of this run’s assets that match all of the provided filters.
    Returns an empty sequence if the run has no associated assets.

Raises:
:   [**TypeError**](https://docs.python.org/3/builtins/exceptions.html#TypeError "(in Python v3.15)") – If a property value is a boolean or is not a string, integer, or float.

Return type:
:   [*Sequence*](https://docs.python.org/3/library/typing.html#typing.Sequence "(in Python v3.15)")[[*Event*](https://dev.nominal.io/python/ref/generated/nominal.core.Event.md#nominal.core.Event "nominal.core.event.Event")]

### search_workbooks(*, exact_match=None, search_text=None, labels=None, properties=None, asset_rid=None, created_by_rid=None, include_drafts=False, archive_status=ArchiveStatusFilter.NOT_ARCHIVED)

Search for workbooks associated with this Run. See nominal.core.NominalClient.search_workbooks for details

Return type:
:   [*Sequence*](https://docs.python.org/3/library/typing.html#typing.Sequence "(in Python v3.15)")[[*Workbook*](https://dev.nominal.io/python/ref/generated/nominal.core.Workbook.md#nominal.core.Workbook "nominal.core.workbook.Workbook")]

### unarchive()

Unarchive this run, allowing it to appear on the UI.

> **Note**
>
> This does not update the instance in place; call [`refresh()`](https://dev.nominal.io/python/ref/generated/nominal.core.Run.md#nominal.core.Run.refresh "nominal.core.Run.refresh") to see the change reflected.

Raises:
:   [**NominalError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalError.md#nominal.exceptions.NominalError "nominal.exceptions.NominalError") – If the unarchive request fails.

### update(*, name=None, start=None, end=None, description=None, properties=None, labels=None, links=None, assets=None)

Replace run metadata.
Updates the current instance, and returns it.
Only the metadata passed in will be replaced, the rest will remain untouched.

Links can be URLs, tuples of (URL, name), or dicts of {url=URL, title=name}.

Parameters:
:   - **name** ([*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)") *|* *None*)

      Replacement name.
    - **start** (*datetime* *|* [*IntegralNanosecondsUTC*](https://dev.nominal.io/python/ref/ts.md#nominal.ts.IntegralNanosecondsUTC "nominal.ts.IntegralNanosecondsUTC") *|* *None*)

      Replacement start timestamp.
    - **end** (*datetime* *|* [*IntegralNanosecondsUTC*](https://dev.nominal.io/python/ref/ts.md#nominal.ts.IntegralNanosecondsUTC "nominal.ts.IntegralNanosecondsUTC") *|* *None*)

      Replacement end timestamp.
    - **description** ([*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)") *|* *None*)

      Replacement description.
    - **properties** ([*NominalProperties*](https://dev.nominal.io/python/ref/core/shared-types.md#nominal.core.NominalProperties "nominal.core.NominalProperties") *|* *None*)

      String or numeric properties. Integers are stored as floats.
      None leaves properties unchanged; an empty mapping clears them.
    - **labels** (*Sequence**[*[*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")*]* *|* *None*)

      Replacement labels.
    - **links** (*Sequence**[*[*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)") *|* *Link* *|* [*LinkDict*](https://dev.nominal.io/python/ref/generated/nominal.core.LinkDict.md#nominal.core.LinkDict "nominal.core.LinkDict")*]* *|* *None*)

      Replacement links.
    - **assets** (*Sequence**[*[*Asset*](https://dev.nominal.io/python/ref/generated/nominal.core.Asset.md#nominal.core.Asset "nominal.core.Asset") *|* [*str*](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")*]* *|* *None*)

      Replacement assets or asset RIDs.

Return type:
:   *Self*

> **Note**
>
> This replaces the metadata rather than appending it. To append to labels or properties, merge them before
> calling this method. E.g.:
>
> ```python
> new_labels = ["new-label-a", "new-label-b"]
> for old_label in run.labels:
>     new_labels.append(old_label)
> run = run.update(labels=new_labels)
> ```

> **Note**
>
> When [`assets`](https://dev.nominal.io/python/ref/generated/nominal.core.Run.md#nominal.core.Run.assets "nominal.core.Run.assets") is provided it fully replaces the run’s asset list. To append an asset, merge with
> the existing list first:
>
> ```python
> run = run.update(assets=[*run.assets, new_asset])
> ```

Raises:
:   - [**TypeError**](https://docs.python.org/3/builtins/exceptions.html#TypeError "(in Python v3.15)") – If a property value is a boolean or is not a string, integer, or float.
    - [**NominalError**](https://dev.nominal.io/python/ref/generated/nominal.exceptions.NominalError.md#nominal.exceptions.NominalError "nominal.exceptions.NominalError") – If the update request fails.

Return type:
:   *Self*
