---
title: __init__
sidebarTitle: __init__
---

# `prefect.server.events.storage`

## Functions

### `to_page_token` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/events/storage/__init__.py#L19" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
to_page_token(filter: 'EventFilter', count: int, page_size: int, current_offset: int) -> Optional[str]
```

### `from_page_token` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/events/storage/__init__.py#L37" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
from_page_token(page_token: str) -> Tuple['EventFilter', int, int, int]
```

### `process_time_based_counts` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/events/storage/__init__.py#L56" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

```python
process_time_based_counts(filter: 'EventFilter', time_unit: TimeUnit, time_interval: float, counts: List[EventCount]) -> List[EventCount]
```


Common logic for processing time-based counts across different event backends.

When doing time-based counting we want to do two things:

1. Backfill any missing intervals with 0 counts.
2. Update the start/end times that are emitted to match the beginning and
end of the intervals rather than having them reflect the true max/min
occurred time of the events themselves.


## Classes

### `InvalidTokenError` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/events/storage/__init__.py#L15" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>

### `QueryRangeTooLarge` <sup><a href="https://github.com/PrefectHQ/prefect/blob/main/src/prefect/server/events/storage/__init__.py#L98" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
