| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #!/usr/bin/env python3
- """
- Command line tool to validate Office document XML files against XSD schemas and tracked changes.
- Usage:
- python validate.py <dir> --original <original_file>
- """
- import argparse
- import sys
- from pathlib import Path
- from validation import DOCXSchemaValidator, PPTXSchemaValidator, RedliningValidator
- def main():
- parser = argparse.ArgumentParser(description="Validate Office document XML files")
- parser.add_argument(
- "unpacked_dir",
- help="Path to unpacked Office document directory",
- )
- parser.add_argument(
- "--original",
- required=True,
- help="Path to original file (.docx/.pptx/.xlsx)",
- )
- parser.add_argument(
- "-v",
- "--verbose",
- action="store_true",
- help="Enable verbose output",
- )
- args = parser.parse_args()
- # Validate paths
- unpacked_dir = Path(args.unpacked_dir)
- original_file = Path(args.original)
- file_extension = original_file.suffix.lower()
- assert unpacked_dir.is_dir(), f"Error: {unpacked_dir} is not a directory"
- assert original_file.is_file(), f"Error: {original_file} is not a file"
- assert file_extension in [".docx", ".pptx", ".xlsx"], (
- f"Error: {original_file} must be a .docx, .pptx, or .xlsx file"
- )
- # Run validations
- match file_extension:
- case ".docx":
- validators = [DOCXSchemaValidator, RedliningValidator]
- case ".pptx":
- validators = [PPTXSchemaValidator]
- case _:
- print(f"Error: Validation not supported for file type {file_extension}")
- sys.exit(1)
- # Run validators
- success = True
- for V in validators:
- validator = V(unpacked_dir, original_file, verbose=args.verbose)
- if not validator.validate():
- success = False
- if success:
- print("All validations PASSED!")
- sys.exit(0 if success else 1)
- if __name__ == "__main__":
- main()
|