Settings API¶
Configuration management using Pydantic Settings.
Overview¶
The chronos_lab.settings module provides centralized configuration management with automatic loading from ~/.chronos_lab/.env and environment variable override support.
Classes and Functions¶
chronos_lab.settings.Settings ¶
Bases: BaseSettings
Application configuration settings loaded from ~/.chronos_lab/.env file.
Pydantic Settings model that manages all application configuration with automatic loading from configuration file and environment variable override support. Settings are validated on instantiation.
Attributes:
| Name | Type | Description |
|---|---|---|
intrinio_api_key |
Optional[str]
|
Intrinio API key for accessing financial data. Required for using Intrinio data sources. Defaults to None. |
log_level |
str
|
Logging level for the application. Valid values: 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'. Defaults to 'INFO'. |
arcticdb_default_library_name |
Optional[str]
|
Default ArcticDB library name used when none is specified. Defaults to 'uscomp'. |
arcticdb_local_path |
Optional[str]
|
Filesystem path for ArcticDB LMDB backend storage. Supports tilde expansion (~). Defaults to None. Example: '~/.chronos_lab/arcticdb' |
arcticdb_s3_bucket |
Optional[str]
|
S3 bucket name for ArcticDB S3 backend storage. Takes precedence over local_path when both are configured. Defaults to None. |
Configuration
- Loads from: ~/.chronos_lab/.env
- Encoding: UTF-8
- Extra fields: Ignored (allows forward compatibility)
- Environment variables: All settings can be overridden using uppercase env vars
Examples:
Access settings programmatically: >>> from chronos_lab.settings import get_settings >>> >>> settings = get_settings() >>> print(settings.intrinio_api_key) >>> print(settings.arcticdb_default_library_name) >>> print(settings.log_level)
Configuration file format (~/.chronos_lab/.env): >>> # Intrinio API Settings >>> INTRINIO_API_KEY=your_api_key_here >>> >>> # ArcticDB Settings >>> ARCTICDB_LOCAL_PATH=~/.chronos_lab/arcticdb >>> ARCTICDB_DEFAULT_LIBRARY_NAME=uscomp >>> # ARCTICDB_S3_BUCKET=my-bucket # Uncomment for S3 backend >>> >>> # Logging >>> LOG_LEVEL=INFO
Override with environment variables: >>> import os >>> os.environ['INTRINIO_API_KEY'] = 'custom_key' >>> os.environ['ARCTICDB_DEFAULT_LIBRARY_NAME'] = 'my_library' >>> settings = get_settings() # Will use environment values
Note
- Settings are cached via @lru_cache in get_settings()
- Restart Python process for changes to take effect
- S3 backend requires additional AWS configuration (see arcdb module docs)
arcticdb_default_library_name
class-attribute
instance-attribute
¶
chronos_lab.settings.get_settings
cached
¶
Get cached singleton instance of application settings.
Returns a cached Settings object loaded from ~/.chronos_lab/.env with environment variable overrides. Uses @lru_cache to ensure only one Settings instance is created per Python process, improving performance and ensuring consistency.
Returns:
| Name | Type | Description |
|---|---|---|
Settings |
Settings
|
Singleton Settings instance with loaded configuration. |
Examples:
Basic usage: >>> from chronos_lab.settings import get_settings >>> >>> settings = get_settings() >>> api_key = settings.intrinio_api_key >>> library = settings.arcticdb_default_library_name
Multiple calls return same instance: >>> settings1 = get_settings() >>> settings2 = get_settings() >>> assert settings1 is settings2 # Same object
Use in modules: >>> # In chronos_lab/sources.py >>> from chronos_lab.settings import get_settings >>> >>> def ohlcv_from_intrinio(**kwargs): ... settings = get_settings() ... api_key = kwargs.get('api_key') or settings.intrinio_api_key
Note
- Cached with @lru_cache for performance
- Returns same instance across all calls in same Python process
- Changes to .env or environment variables require process restart
- Thread-safe due to lru_cache implementation