import sys from pathlib import Path from urllib.parse import urlparse from pydantic import AnyUrl from src.atmos.validator import validate from src.clients import s3 _PRESIGN_EXPIRES_IN_SECONDS = 30 * 60 def _resolve(arg: str) -> AnyUrl: parsed = urlparse(arg) if parsed.scheme == "s3": return AnyUrl( str( s3.create_presigned_url( parsed.netloc, parsed.path.lstrip("/"), expires_in_seconds=_PRESIGN_EXPIRES_IN_SECONDS ) ) ) if parsed.scheme in ("http", "https", "file"): return AnyUrl(arg) return AnyUrl(f"file://{Path(arg).resolve()}") def main() -> None: if len(sys.argv) != 3: sys.exit("usage: dev-validate-atmos (local paths or http(s)/file/s3 URLs)") atmos_validation_builder = validate(_resolve(sys.argv[1]), _resolve(sys.argv[2])) atmos_validation_result = atmos_validation_builder.to_result() print(atmos_validation_result.model_dump_json(indent=4)) if __name__ == "__main__": main()