123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import argparse
- import glob
- import json
- import logging
- import os
- import sys
- from typing import Any
- def main() -> int:
- parser = argparse.ArgumentParser(description="Format Flatpak manifest")
- parser.add_argument(
- "manifest_file",
- metavar="FILE",
- type=str,
- help="Manifest file to adjust format for",
- )
- parser.add_argument(
- "--check",
- action="store_true",
- help="Check for necessary changes only",
- default=False,
- required=False,
- )
- parser.add_argument(
- "--loglevel", type=str, help="Set log level", default="WARNING", required=False
- )
- arguments = parser.parse_args()
- logging.basicConfig(level=arguments.loglevel, format="%(message)s")
- logger = logging.getLogger()
- manifest_file = arguments.manifest_file
- try:
- with open(manifest_file, "r+") as manifest:
- manifest_path = os.path.dirname(manifest_file)
- manifest_string = manifest.read()
- manifest_data = json.loads(manifest_string)
- module_list = manifest_data.get("modules", [])
- obs_object = module_list[-1]
- if type(obs_object) != dict:
- logger.error(
- f"❌ Last element in modules list is not the obs-studio object"
- )
- return 2
- new_module_list = []
- for module in module_list:
- if type(module) == str:
- if not os.path.isfile(os.path.join(manifest_path, module)):
- logger.warning(
- f"⚠️ Specified module {os.path.basename(module)} not found."
- )
- continue
- new_module_list.append(module)
- new_module_list.sort()
- new_module_list.append(obs_object)
- manifest_data["modules"] = new_module_list
- new_manifest_string = (
- f"{json.dumps(manifest_data, indent=4, ensure_ascii=False)}\n"
- )
- if arguments.check:
- if new_module_list != module_list:
- logger.error(f"❌ Module list failed order validation")
- return 2
- elif new_manifest_string != manifest_string:
- logger.error(f"❌ Manifest file is not correctly formatted")
- return 2
- else:
- logger.info(f"✅ Module list passed order validation")
- return 0
- manifest.seek(0)
- manifest.truncate()
- manifest.write(new_manifest_string)
- logger.info(f"✅ Updated manifest file '{manifest_file}")
- except IOError:
- logger.error(f"❌ Unable to read manifest file '{manifest_file}'")
- return 2
- return 0
- if __name__ == "__main__":
- sys.exit(main())
|