1
0

format-manifest.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import argparse
  2. import glob
  3. import json
  4. import logging
  5. import os
  6. import sys
  7. from typing import Any
  8. def main() -> int:
  9. parser = argparse.ArgumentParser(description="Format Flatpak manifest")
  10. parser.add_argument(
  11. "manifest_file",
  12. metavar="FILE",
  13. type=str,
  14. help="Manifest file to adjust format for",
  15. )
  16. parser.add_argument(
  17. "--check",
  18. action="store_true",
  19. help="Check for necessary changes only",
  20. default=False,
  21. required=False,
  22. )
  23. parser.add_argument(
  24. "--loglevel", type=str, help="Set log level", default="WARNING", required=False
  25. )
  26. arguments = parser.parse_args()
  27. logging.basicConfig(level=arguments.loglevel, format="%(message)s")
  28. logger = logging.getLogger()
  29. manifest_file = arguments.manifest_file
  30. try:
  31. with open(manifest_file, "r+") as manifest:
  32. manifest_path = os.path.dirname(manifest_file)
  33. manifest_string = manifest.read()
  34. manifest_data = json.loads(manifest_string)
  35. module_list = manifest_data.get("modules", [])
  36. obs_object = module_list[-1]
  37. if type(obs_object) != dict:
  38. logger.error(
  39. f"❌ Last element in modules list is not the obs-studio object"
  40. )
  41. return 2
  42. new_module_list = []
  43. for module in module_list:
  44. if type(module) == str:
  45. if not os.path.isfile(os.path.join(manifest_path, module)):
  46. logger.warning(
  47. f"⚠️ Specified module {os.path.basename(module)} not found."
  48. )
  49. continue
  50. new_module_list.append(module)
  51. new_module_list.sort()
  52. new_module_list.append(obs_object)
  53. manifest_data["modules"] = new_module_list
  54. new_manifest_string = (
  55. f"{json.dumps(manifest_data, indent=4, ensure_ascii=False)}\n"
  56. )
  57. if arguments.check:
  58. if new_module_list != module_list:
  59. logger.error(f"❌ Module list failed order validation")
  60. return 2
  61. elif new_manifest_string != manifest_string:
  62. logger.error(f"❌ Manifest file is not correctly formatted")
  63. return 2
  64. else:
  65. logger.info(f"✅ Module list passed order validation")
  66. return 0
  67. manifest.seek(0)
  68. manifest.truncate()
  69. manifest.write(new_manifest_string)
  70. logger.info(f"✅ Updated manifest file '{manifest_file}")
  71. except IOError:
  72. logger.error(f"❌ Unable to read manifest file '{manifest_file}'")
  73. return 2
  74. return 0
  75. if __name__ == "__main__":
  76. sys.exit(main())