Files
py-wikijs/examples/using_yaml_config.py
Claude 2ace16f5f0 feat: Add comprehensive configuration system and examples
Added complete configuration support with multiple formats and examples
to help users easily configure py-wikijs for their projects.

New Features:
- Configuration file templates for ENV, YAML, JSON, and INI formats
- config_helper.py: Universal configuration loader and client factory
  * Auto-detects and loads configs from multiple formats
  * Supports environment variables, YAML, JSON, and INI files
  * Provides create_client_from_config() for easy client creation
  * Validates configuration and provides helpful error messages

Configuration Templates:
- config.env.example: Environment variables (Docker, 12-factor apps)
- config.yaml.example: YAML with multi-environment support
- config.json.example: JSON for programmatic configuration
- config.ini.example: INI for traditional setups

Usage Examples:
- using_env_config.py: Complete example using .env files
- using_yaml_config.py: Complete example using YAML configuration
- using_json_config.py: Complete example using JSON configuration

Documentation:
- docs/CONFIGURATION_GUIDE.md: Comprehensive configuration guide
  * All configuration methods explained
  * Security best practices
  * Environment-specific configurations
  * Troubleshooting guide

Benefits:
 Flexible configuration (choose your preferred format)
 Keep credentials secure (no hardcoding)
 Environment-specific configs (dev/staging/prod)
 Docker/container-ready
 Full validation and error handling
 Comprehensive documentation and examples

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-25 19:41:39 +00:00

105 lines
3.0 KiB
Python
Executable File

#!/usr/bin/env python3
"""Example: Using YAML configuration file with py-wikijs.
This example shows how to use a YAML configuration file to configure
the WikiJS client.
Prerequisites:
pip install pyyaml
Setup:
1. Copy config.yaml.example to config.yaml
2. Update config.yaml with your Wiki.js credentials
3. Run this script
Usage:
python using_yaml_config.py
"""
import sys
from pathlib import Path
# Add examples directory to path
sys.path.insert(0, str(Path(__file__).parent))
try:
import yaml
except ImportError:
print("❌ PyYAML is required for YAML config files")
print("Install with: pip install pyyaml")
sys.exit(1)
from config_helper import create_client_from_config, load_config
def main():
"""Main function."""
print("=" * 60)
print("Using YAML Configuration with py-wikijs")
print("=" * 60)
yaml_file = Path(__file__).parent / "config.yaml"
if not yaml_file.exists():
print(f"\n⚠️ config.yaml not found at {yaml_file}")
print(" Copy config.yaml.example to config.yaml and update it")
return 1
try:
# Load configuration
print("\n📁 Loading configuration from config.yaml...")
config = load_config(yaml_file)
print("✅ Configuration loaded successfully")
print(f"\nConfiguration:")
print(f" URL: {config.get('wikijs', {}).get('url')}")
print(f" Auth method: {config.get('wikijs', {}).get('auth', {}).get('method')}")
print(f" Timeout: {config.get('client', {}).get('timeout')}s")
print(f" Rate limit: {config.get('client', {}).get('rate_limit')} req/s")
print(f" Log level: {config.get('logging', {}).get('level')}")
# Create client with environment-specific config
env = config.get("environments", {}).get("development", {})
if env:
print(f"\n🔧 Using development environment settings")
print("\n🔌 Creating WikiJS client...")
client = create_client_from_config(config)
print(f"✅ Client created successfully")
# Test connection
print("\n🔍 Testing connection...")
pages = client.pages.list()
print(f"✅ Connected! Found {len(pages)} page(s)")
if pages:
print(f"\n📄 Sample pages:")
for page in pages[:3]: # Show first 3
print(f" - [{page.id}] {page.title} ({page.path})")
# Show metrics
metrics = client.get_metrics()
print(f"\n📊 Client Metrics:")
print(f" Total requests: {metrics['total_requests']}")
print(f" Error rate: {metrics.get('error_rate', 0):.2f}%")
except FileNotFoundError as e:
print(f"{e}")
return 1
except Exception as e:
print(f"❌ Error: {e}")
import traceback
traceback.print_exc()
return 1
print("\n" + "=" * 60)
print("✅ Example completed successfully!")
print("=" * 60)
return 0
if __name__ == "__main__":
sys.exit(main())