55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
# Copyright (c) 2024 Microsoft Corporation.
|
|
# Licensed under the MIT License
|
|
|
|
"""CLI functions for the GraphRAG module."""
|
|
|
|
import argparse
|
|
import json
|
|
from pathlib import Path
|
|
|
|
|
|
def file_exist(path):
|
|
"""Check for file existence."""
|
|
if not Path(path).is_file():
|
|
msg = f"File not found: {path}"
|
|
raise argparse.ArgumentTypeError(msg)
|
|
return path
|
|
|
|
|
|
def dir_exist(path):
|
|
"""Check for directory existence."""
|
|
if not Path(path).is_dir():
|
|
msg = f"Directory not found: {path}"
|
|
raise argparse.ArgumentTypeError(msg)
|
|
return path
|
|
|
|
|
|
def redact(config: dict) -> str:
|
|
"""Sanitize secrets in a config object."""
|
|
|
|
# Redact any sensitive configuration
|
|
def redact_dict(config: dict) -> dict:
|
|
if not isinstance(config, dict):
|
|
return config
|
|
|
|
result = {}
|
|
for key, value in config.items():
|
|
if key in {
|
|
"api_key",
|
|
"connection_string",
|
|
"container_name",
|
|
"organization",
|
|
}:
|
|
if value is not None:
|
|
result[key] = "==== REDACTED ===="
|
|
elif isinstance(value, dict):
|
|
result[key] = redact_dict(value)
|
|
elif isinstance(value, list):
|
|
result[key] = [redact_dict(i) for i in value]
|
|
else:
|
|
result[key] = value
|
|
return result
|
|
|
|
redacted_dict = redact_dict(config)
|
|
return json.dumps(redacted_dict, indent=4)
|