oe-trim-schemas 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #! /usr/bin/env python3
  2. #
  3. # SPDX-License-Identifier: GPL-2.0-only
  4. #
  5. import sys
  6. try:
  7. import xml.etree.cElementTree as etree
  8. except:
  9. import xml.etree.ElementTree as etree
  10. def child (elem, name):
  11. for e in elem.getchildren():
  12. if e.tag == name:
  13. return e
  14. return None
  15. def children (elem, name=None):
  16. l = elem.getchildren()
  17. if name:
  18. l = [e for e in l if e.tag == name]
  19. return l
  20. if len(sys.argv) < 2 or sys.argv[1] in ('-h', '--help'):
  21. print('oe-trim-schemas: error: the following arguments are required: schema\n'
  22. 'Usage: oe-trim-schemas schema\n\n'
  23. 'OpenEmbedded trim schemas - remove unneeded schema locale translations\n'
  24. ' from gconf schema files\n\n'
  25. 'arguments:\n'
  26. ' schema gconf schema file to trim\n')
  27. sys.exit(2)
  28. xml = etree.parse(sys.argv[1])
  29. for schema in child(xml.getroot(), "schemalist").getchildren():
  30. e = child(schema, "short")
  31. if e is not None:
  32. schema.remove(e)
  33. e = child(schema, "long")
  34. if e is not None:
  35. schema.remove(e)
  36. for locale in children(schema, "locale"):
  37. # One locale must exist so leave C locale...
  38. a = locale.attrib.get("name")
  39. if a == 'C':
  40. continue
  41. e = child(locale, "default")
  42. if e is None:
  43. schema.remove(locale)
  44. else:
  45. e = child(locale, "short")
  46. if e is not None:
  47. locale.remove(e)
  48. e = child(locale, "long")
  49. if e is not None:
  50. locale.remove(e)
  51. xml.write(sys.stdout, "UTF-8")