hexastack-core
The foundational kernel of Hexastack: dependency injection, abstract ports, domain abstractions, configuration registry, and the modular bootstrap lifecycle.
1. Overview & Capabilities
hexastack-core serves as the zero-dependency (excluding pydantic and rodi) microkernel for all Hexastack packages. It establishes:
- Dependency Injection Engine: Powered by
rodi, managing service lifecycles (singleton, scoped, transient). - Distributed & Persistent Cache Adapters:
CachePortandAsyncCachePortwith in-memory (InMemoryCache,AsyncInMemoryCache), distributed Redis/Valkey (RedisCacheAdapter,AsyncRedisCacheAdapter), and persistent L2 filesystem storage (DiskCacheAdapter,AsyncDiskCacheAdapter). - High-Availability Primitives & Locks:
LockPortandAsyncLockPort(reentrant in-memory, OSFileLockAdapter, and distributedRedisLockAdapter) andLeaderElectionPort/AsyncLeaderElectionPort(single-process and distributed Redis lease coordination). - Unified Object & File Storage:
StoragePortandAsyncStoragePortwith in-memory (InMemoryStorage,AsyncInMemoryStorage), local filesystem (LocalStorageAdapter,AsyncLocalStorageAdapter), and unified multi-cloud storage viafsspec(FsspecStorageAdapter,AsyncFsspecStorageAdapterfor S3, GCS, Azure Blob Storage). - Core Domain Primitives: Generic
Result[T, E], generic types, and standard exception hierarchies (HexastackError,ConfigurationError,MissingDependencyError,LockError,LeaderElectionError,StorageError,StorageNotFoundError). - Core Port Contracts: Standard abstract protocols and ABCs for repositories (
Repository[E, ID]), unit of work (UnitOfWork), caching (CachePort), object storage (StoragePort), distributed locks (LockPort), leader election (LeaderElectionPort), logging (LoggerPort), presenters (PresenterPort), feature flags (FeatureFlagPort), and bootstrappers (BootstrapperPort). - Configuration & Type Registries: Type-safe Pydantic configuration parsing from TOML (
ConfigRegistry) and generic type registries (GenericTypeRegistry). - Three-Phase Bootstrap Engine: Deterministic orchestration of Phase 1 config registration, Phase 2 container assembly, and Phase 3 reflective scanning.
- Testing & Quality Toolkit:
assert_clean_architecture(...): Hexagonal architecture boundary verification powered bypytest-archon.create_test_runtime(...): Lightweight in-memory DI test harness and doubles (TestRuntime).cqrs_strategy(...): Hypothesis property-based fuzzing strategy generator for Pydantic/dataclass CQRS models.- Feature flag testing:
@parametrize_flags,flag_scope,@require_feature, and@require_extra.
- Context Utilities: Async-safe correlation ID and context variable management (
get_correlation_id,set_correlation_id,UserContext).
2. Package Anatomy & Key Components
hexastack_core/
├── domain/ # Result[T, E], HexastackError, Entity, ValueObject, EvaluationContext, HexastackConfig, HexastackCoreConfig
├── ports/ # Repository, UnitOfWork, BootstrapperPort, LoggerPort, CachePort, StoragePort, LockPort, LeaderElectionPort
├── adapters/ # InMemory, Redis, DiskCache, FileLock, Storage (InMemory, Local, Fsspec) implementations
├── infra/ # Bootstrap engine, ConfigRegistry, GenericTypeRegistry, decorators
├── testing/ # assert_clean_architecture, create_test_runtime, cqrs_strategy, flag_scope, isolation
└── utils/ # Context variable utilities, reflection helpers
Key Exports
| Category | Exports |
|---|---|
| Bootstrap | bootstrap, BootstrapContext, BootstrapResult, scan_modules |
| Cache | CachePort, AsyncCachePort, InMemoryCache, AsyncInMemoryCache, RedisCacheAdapter, AsyncRedisCacheAdapter, DiskCacheAdapter, AsyncDiskCacheAdapter |
| Config | ConfigRegistry, HexastackConfig, HexastackCoreConfig, @config_section |
| Context | get_correlation_id, set_correlation_id, correlation_scope, UserContext |
| Domain | Result, Ok, Err, HexastackError, ConfigurationError, MissingDependencyError, EntityNotFoundError, LockError, LeaderElectionError, StorageError, StorageNotFoundError |
| Feature Flags | EvaluationContext, FlagEvaluationDetails, InMemoryFeatureFlagAdapter, ConfigFeatureFlagAdapter |
| High Availability & Locks | LockPort, AsyncLockPort, InMemoryLock, AsyncInMemoryLock, FileLockAdapter, AsyncFileLockAdapter, RedisLockAdapter, AsyncRedisLockAdapter, LeaderElectionPort, AsyncLeaderElectionPort, SingleProcessLeaderElection, AsyncSingleProcessLeaderElection, RedisLeaderElectionAdapter, AsyncRedisLeaderElectionAdapter |
| Ports | BootstrapperPort, CachePort, AsyncCachePort, StoragePort, AsyncStoragePort, LockPort, AsyncLockPort, LeaderElectionPort, AsyncLeaderElectionPort, Repository, AsyncRepository, UnitOfWork, AsyncUnitOfWork, LoggerPort, PresenterPort, FeatureFlagPort |
| Registries | GenericTypeRegistry, ExceptionRegistry |
| Storage | StoragePort, AsyncStoragePort, InMemoryStorage, AsyncInMemoryStorage, LocalStorageAdapter, AsyncLocalStorageAdapter, FsspecStorageAdapter, AsyncFsspecStorageAdapter |
| Testing | assert_clean_architecture, create_test_runtime, TestRuntime, cqrs_strategy, faker_strategy, flag_scope, generate_synthetic_payload, isolate_registries, parametrize_flags, @require_extra, @require_feature, seeded_faker |
3. Monorepo & Sibling Relationships
graph TD
subgraph SiblingPackages ["Dependent Sibling Packages"]
CQRS["hexastack-cqrs"]
LOG["hexastack-logging"]
DB["hexastack-db"]
FASTAPI["hexastack-fastapi"]
GRAPHQL["hexastack-graphql"]
MCP["hexastack-mcp"]
GRPC["hexastack-grpc"]
CLI["hexastack-cli"]
UMBRELLA["hexastack"]
end
subgraph CoreKernel ["hexastack-core"]
DI["rodi.Container"]
BOOT["Bootstrap Engine"]
PORTS["Abstract Ports (UoW, Repo, Logger)"]
CONF["ConfigRegistry"]
end
CQRS -->|implements BootstrapperPort, uses rodi| CoreKernel
LOG -->|implements LoggerPort & BootstrapperPort| CoreKernel
DB -->|implements Repository & UnitOfWork ports| CoreKernel
FASTAPI -->|implements BootstrapperPort, consumes DI| CoreKernel
GRAPHQL -->|implements BootstrapperPort, consumes DI| CoreKernel
MCP -->|implements BootstrapperPort, consumes DI| CoreKernel
GRPC -->|implements BootstrapperPort, consumes DI| CoreKernel
CLI -->|implements BootstrapperPort, consumes DI| CoreKernel
UMBRELLA -->|orchestrates bootstrap| CoreKernel
Explicit Dependencies (Direct)
pydantic>=2.13.4: Schema validation and config parsing.rodi>=2.1.0: Fast, lightweight dependency injection container.
Implied / Behavioral Relationships (DI-Mediated)
- Provides Ports: Defines
UnitOfWorkPortandRepositoryimplemented byhexastack-db. - Provides Telemetry Contract: Defines
LoggerPortimplemented byhexastack-logging. - Provides Bootstrap Framework: All siblings expose extension entry points implementing
BootstrapperPort.
4. Installation
# Standalone installation
pip install hexastack-core
# Via umbrella package
pip install hexastack
5. Configuration Reference
Configuration schemas are registered under [hexastack]:
[hexastack]
app_name = "my-application"
environment = "production" # "development", "staging", "production", "test"
debug = false
6. Quickstart Example
from hexastack_core.infra.bootstrap import bootstrap
from hexastack_core.ports.bootstrap import BootstrapperPort, BootstrapContext
from hexastack_core.domain.result import Ok, Err, Result
# 1. Implement a custom extension
class ServiceBootstrapper(BootstrapperPort):
name = "custom_service"
order = 10
def configure(self, context: BootstrapContext) -> None:
context.container.add_instance("Service Configured", declared_class=str)
# 2. Run deterministic bootstrap
result = bootstrap(bootstrappers=[ServiceBootstrapper()], auto_discover=False)
value = result.container.get(str)
print(value) # "Service Configured"
Metadata
Release files for hexastack-core 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hexastack_core-0.5.0.tar.gz | 54.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hexastack_core-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 146.6 kB
Release files / hexastack_core-0.5.0.tar.gz
| Download URL | hexastack_core-0.5.0.tar.gz |
|---|---|
| Size | 54.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
291bbd3093b1641a0051dfbbe1a09f8a1508daa1687037648cda28d9322e5a2e
|
|
BLAKE2b-256 checksum How to use checksums |
bbc871cbbd966ac8b7b4e707cd9798ce8ddccb2e5bea89ee38da5d89b8b2a10b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hexastack_core-0.5.0-py3-none-any.whl
| Download URL | hexastack_core-0.5.0-py3-none-any.whl |
|---|---|
| Size | 92.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e0911b207f1b9683718f9d462bc8214ce949daf9b14db1e697b48f5f4aa0890f
|
|
BLAKE2b-256 checksum How to use checksums |
673c7128ffa640b5d884cab4ee9c898c26a64f43202b4c67a3f9dee22dc1a155
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|