Skip to main content

Configuration

Tasteful provides a robust configuration system built on top of Pydantic Settings, enabling type-safe configuration management with automatic environment variable loading, validation, and seamless integration with the dependency injection system.

What is Configuration?

Configuration in Tasteful manages application settings, environment variables, and runtime parameters for your flavors. The configuration system is designed around the BaseConfig class, which extends Pydantic’s BaseSettings to provide:
  • Type Safety: Full type hints and validation for all configuration values
  • Environment Variable Integration: Automatic loading from environment variables and .env files
  • Nested Configuration: Support for complex nested configuration structures
  • Dependency Injection: Seamless integration with Tasteful’s dependency injection system
  • Validation: Built-in validation with custom validators and constraints
Configuration objects are injected into Controllers, Services, and Repositories through the dependency injection system, providing a clean way to manage application settings across all layers of your flavor.

BaseConfig Class

The BaseConfig class serves as the foundation for all configuration in Tasteful applications:

Configuration Features

Environment Variable Loading

BaseConfig automatically loads configuration from environment variables, supporting multiple naming conventions:

Nested Configuration

Support for complex nested configuration structures using nested delimiter:

.env File Support

Automatic loading from .env files in the project root:

Type Validation

Built-in type validation and conversion:

Integration with Other Components

Configuration classes integrate seamlessly with all layers of your Tasteful flavor through dependency injection.

Configuration in Services

Services receive configuration objects to access business logic settings:

Configuration in Repositories

Repositories use configuration for database connections and settings:

Configuration in Controllers

Controllers can access configuration for HTTP-specific settings:

Configuration Inheritance

Create specialized configurations by inheriting from base configurations:

Best Practices

1. Use Type Hints

Always provide type hints for configuration fields:

2. Provide Sensible Defaults

Provide defaults for non-critical configuration:

3. Use Validation

Add validation for critical configuration values:
Use nested configuration for related settings:

Configuration Loading Order

Tasteful loads configuration in the following order (later sources override earlier ones):
  1. Default values defined in the configuration class
  2. Environment variables matching field names
  3. .env file in the project root
  4. Explicit values passed during instantiation
This allows for flexible configuration management across different environments while maintaining sensible defaults.

Common Patterns

Environment-Specific Configuration

Create different configuration classes for different environments:

Feature Flags

Use configuration for feature toggles:

Configuration Validation

Implement complex validation logic:

Testing

Configuration classes are easily testable and can be mocked for unit tests:
Configuration provides the foundation for managing settings across all components of your Tasteful flavors. By leveraging Pydantic’s validation and Tasteful’s dependency injection, you can create robust, type-safe configuration systems that adapt to different environments while maintaining clean separation of concerns.