obs-studio/build-aux/format-manifest.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

97 lines
2.8 KiB
Python
Raw Normal View History

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())