{"library":"pytoolconfig","title":"Python Tool Configuration","description":"pytoolconfig is a Python library designed for simple and declarative definition of tool configurations, typically read from `pyproject.toml` or other config files. It provides a `ToolConfig` class to define configuration schemas with type hints and default values. The current version is 1.3.1, and it maintains a moderate release cadence, with minor updates every few months addressing features and maintenance.","language":"python","status":"active","last_verified":"Fri May 15","install":{"commands":["pip install pytoolconfig"],"cli":null},"imports":["from pytoolconfig import ToolConfig","from pytoolconfig import Field"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"from pytoolconfig import ToolConfig, Field\nimport os\n\n# Define your configuration schema\nclass MyToolConfig(ToolConfig):\n    project_name: str = Field(default=\"my-default-project\", help=\"Name of the project\")\n    debug_mode: bool = Field(default=False, help=\"Enable debug logging\")\n    output_dir: str = Field(default=\"./output\", help=\"Directory for output files\")\n\n# Simulate a configuration file (e.g., .toolconfig.yaml or pyproject.toml)\n# In a real scenario, this would be loaded from disk.\n# For demonstration, we'll manually create a dummy config.\n# In practice, `from_file`, `from_pyproject`, or `load` would be used.\n\n# Example of loading from a dictionary, simulating file content:\ndummy_config_data = {\n    \"tool\": {\n        \"mytool\": {\n            \"project_name\": os.environ.get(\"MYTOOL_PROJECT_NAME\", \"override-from-env\"),\n            \"debug_mode\": True\n        }\n    }\n}\n\n# Load configuration for 'mytool'\n# The library would typically discover this automatically from `load()` or `from_pyproject()`\nconfig = MyToolConfig.load(app_name=\"mytool\", config_data=dummy_config_data)\n\nprint(f\"Project Name: {config.project_name}\")\nprint(f\"Debug Mode: {config.debug_mode}\")\nprint(f\"Output Directory: {config.output_dir}\")\n\n# Demonstrating default value for output_dir which was not in dummy_config_data\nassert config.output_dir == \"./output\"\n# Demonstrating override from dummy_config_data (or environment variable if set)\nassert config.project_name == (os.environ.get(\"MYTOOL_PROJECT_NAME\", \"override-from-env\"))\nassert config.debug_mode is True","lang":"python","description":"This quickstart demonstrates how to define a configuration schema using `ToolConfig` and `Field`. It then shows how to load configuration data, respecting default values and showing how environment variables or file-based settings would override defaults. `pytoolconfig` automatically looks for configuration in various places like `pyproject.toml` or `.{app_name}.yaml` when `ToolConfig.load()` is called without `config_data`.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-15","installed_version":"1.3.1","pypi_latest":"1.3.1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.6,"avg_import_s":null,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pytoolconfig","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"18.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pytoolconfig","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.6,"import_time_s":null,"mem_mb":null,"disk_size":"19M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pytoolconfig","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"20.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pytoolconfig","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.7,"import_time_s":null,"mem_mb":null,"disk_size":"21M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pytoolconfig","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"12.5M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pytoolconfig","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.5,"import_time_s":null,"mem_mb":null,"disk_size":"13M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pytoolconfig","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"12.3M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pytoolconfig","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.5,"import_time_s":null,"mem_mb":null,"disk_size":"13M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pytoolconfig","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"18.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pytoolconfig","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.9,"import_time_s":null,"mem_mb":null,"disk_size":"19M"}]}}