_cli.py 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import argparse
  2. import pathlib
  3. import sys
  4. import typing
  5. import yaml
  6. import yamily
  7. import yamily.yaml
  8. def _read(path: pathlib.Path) -> typing.Iterator[yamily.Person]:
  9. if path.is_dir():
  10. for file_path in path.glob("**/*.yml"):
  11. for person in _read(file_path):
  12. yield person
  13. else:
  14. yield yamily.yaml.read(path)
  15. def _list() -> None:
  16. argparser = argparse.ArgumentParser(
  17. description="Recursively find yamily family tree members and print as YAML list."
  18. )
  19. argparser.add_argument(
  20. "paths", nargs="+", metavar="path", help="path to yamily .yml file or folder"
  21. )
  22. args = argparser.parse_args()
  23. collection = yamily.PersonCollection()
  24. for path in args.paths:
  25. for person in _read(pathlib.Path(path)):
  26. collection.add_person(person)
  27. yaml.dump(
  28. sorted(collection, key=lambda p: p.identifier),
  29. sys.stdout,
  30. Dumper=yamily.yaml.Dumper,
  31. default_flow_style=False,
  32. allow_unicode=True,
  33. )