vflow-cli 0.1.3__tar.gz → 0.1.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/PKG-INFO +1 -1
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/pyproject.toml +1 -1
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow/config.py +4 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow/main.py +50 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow_cli.egg-info/PKG-INFO +1 -1
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/README.md +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/setup.cfg +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow/__init__.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow/actions.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow/backup_service.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow/core/__init__.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow/core/date_utils.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow/core/fs_ops.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow/core/media_ops.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow/core/patterns.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow/delivery_service.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow/ingest_service.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow/utils_date.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow_cli.egg-info/SOURCES.txt +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow_cli.egg-info/dependency_links.txt +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow_cli.egg-info/entry_points.txt +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow_cli.egg-info/requires.txt +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/src/vflow_cli.egg-info/top_level.txt +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/tests/test_braw_and_prores_extensions.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/tests/test_cli_backup_and_verify.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/tests/test_cli_ingest_and_pull_filters.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/tests/test_cli_ingest_report.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/tests/test_cli_list_backups.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/tests/test_cli_restore_folder.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/tests/test_cli_verify_backup_mirror.py +0 -0
- {vflow_cli-0.1.3 → vflow_cli-0.1.4}/tests/test_patterns_and_duplicates.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "vflow-cli"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.4"
|
|
4
4
|
description = "The v-flow CLI and Claude skills bundle for automating media backup and processing workflows for videographers."
|
|
5
5
|
authors = [{ name = "Kaung", email = "kaungzinye@gmail.com" }]
|
|
6
6
|
readme = "README.md"
|
|
@@ -42,3 +42,7 @@ def get_location(config: dict, name: str) -> Path:
|
|
|
42
42
|
def get_setting(config: dict, key: str, default: any = None) -> any:
|
|
43
43
|
"""Gets a setting from the config, returning default if not found."""
|
|
44
44
|
return config.get("settings", {}).get(key, default)
|
|
45
|
+
|
|
46
|
+
def save_config(config: dict) -> None:
|
|
47
|
+
with open(CONFIG_PATH, "w") as f:
|
|
48
|
+
yaml.dump(config, f, default_flow_style=False, sort_keys=False, allow_unicode=True)
|
|
@@ -394,6 +394,56 @@ def copy_meta(
|
|
|
394
394
|
|
|
395
395
|
|
|
396
396
|
|
|
397
|
+
LOCATION_KEYS = {"laptop", "work_ssd", "archive_hdd"}
|
|
398
|
+
|
|
399
|
+
@app.command()
|
|
400
|
+
def locations():
|
|
401
|
+
"""Show configured v-flow paths and whether they are currently mounted."""
|
|
402
|
+
app_config = config.load_config()
|
|
403
|
+
locs = app_config.get("locations", {})
|
|
404
|
+
settings = app_config.get("settings", {})
|
|
405
|
+
typer.echo("Locations:")
|
|
406
|
+
for key, path in locs.items():
|
|
407
|
+
mounted = "✓" if Path(path).exists() else "✗ not mounted"
|
|
408
|
+
typer.echo(f" {key}: {path} [{mounted}]")
|
|
409
|
+
if settings:
|
|
410
|
+
typer.echo("Settings:")
|
|
411
|
+
for key, val in settings.items():
|
|
412
|
+
typer.echo(f" {key}: {val}")
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
@app.command("set")
|
|
416
|
+
def set_config(
|
|
417
|
+
key: str = typer.Argument(help="Config key to update. Location keys: laptop, work_ssd, archive_hdd. Settings: settings.<key> (e.g. settings.default_split_gap)."),
|
|
418
|
+
value: str = typer.Argument(help="New value for the key."),
|
|
419
|
+
):
|
|
420
|
+
"""Update a single config value without re-running setup.
|
|
421
|
+
|
|
422
|
+
Examples:
|
|
423
|
+
v-flow set archive_hdd "/Volumes/Kaung HDD/MediaArchive"
|
|
424
|
+
v-flow set laptop "/Users/me/Desktop/Ingest"
|
|
425
|
+
v-flow set settings.default_split_gap 24
|
|
426
|
+
"""
|
|
427
|
+
app_config = config.load_config()
|
|
428
|
+
|
|
429
|
+
if key in LOCATION_KEYS:
|
|
430
|
+
app_config.setdefault("locations", {})[key] = value
|
|
431
|
+
typer.echo(f"Set locations.{key} = {value}")
|
|
432
|
+
elif key.startswith("settings."):
|
|
433
|
+
setting_key = key[len("settings."):]
|
|
434
|
+
app_config.setdefault("settings", {})[setting_key] = value
|
|
435
|
+
typer.echo(f"Set settings.{setting_key} = {value}")
|
|
436
|
+
else:
|
|
437
|
+
typer.echo(
|
|
438
|
+
f"Unknown key '{key}'. Use one of: {', '.join(sorted(LOCATION_KEYS))}, or settings.<key>.",
|
|
439
|
+
err=True,
|
|
440
|
+
)
|
|
441
|
+
raise typer.Exit(code=1)
|
|
442
|
+
|
|
443
|
+
config.save_config(app_config)
|
|
444
|
+
typer.echo(f"Config saved to {config.CONFIG_PATH}")
|
|
445
|
+
|
|
446
|
+
|
|
397
447
|
@app.command()
|
|
398
448
|
def make_config():
|
|
399
449
|
"""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|