Storage Backends¶
Base Storage¶
base
¶
Base storage abstraction for optimization results.
This module defines the abstract interface for storage backends, enabling different storage strategies (memory, filesystem, database) with a consistent API.
Classes¶
StorageType
¶
Bases: str, Enum
Types of storage backends.
StorageBackend
¶
Bases: ABC
Abstract base class for storage backends.
Storage backends handle persistence of OptimizationResult objects and their associated result sets. Each backend can implement its own strategy for data storage and retrieval.
Initialize storage backend.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
**config
|
Any
|
Backend-specific configuration |
{}
|
Source code in optiscope/storage/base.py
Functions¶
save_result
abstractmethod
¶
save_result(key: str, result: OptimizationResult, metadata: dict[str, Any] | None = None) -> None
Save an optimization result.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
str
|
Unique identifier for the result |
required |
result
|
OptimizationResult
|
OptimizationResult to save |
required |
metadata
|
dict[str, Any] | None
|
Optional additional metadata |
None
|
Raises:
| Type | Description |
|---|---|
StorageError
|
If save operation fails |
Source code in optiscope/storage/base.py
load_result
abstractmethod
¶
load_result(key: str) -> OptimizationResult
Load an optimization result.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
str
|
Unique identifier for the result |
required |
Returns:
| Type | Description |
|---|---|
OptimizationResult
|
OptimizationResult object |
Raises:
| Type | Description |
|---|---|
KeyError
|
If key not found |
StorageError
|
If load operation fails |
Source code in optiscope/storage/base.py
delete_result
abstractmethod
¶
Delete an optimization result.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
str
|
Unique identifier for the result |
required |
Raises:
| Type | Description |
|---|---|
KeyError
|
If key not found |
StorageError
|
If delete operation fails |
Source code in optiscope/storage/base.py
exists_result
abstractmethod
¶
Check if a result exists.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
str
|
Unique identifier for the result |
required |
Returns:
| Type | Description |
|---|---|
bool
|
True if result exists |
list_results
abstractmethod
¶
List all stored result keys.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
prefix
|
str | None
|
Optional prefix filter |
None
|
Returns:
| Type | Description |
|---|---|
list[str]
|
List of result keys |
rename_result
abstractmethod
¶
Rename a result.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
old_key
|
str
|
The current key of the result |
required |
new_key
|
str
|
The new key for the result |
required |
Raises:
| Type | Description |
|---|---|
KeyError
|
If old_key not found |
ValueError
|
If new_key already exists |
StorageError
|
If rename operation fails |
Source code in optiscope/storage/base.py
save_set
abstractmethod
¶
save_set(result_key: str, set_name: str, result_set: ResultSet) -> None
Save a result set for a specific result.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
result_key
|
str
|
Key of the parent result |
required |
set_name
|
str
|
Name of the result set |
required |
result_set
|
ResultSet
|
ResultSet to save |
required |
Raises:
| Type | Description |
|---|---|
KeyError
|
If result_key not found |
StorageError
|
If save operation fails |
Source code in optiscope/storage/base.py
load_set
abstractmethod
¶
load_set(result_key: str, set_name: str) -> ResultSet
Load a result set.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
result_key
|
str
|
Key of the parent result |
required |
set_name
|
str
|
Name of the result set |
required |
Returns:
| Type | Description |
|---|---|
ResultSet
|
ResultSet object |
Raises:
| Type | Description |
|---|---|
KeyError
|
If result_key or set_name not found |
StorageError
|
If load operation fails |
Source code in optiscope/storage/base.py
delete_set
abstractmethod
¶
Delete a result set.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
result_key
|
str
|
Key of the parent result |
required |
set_name
|
str
|
Name of the result set |
required |
Raises:
| Type | Description |
|---|---|
KeyError
|
If result_key or set_name not found |
StorageError
|
If delete operation fails |
Source code in optiscope/storage/base.py
list_sets
abstractmethod
¶
List all result sets for a given result.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
result_key
|
str
|
Key of the parent result |
required |
Returns:
| Type | Description |
|---|---|
list[str]
|
List of set names |
Raises:
| Type | Description |
|---|---|
KeyError
|
If result_key not found |
Source code in optiscope/storage/base.py
get_result_metadata
abstractmethod
¶
Get metadata for a result without loading the full data.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
str
|
Unique identifier for the result |
required |
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
Dictionary of metadata |
Raises:
| Type | Description |
|---|---|
KeyError
|
If key not found |
Source code in optiscope/storage/base.py
update_result_metadata
abstractmethod
¶
Update metadata for a result.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
str
|
Unique identifier for the result |
required |
metadata
|
dict[str, Any]
|
Metadata to update/add |
required |
Raises:
| Type | Description |
|---|---|
KeyError
|
If key not found |
Source code in optiscope/storage/base.py
clear
abstractmethod
¶
Clear stored results.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
prefix
|
str | None
|
Optional prefix filter (if None, clear all) |
None
|
Returns:
| Type | Description |
|---|---|
int
|
Number of results deleted |
get_storage_info
abstractmethod
¶
Get information about storage usage.
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
Dictionary with storage information |
to_dict
abstractmethod
¶
Serialize the storage backend's state to a dictionary.
For memory-based storage, this might involve serializing all contained data. For file-based or database storage, this might involve storing references (e.g., file paths or connection strings) so the state can be reconstructed.
Source code in optiscope/storage/base.py
from_dict
abstractmethod
classmethod
¶
from_dict(data: dict[str, Any]) -> StorageBackend
Deserialize a storage backend from a dictionary representation.
This class method should reconstruct the storage backend from the serialized
state produced by to_dict.
Source code in optiscope/storage/base.py
close
¶
__enter__
¶
__enter__() -> StorageBackend
StorageError
¶
Bases: Exception
Base exception for storage-related errors.
StorageConnectionError
¶
Bases: StorageError
Exception raised when storage connection fails.
StorageOperationError
¶
Bases: StorageError
Exception raised when storage operation fails.
StorageCapacityError
¶
Bases: StorageError
Exception raised when storage capacity is exceeded.
StorageMetadata
¶
StorageMetadata(key: str, created_at: datetime, modified_at: datetime, size_bytes: int | None = None, n_points: int | None = None, n_sets: int | None = None, custom_metadata: dict[str, Any] | None = None)
Metadata about a stored result.
Initialize storage metadata.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
str
|
Result key |
required |
created_at
|
datetime
|
Creation timestamp |
required |
modified_at
|
datetime
|
Last modification timestamp |
required |
size_bytes
|
int | None
|
Size in bytes |
None
|
n_points
|
int | None
|
Number of data points |
None
|
n_sets
|
int | None
|
Number of result sets |
None
|
custom_metadata
|
dict[str, Any] | None
|
Additional custom metadata |
None
|
Source code in optiscope/storage/base.py
Functions¶
to_dict
¶
Convert to dictionary.
Source code in optiscope/storage/base.py
from_dict
classmethod
¶
from_dict(data: dict[str, Any]) -> StorageMetadata
Create from dictionary.
Source code in optiscope/storage/base.py
Database Storage¶
database
¶
Database storage backend for optimization results.
Scalable storage backend using SQLAlchemy for database operations. Supports PostgreSQL, SQLite, MySQL, and other SQLAlchemy-compatible databases.
Classes¶
DatabaseStorage
¶
DatabaseStorage(connection_string: str, echo: bool = False, pool_size: int = 5, max_overflow: int = 10, dump_as_json: bool = False, **config: Any)
Bases: StorageBackend
Database storage backend using SQLAlchemy.
Stores results in a relational database with efficient querying and metadata indexing. Suitable for large-scale applications and multi-user scenarios.
For multi-source session databases, use SessionDBStorage instead, which adds automatic source_id prefixing for data isolation.
Initialize database storage.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
connection_string
|
str
|
SQLAlchemy connection string Examples: - SQLite: "sqlite:///path/to/database.db" - PostgreSQL: "postgresql://user:pass@localhost/dbname" - MySQL: "mysql://user:pass@localhost/dbname" - DuckDB: "duckdb:///database.duckdb" |
required |
echo
|
bool
|
Enable SQL query logging |
False
|
pool_size
|
int
|
Connection pool size |
5
|
max_overflow
|
int
|
Maximum overflow connections |
10
|
**config
|
Any
|
Additional SQLAlchemy engine configuration |
{}
|
Source code in optiscope/storage/database.py
Functions¶
save_result
¶
save_result(key: str, result: OptimizationResult, metadata: dict[str, Any] | None = None) -> None
Save result to database.
Source code in optiscope/storage/database.py
load_result
¶
load_result(key: str) -> OptimizationResult
Load result from database.
Source code in optiscope/storage/database.py
delete_result
¶
Delete result from database.
Source code in optiscope/storage/database.py
rename_result
¶
Rename a result.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
old_key
|
str
|
Current result key |
required |
new_key
|
str
|
New result key |
required |
Source code in optiscope/storage/database.py
exists_result
¶
Check if result exists.
list_results
¶
List all result keys.
Source code in optiscope/storage/database.py
save_set
¶
save_set(result_key: str, set_name: str, result_set: ResultSet) -> None
Save result set to database.
Source code in optiscope/storage/database.py
load_set
¶
load_set(result_key: str, set_name: str) -> ResultSet
Load result set from database.
Source code in optiscope/storage/database.py
delete_set
¶
Delete result set from database.
Source code in optiscope/storage/database.py
list_sets
¶
List all sets for a result.
Source code in optiscope/storage/database.py
get_result_metadata
¶
Get result metadata.
Source code in optiscope/storage/database.py
update_result_metadata
¶
Update result metadata.
Source code in optiscope/storage/database.py
clear
¶
Clear stored results.
Source code in optiscope/storage/database.py
get_storage_info
¶
Get storage information.
Source code in optiscope/storage/database.py
close
¶
vacuum
¶
Optimize database (SQLite only).
For SQLite databases, runs VACUUM to reclaim space. For other databases, this is a no-op.
Source code in optiscope/storage/database.py
to_dict
¶
Serialize database storage to dictionary.
Note: This only stores connection information, not the actual data. The data persists in the database itself.
Source code in optiscope/storage/database.py
from_dict
classmethod
¶
from_dict(data: dict[str, Any]) -> DatabaseStorage
Deserialize database storage from dictionary.
Reconnects to the database using the stored connection information.
Source code in optiscope/storage/database.py
File System Storage¶
file_system
¶
File system storage backend for optimization results.
Persistent storage backend that saves results to the file system. Supports different serialization formats and directory structures.
Classes¶
FileSystemStorage
¶
FileSystemStorage(base_path: str | Path, format: str = 'json', create_if_missing: bool = True, **config: Any)
Bases: StorageBackend
File system storage backend.
Stores results as files in a directory structure. Each result is saved with its metadata and sets in a dedicated subdirectory.
Initialize file system storage.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
base_path
|
str | Path
|
Base directory for storage |
required |
format
|
str
|
File format for results ("json", "csv", etc.) |
'json'
|
create_if_missing
|
bool
|
Create base directory if it doesn't exist |
True
|
**config
|
Any
|
Additional configuration |
{}
|
Source code in optiscope/storage/file_system.py
Functions¶
save_result
¶
save_result(key: str, result: OptimizationResult, metadata: dict[str, Any] | None = None) -> None
Save result to file system.
Source code in optiscope/storage/file_system.py
load_result
¶
load_result(key: str) -> OptimizationResult
Load result from file system.
Source code in optiscope/storage/file_system.py
delete_result
¶
Delete result from file system.
Source code in optiscope/storage/file_system.py
rename_result
¶
Rename a result.
Source code in optiscope/storage/file_system.py
exists_result
¶
list_results
¶
List all result keys.
Source code in optiscope/storage/file_system.py
save_set
¶
save_set(result_key: str, set_name: str, result_set: ResultSet) -> None
Save result set to file system.
Source code in optiscope/storage/file_system.py
load_set
¶
load_set(result_key: str, set_name: str) -> ResultSet
Load result set from file system.
Source code in optiscope/storage/file_system.py
delete_set
¶
Delete result set from file system.
Source code in optiscope/storage/file_system.py
list_sets
¶
List all sets for a result.
Source code in optiscope/storage/file_system.py
get_result_metadata
¶
update_result_metadata
¶
Update result metadata.
Source code in optiscope/storage/file_system.py
clear
¶
get_storage_info
¶
Get storage information.
Source code in optiscope/storage/file_system.py
compact
¶
Compact storage by removing orphaned files.
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
Dictionary with compaction statistics |
Source code in optiscope/storage/file_system.py
to_dict
¶
Serialize the filesystem storage to a dictionary.
Source code in optiscope/storage/file_system.py
from_dict
classmethod
¶
from_dict(data: dict[str, Any]) -> FileSystemStorage
Deserialize filesystem storage from a dictionary.
Source code in optiscope/storage/file_system.py
Functions¶
Memory Storage¶
memory
¶
In-memory storage backend for optimization results.
Fast storage backend that keeps all data in memory. Useful for interactive sessions and when persistence is not required.
Classes¶
MemoryStorage
¶
Bases: StorageBackend
In-memory storage backend.
Stores all results in memory using Python dictionaries. This is the fastest storage option but data is lost when the process ends. Supports optional memory limits and automatic eviction.
Initialize memory storage.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
max_memory_mb
|
float | None
|
Maximum memory usage in MB (None = unlimited) |
None
|
eviction_policy
|
str
|
Eviction policy when limit reached ("lru", "fifo") |
'lru'
|
**config
|
Any
|
Additional configuration |
{}
|
Source code in optiscope/storage/memory.py
Functions¶
save_result
¶
save_result(key: str, result: OptimizationResult, metadata: dict[str, Any] | None = None) -> None
Save result to memory.
Source code in optiscope/storage/memory.py
load_result
¶
load_result(key: str) -> OptimizationResult
Load result from memory.
Source code in optiscope/storage/memory.py
delete_result
¶
Delete result from memory.
Source code in optiscope/storage/memory.py
rename_result
¶
Rename a result.
Source code in optiscope/storage/memory.py
exists_result
¶
list_results
¶
save_set
¶
save_set(result_key: str, set_name: str, result_set: ResultSet) -> None
Save result set.
Source code in optiscope/storage/memory.py
load_set
¶
load_set(result_key: str, set_name: str) -> ResultSet
Load result set.
Source code in optiscope/storage/memory.py
delete_set
¶
Delete result set.
Source code in optiscope/storage/memory.py
list_sets
¶
List all sets for a result.
Source code in optiscope/storage/memory.py
get_result_metadata
¶
Get result metadata.
Source code in optiscope/storage/memory.py
update_result_metadata
¶
Update result metadata.
Source code in optiscope/storage/memory.py
clear
¶
Clear stored results.
Source code in optiscope/storage/memory.py
get_storage_info
¶
Get storage information.
Source code in optiscope/storage/memory.py
get_result_reference
¶
get_result_reference(key: str) -> OptimizationResult
Get direct reference to result (no copy).
WARNING: This bypasses the copy protection and allows direct modification of stored data. Use with caution.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
str
|
Result key |
required |
Returns:
| Type | Description |
|---|---|
OptimizationResult
|
Direct reference to stored OptimizationResult |
Source code in optiscope/storage/memory.py
to_dict
¶
Serialize the memory storage to a dictionary.
Source code in optiscope/storage/memory.py
from_dict
classmethod
¶
from_dict(data: dict[str, Any]) -> MemoryStorage
Deserialize memory storage from a dictionary.