3.8 KiB
3.8 KiB
Modern PyPy Configuration System
Overview
This project provides a modern Python implementation of PyPy's configuration system. It features a flexible, type-safe configuration management system with support for:
- Hierarchical configuration structures
- Type validation for configuration values
- Dependency management between options
- Command-line interface generation
- Configuration suggestions and requirements
Project Structure
modern_pypy/
├── config/ # Configuration system core
│ ├── __init__.py
│ ├── config.py # Main configuration classes
│ ├── pairtype.py # Metaclass utilities
│ ├── parse.py # Configuration parsing
│ ├── support.py # Support utilities
│ ├── translationoption.py # Translation options
│ └── test/ # Unit tests
├── pypyconfig/ # PyPy-specific configuration
│ ├── __init__.py
│ ├── makerestdoc.py # Documentation generator
│ ├── pypyoption.py # PyPy option definitions
│ └── test/ # Unit tests
├── tests/ # Comprehensive test suite
└── doc/ # Documentation
└── README.md # This file
Key Features
Configuration Classes
from config.config import Config, OptionDescription, BoolOption
# Define configuration structure
descr = OptionDescription("app", "Application Configuration", [
BoolOption("debug", "Enable debug mode", default=False),
IntOption("port", "Server port", default=8000)
])
# Create configuration instance
config = Config(descr)
config.debug = True
print(config.debug) # Output: True
Option Types
BoolOption: Boolean values with automatic negation flagsIntOption: Integer values with validationFloatOption: Floating-point numbersStrOption: String valuesChoiceOption: Enumerated values with dependenciesArbitraryOption: Any Python object
Command-Line Interface
from config.config import to_optparse
# Generate command-line parser
parser = to_optparse(config)
parser.parse_args() # Handles --debug, --no-debug, --port, etc.
Advanced Features
- Dependencies: Options can require or suggest other options
- Validation: Type and value validation for all options
- Configuration Groups: Hierarchical organization of options
- Freezing: Prevent modification of configuration after setup
Installation
git clone https://github.com/your-repo/modern_pypy.git
cd modern_pypy
pip install -e .
Usage Examples
Basic Configuration
from config.config import Config, OptionDescription, StrOption
descr = OptionDescription("db", "Database Configuration", [
StrOption("host", "Database host", default="localhost"),
IntOption("port", "Database port", default=5432)
])
db_config = Config(descr)
db_config.host = "db.example.com"
Option Dependencies
descr = OptionDescription("features", "Feature Flags", [
BoolOption("analytics", "Enable analytics", default=False,
requires=[("logging.level", "debug")]),
ChoiceOption("logging.level", "Log level",
values=["debug", "info", "warning"],
default="info")
])
features = Config(descr)
features.analytics = True # Automatically sets logging.level to "debug"
Contributing
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a new branch (
git checkout -b feature/your-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin feature/your-feature) - Open a pull request
License
This project is licensed under the MIT License - see the LICENSE file for details.