compare_namespaces.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #!/usr/bin/env python
  2. """Helper script to compare two argparse.Namespace objects."""
  3. from argparse import Namespace # noqa
  4. def main():
  5. ns1 = eval(input("Namespace 1: "))
  6. ns2 = eval(input("Namespace 2: "))
  7. def keys(ns):
  8. ks = set()
  9. for k in dir(ns):
  10. if not k.startswith("_"):
  11. ks.add(k)
  12. return ks
  13. k1 = keys(ns1)
  14. k2 = keys(ns2)
  15. def print_keys(ks, ns1, ns2=None):
  16. for k in ks:
  17. if ns2 is None:
  18. print("{}\t{}".format(k, getattr(ns1, k, None)))
  19. else:
  20. print(
  21. "{}\t{}\t{}".format(k, getattr(ns1, k, None), getattr(ns2, k, None))
  22. )
  23. print("Keys unique to namespace 1:")
  24. print_keys(k1 - k2, ns1)
  25. print()
  26. print("Keys unique to namespace 2:")
  27. print_keys(k2 - k1, ns2)
  28. print()
  29. print("Overlapping keys with different values:")
  30. ks = [k for k in k1 & k2 if getattr(ns1, k, "None") != getattr(ns2, k, "None")]
  31. print_keys(ks, ns1, ns2)
  32. print()
  33. if __name__ == "__main__":
  34. main()