fix: implement review follow-ups across docs, config, and tests

This commit is contained in:
Andreas Michael Fleckl
2026-02-17 16:00:11 +01:00
parent a77eae9517
commit e2dfb0ea84
4 changed files with 11 additions and 128 deletions

View File

@@ -174,7 +174,7 @@ def export(ctx, output_format: str, global_config: bool):
ctx.exit(1)
with open(config_file) as f:
config_data = yaml.safe_load(f)
config_data = yaml.safe_load(f) or {}
# Redact sensitive data
if 'api_key' in config_data:

View File

@@ -83,7 +83,7 @@ journalctl -u aitbc-mock-coordinator --no-pager -n 20
### Python Environment (Host)
Development and testing services on localhost use **Python 3.11+**:
Development and testing services on localhost use **Python 3.8+**:
```bash
# Localhost development workspace
@@ -96,7 +96,7 @@ Development and testing services on localhost use **Python 3.11+**:
**Verification Commands:**
```bash
python3 --version # Should show Python 3.11+
python3 --version # Should show Python 3.8+
ls -la /home/oib/windsurf/aitbc/.venv/bin/python # Check venv
```
@@ -151,7 +151,7 @@ ssh aitbc-cascade # Direct SSH to container
### Python Environment Details
All Python services in the AITBC container run on **Python 3.11+** with isolated virtual environments:
All Python services in the AITBC container run on **Python 3.8+** with isolated virtual environments:
```bash
# Container: aitbc (10.1.223.93)
@@ -163,7 +163,7 @@ All Python services in the AITBC container run on **Python 3.11+** with isolated
**Verification Commands:**
```bash
ssh aitbc-cascade "python3 --version" # Should show Python 3.11+
ssh aitbc-cascade "python3 --version" # Should show Python 3.8+
ssh aitbc-cascade "ls -la /opt/*/.venv/bin/python" # Check venv symlinks
```

View File

@@ -142,7 +142,7 @@ Choose a tutorial based on your interest:
### Documentation
- [API Reference](../api/)
- [SDK Guides](sdks/)
- [SDK Guides](4_examples.md)
- [Examples](examples.md)
- [Best Practices](best-practices.md)
@@ -250,7 +250,7 @@ We welcome contributions! Areas where you can help:
- Community support
- Integration examples
See our [Contributing Guide](contributing.md) for details.
See our [Contributing Guide](3_contributing.md) for details.
## Support
@@ -261,9 +261,9 @@ See our [Contributing Guide](contributing.md) for details.
## Next Steps
1. [Set up your environment](setup.md)
2. [Learn about authentication](api-authentication.md)
3. [Choose an SDK](sdks/)
4. [Build your first app](../../tutorials/)
1. [Set up your environment](2_setup.md)
2. [Learn about authentication](6_api-authentication.md)
3. [Choose an SDK](4_examples.md)
4. [Build your first app](4_examples.md)
Happy building! 🚀

View File

@@ -422,123 +422,6 @@ class TestConfigCommands:
assert result.exit_code == 0
assert 'CLIENT_API_KEY' in result.output
def test_profiles_save(self, runner, mock_config, tmp_path):
"""Test saving a configuration profile"""
profiles_dir = tmp_path / ".config" / "aitbc" / "profiles"
result = runner.invoke(config, [
'profiles',
'save',
'test_profile'
], obj={'config': mock_config, 'output_format': 'table'})
assert result.exit_code == 0
assert 'Profile test_profile saved' in result.output
# Verify profile was created
profile_file = profiles_dir / "test_profile.yaml"
assert profile_file.exists()
with open(profile_file) as f:
profile_data = yaml.safe_load(f)
assert profile_data['coordinator_url'] == 'http://127.0.0.1:18000'
def test_profiles_list(self, runner, mock_config, tmp_path):
"""Test listing configuration profiles"""
# Create test profiles
profiles_dir = tmp_path / ".config" / "aitbc" / "profiles"
profiles_dir.mkdir(parents=True, exist_ok=True)
profile1 = profiles_dir / "profile1.yaml"
profile1.write_text(yaml.dump({"coordinator_url": "http://test1:8000"}))
profile2 = profiles_dir / "profile2.yaml"
profile2.write_text(yaml.dump({"coordinator_url": "http://test2:8000"}))
# Patch Path.home to return tmp_path
with patch('pathlib.Path.home') as mock_home:
mock_home.return_value = tmp_path
result = runner.invoke(config, [
'profiles',
'list'
], obj={'config': mock_config, 'output_format': 'table'})
assert result.exit_code == 0
assert 'profile1' in result.output
assert 'profile2' in result.output
def test_profiles_load(self, runner, mock_config, tmp_path):
"""Test loading a configuration profile"""
# Create test profile
profiles_dir = tmp_path / ".config" / "aitbc" / "profiles"
profiles_dir.mkdir(parents=True, exist_ok=True)
profile_file = profiles_dir / "test.yaml"
profile_data = {
"coordinator_url": "http://loaded:8000",
"timeout": 75
}
profile_file.write_text(yaml.dump(profile_data))
config_file = tmp_path / ".aitbc.yaml"
with runner.isolated_filesystem(temp_dir=tmp_path):
# Patch Path.home to return tmp_path
with patch('pathlib.Path.home') as mock_home:
mock_home.return_value = tmp_path
result = runner.invoke(config, [
'profiles',
'load',
'test'
], obj={'config': mock_config, 'output_format': 'table'})
assert result.exit_code == 0
assert 'Profile test loaded' in result.output
def test_validate_invalid_url(self, runner, mock_config):
"""Test validating config with invalid URL"""
mock_config.coordinator_url = "invalid-url"
result = runner.invoke(config, [
'validate'
], obj={'config': mock_config, 'output_format': 'table'})
assert result.exit_code != 0
assert 'validation failed' in result.output
def test_validate_short_api_key(self, runner, mock_config):
"""Test validating config with short API key"""
mock_config.api_key = "short"
result = runner.invoke(config, [
'validate'
], obj={'config': mock_config, 'output_format': 'table'})
assert result.exit_code != 0
assert 'validation failed' in result.output
def test_validate_no_api_key(self, runner, mock_config):
"""Test validating config without API key (warning)"""
mock_config.api_key = None
result = runner.invoke(config, [
'validate'
], obj={'config': mock_config, 'output_format': 'table'})
assert result.exit_code == 0
assert 'valid with warnings' in result.output
@patch.dict(os.environ, {'CLIENT_API_KEY': 'env_key_123'})
def test_environments(self, runner, mock_config):
"""Test listing environment variables"""
result = runner.invoke(config, [
'environments'
], obj={'config': mock_config, 'output_format': 'table'})
assert result.exit_code == 0
assert 'CLIENT_API_KEY' in result.output
def test_profiles_save(self, runner, mock_config, tmp_path):
"""Test saving a configuration profile"""
# Patch Path.home to return tmp_path