exobrain-database
exobrain-database is a Python library that provides the SQLAlchemy ORM models, Alembic migration management,
and utility tools for the Exobrain platform database. It supports a multi-tenant architecture where each
organization has its own isolated PostgreSQL schema.
The package is distributed as a namespace package under exobrain.database, making it composable with
other exobrain.* packages.
Table of Contents
Installation
pip install exobrain-database
Or with uv:
uv add exobrain-database
Development
This project uses uv for dependency management and building.
Prerequisites: Python 3.12+ and uv
Setup:
git clone git@github.com:MyExobrain/exobrain-database.git
cd exobrain-database
uv sync --all-groups
Common tasks:
uv run pytest # Run tests
uv run pytest --cov=exobrain.database # Tests with coverage
uv run ruff check src tests # Lint
uv run ruff format src tests # Format
uv run mypy src # Type check
uv build # Build wheel + sdist
Add dependencies:
uv add package-name # Production
uv add --group dev package-name # Development
uv sync --upgrade # Update all
Database migrations
Alembic reads the database connection from environment variables. Create a .env file at the project root (do not commit it):
export SQL_HOST="localhost"
export SQL_DATABASE="exobrain"
export SQL_USER="postgres"
export SQL_PORT="5432"
export SQL_PASSWORD="Dfya2023"
Source it before running any Alembic command:
source .env
The Alembic settings are declared in pyproject.toml under [tool.alembic], so you can run commands directly from the project root without the -c flag:
alembic current # Show applied revision
alembic history # List migration history
alembic upgrade head # Apply all pending migrations
alembic downgrade -1 # Roll back one migration
For creating a new migration, pass -c explicitly so the file naming template from alembic.ini is applied:
alembic -c src/exobrain/database/migrations/alembic.ini revision --autogenerate -m "short description"
Project Structure
The source code lives under src/exobrain/database/ as a namespace package:
src/exobrain/database/
├── migrations/ # Alembic migration engine
│ ├── alembic.ini # Alembic configuration file
│ ├── env.py # Migration environment setup
│ ├── migration_manager.py # Public API: upgrade / downgrade per org schema
│ └── versions/ # Auto-generated migration scripts
├── model/ # SQLAlchemy ORM models
│ ├── base.py # Declarative base classes
│ ├── associations/ # Many-to-many association tables
│ ├── enums/ # Database enumeration types (config, currency, running states)
│ ├── general/ # Cross-organization models (copilots, permissions, roles,
│ │ # predefined actions/executions/risks, reasons)
│ └── org/ # Per-organization models (config, connections, dashboards,
│ # running actions/executions/risks, scopes, users)
└── tools/ # Reusable database utilities
├── jsonb_filter.py # Helper for filtering on JSONB columns
├── record_count.py # Efficient record counting queries
└── sql_query_logger.py # SQLAlchemy query logging utility
Key design decisions
- Multi-tenant schemas: each organization's data is isolated in a dedicated PostgreSQL schema
(e.g.
org_<id>). Migrations are applied per-schema viamigration_manager.upgrade(org_id). - Namespace package:
exobrain.databasehas no__init__.pyat theexobrainlevel, allowing otherexobrain.*packages to coexist in the same Python environment. py.typedmarker: the package ships type information and is fully typed (compatible with mypy in strict mode).- Build system: Uses
uvas the modern Python build & package manager.
Usage
Apply migrations for an organization
from uuid import UUID
from exobrain.database.migrations import migration_manager
org_id = UUID("12345678-1234-5678-1234-567812345678")
migration_manager.upgrade(org_id)
Use ORM models
from exobrain.database.model.general.role import Role
from exobrain.database.model.org.user import User
License
exobrain-database is distributed under a proprietary license. See LICENSE.md for details.
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 exobrain_database-0.2.0.tar.gz.
File metadata
- Download URL: exobrain_database-0.2.0.tar.gz
- Upload date:
- Size: 61.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5cd3b13c74ba944b0e33b6b462d02fd5af5a12fe185133d8a2b918eccd1f1196
|
|
| MD5 |
33b991a7cfd6a10883229d2ac68e05a2
|
|
| BLAKE2b-256 |
2b74f1b7abf886c284c2d12f8eb76302bc1c224c3c19e7b0b9e6ff0eacaab1ef
|
File details
Details for the file exobrain_database-0.2.0-py3-none-any.whl.
File metadata
- Download URL: exobrain_database-0.2.0-py3-none-any.whl
- Upload date:
- Size: 144.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed38a4710321470cde7b3d2613d5521a78919cf1ae42074eb5e2d2713ab761eb
|
|
| MD5 |
accbcfdd5fac3de74f18d2e8f2f94f71
|
|
| BLAKE2b-256 |
f2dfdac19cda3998051dff0e006fc12f09221ccc4db17f659ddb177f439b0bc8
|