data-watchtower
A data verification tool. Detect issues before your CTO does.
Installation
Install via pip:
pip install data-watchtower
Data Loader
Loads data into memory for validation by checkers.
Validators
Validate whether the loaded data meets expectations.
Built-in Validators
- ExpectColumnValuesToNotBeNull
- ExpectColumnRecentlyUpdated
- ExpectColumnStdToBeBetween
- ExpectColumnMeanToBeBetween
- ExpectColumnNullRatioToBeBetween
- ExpectRowCountToBeBetween
- ExpectColumnDistinctValuesToContainSet
- ExpectColumnDistinctValuesToEqualSet
- More...
Custom Loaders
Support for tailor-made loaders to handle specific data sources.
Macros
Custom macros enable referencing variables like dates or config files within monitoring tasks.
Scope of Effect
Applies to Watchtower names, checker parameters, and loader configurations.
Custom Macros
Leverage personalized macros for dynamic content insertion.
Supported Databases
- MySQL
- PostgreSQL
- SQLite
- And more...
TODO
- web frontend
Example
import datetime
from data_watchtower import DbServices, Watchtower, DatabaseLoader, ExpectRowCountToBeBetween,
ExpectColumnValuesToNotBeNull
# Database URLs
dw_test_data_db_url = "sqlite:///test.db"
dw_backend_db_url = "sqlite:///data.db"
# Custom Macro Definitions
custom_macro_map = {
'today': {'impl': lambda: datetime.datetime.today().strftime("%Y-%m-%d")},
'start_date': '2024-04-01',
'column': 'name',
}
# Configure Data Loader
query = "SELECT * FROM score WHERE date='${today}'"
data_loader = DatabaseLoader(query=query, connection=dw_test_data_db_url)
data_loader.load()
# Instantiate Watchtower
wt = Watchtower(name='Score Data of ${today}', data_loader=data_loader, custom_macro_map=custom_macro_map)
# Add Validators
row_count_params = ExpectRowCountToBeBetween.Params(min_value=20)
wt.add_validator(ExpectRowCountToBeBetween(row_count_params))
null_check_params = ExpectColumnValuesToNotBeNull.Params(column='${column}')
wt.add_validator(ExpectColumnValuesToNotBeNull(null_check_params))
# Execute Validation
validation_result = wt.run()
print(validation_result['success'])
# Persist Monitoring Setup and Results
db_service = DbServices(dw_backend_db_url)
db_service.create_tables()
db_service.add_watchtower(wt)
db_service.save_result(wt, validation_result)
db_service.update_watchtower_success_status(wt)
Metadata
Release files for data-watchtower 0.0.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| data_watchtower-0.0.7.tar.gz | 62.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| data_watchtower-0.0.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 103.5 kB
Release files / data_watchtower-0.0.7.tar.gz
| Download URL | data_watchtower-0.0.7.tar.gz |
|---|---|
| Size | 62.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fb6220b4765880bd9d6759ee75b81e7786909f3f5029acfe879c5d556ae29a53
|
|
BLAKE2b-256 checksum How to use checksums |
9a00ee67f2caa80bcc5b71e9b42e5400dee7c5046be6d0a12be486c4b76e9281
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / data_watchtower-0.0.7-py3-none-any.whl
| Download URL | data_watchtower-0.0.7-py3-none-any.whl |
|---|---|
| Size | 41.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2c44a928b6a9fefe73a8de96d401527bcde556078546bb539197db69b21f29d4
|
|
BLAKE2b-256 checksum How to use checksums |
8ceda53d44a0cb2eb7d61a7293318ae5afb119f5160afc296f1c45099644452a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|