Standardizing models
Project description
bollhav
Model definition framework for data pipeline targets.
Implementations
Installation
pip install bollhav
Model
from bollhav import Model, ModelType, WriteMode, Database, PostgresColumn, PostgresType
model = Model(
name="orders",
source_entity="raw.orders",
table="orders",
schema="public",
database=Database.POSTGRES,
columns=[
PostgresColumn(name="id", data_type=PostgresType.BIGINT, primary_key=True, nullable=False),
PostgresColumn(name="created_at", data_type=PostgresType.TIMESTAMPTZ, nullable=False),
PostgresColumn(name="email", data_type=PostgresType.TEXT, nullable=True, sensitive=True),
],
write_mode=WriteMode.APPEND,
cron="0 3 * * *",
partitioned_by="created_at",
)
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
name |
str |
required | Unique identifier for the model |
source_entity |
str |
required | Source table or view to read from |
table |
str |
"" |
Destination table name |
schema |
str |
"" |
Destination schema name |
database |
Database |
None |
Target database. Required if columns is set |
columns |
list[PostgresColumn | ParquetColumn] |
None |
Column definitions. Required if database is set |
model_type |
ModelType |
TABLE |
TABLE or VIEW |
write_mode |
WriteMode |
APPEND |
How to write data. VIEW requires ModelType.VIEW |
tags |
list[str] |
None |
Labels for filtering |
cron |
str |
None |
Cron expression. Automatically infers batch_size |
enabled |
bool |
True |
Whether the model is active |
debug |
bool |
False |
Enables debug mode |
description |
str |
None |
Human-readable description |
source_dsn |
str |
None |
DSN for the source connection |
source_query |
str |
None |
Optional query to use instead of source_entity |
partitioned_by |
str |
None |
Column name to partition by. Must exist in columns |
begin |
datetime |
None |
Backfill start — must be UTC-aware |
end |
datetime |
None |
Backfill end — must be UTC-aware |
retries |
int |
None |
Retry count on failure |
lookback |
int |
None |
Lookback window in batch units |
tz_aware |
bool |
True |
Enforces UTC on begin/end |
**kwargs |
Extra metadata. Callable values are resolved with non-callable kwargs as arguments |
Computed attributes
| Attribute | Description |
|---|---|
batch_size |
Inferred from cron if set, otherwise None |
sensitive |
True if any column has sensitive=True |
unique_columns |
Columns with unique=True — required for UPDATE_INSERT |
partitioned_by_index |
True if partitioned_by is set |
Databases
from bollhav import Database
Database.POSTGRES
Database.PARQUET
Write modes
Read more here
from bollhav import WriteMode
WriteMode.APPEND
WriteMode.OVERWRITE_INSERT # requires partitioned_by
WriteMode.TRUNCATE_INSERT
WriteMode.UPDATE_INSERT # requires at least one column with unique=True
WriteMode.VIEW # requires ModelType.VIEW
UTC enforcement
When tz_aware=True (default), begin and end must be UTC-aware. Naive or non-UTC datetimes raise ValueError.
from datetime import datetime, timezone
model = Model(
...,
begin=datetime(2025, 1, 1, tzinfo=timezone.utc),
end=datetime(2025, 2, 1, tzinfo=timezone.utc),
)
Extra kwargs
Non-reserved keyword arguments are stored in model.extra. Callable values are resolved at init time using the non-callable kwargs as arguments.
model = Model(
name="orders",
source_entity="raw.orders",
static="production",
env=lambda static: f"env={static}",
)
model.extra # {"static": "production", "env": "env=production"}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bollhav-1.5.6.tar.gz.
File metadata
- Download URL: bollhav-1.5.6.tar.gz
- Upload date:
- Size: 15.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab9ba9ce0f17667bdc2ca95ef35ac4730e865d95aa32d84bd2460371d69fef57
|
|
| MD5 |
791fe1ef3ce09f2ae2b23b91e4082d92
|
|
| BLAKE2b-256 |
2e0719d3e8a06aa05e1c6c1d25c471d6c2c9d5d124eb905199db74f60428d753
|
File details
Details for the file bollhav-1.5.6-py3-none-any.whl.
File metadata
- Download URL: bollhav-1.5.6-py3-none-any.whl
- Upload date:
- Size: 14.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7062e2432def455e4545e056105cede873a7f8da779e4472c537c20a00db85be
|
|
| MD5 |
527999e9144cb81d758e3c58ae50f783
|
|
| BLAKE2b-256 |
2a968409bf84ae7ef5c27977ce8f283e130fc4e78c835ab5ba59a28632b21f71
|