soleprint init commit
This commit is contained in:
93
station/tools/tester/gherkin/sync.py
Normal file
93
station/tools/tester/gherkin/sync.py
Normal file
@@ -0,0 +1,93 @@
|
||||
"""
|
||||
Sync Gherkin feature files from album/book/gherkin-samples/ to tester/features/.
|
||||
"""
|
||||
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
|
||||
|
||||
def sync_features_from_album(
|
||||
album_path: Optional[Path] = None,
|
||||
tester_path: Optional[Path] = None
|
||||
) -> dict:
|
||||
"""
|
||||
Sync .feature files from album/book/gherkin-samples/ to ward/tools/tester/features/.
|
||||
|
||||
Args:
|
||||
album_path: Path to album/book/gherkin-samples/ (auto-detected if None)
|
||||
tester_path: Path to ward/tools/tester/features/ (auto-detected if None)
|
||||
|
||||
Returns:
|
||||
Dict with sync stats: {synced: int, skipped: int, errors: int}
|
||||
"""
|
||||
# Auto-detect paths if not provided
|
||||
if tester_path is None:
|
||||
tester_path = Path(__file__).parent.parent / "features"
|
||||
|
||||
if album_path is None:
|
||||
# Attempt to find album in pawprint
|
||||
pawprint_root = Path(__file__).parent.parent.parent.parent
|
||||
album_path = pawprint_root / "album" / "book" / "gherkin-samples"
|
||||
|
||||
# Ensure paths exist
|
||||
if not album_path.exists():
|
||||
return {
|
||||
"synced": 0,
|
||||
"skipped": 0,
|
||||
"errors": 1,
|
||||
"message": f"Album path not found: {album_path}"
|
||||
}
|
||||
|
||||
tester_path.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# Sync stats
|
||||
synced = 0
|
||||
skipped = 0
|
||||
errors = 0
|
||||
|
||||
# Find all .feature files in album
|
||||
for feature_file in album_path.rglob("*.feature"):
|
||||
# Get relative path from album root
|
||||
relative_path = feature_file.relative_to(album_path)
|
||||
|
||||
# Destination path
|
||||
dest_file = tester_path / relative_path
|
||||
|
||||
try:
|
||||
# Create parent directories
|
||||
dest_file.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# Copy file
|
||||
shutil.copy2(feature_file, dest_file)
|
||||
synced += 1
|
||||
|
||||
except Exception as e:
|
||||
errors += 1
|
||||
|
||||
return {
|
||||
"synced": synced,
|
||||
"skipped": skipped,
|
||||
"errors": errors,
|
||||
"message": f"Synced {synced} feature files from {album_path}"
|
||||
}
|
||||
|
||||
|
||||
def clean_features_dir(features_dir: Optional[Path] = None):
|
||||
"""
|
||||
Clean the features directory (remove all .feature files).
|
||||
|
||||
Useful before re-syncing to ensure no stale files.
|
||||
"""
|
||||
if features_dir is None:
|
||||
features_dir = Path(__file__).parent.parent / "features"
|
||||
|
||||
if not features_dir.exists():
|
||||
return
|
||||
|
||||
# Remove all .feature files
|
||||
for feature_file in features_dir.rglob("*.feature"):
|
||||
try:
|
||||
feature_file.unlink()
|
||||
except Exception:
|
||||
pass
|
||||
Reference in New Issue
Block a user