languages.py 928 B

12345678910111213141516171819202122232425262728293031
  1. from argparse import Namespace
  2. from collections import defaultdict
  3. from typing import Dict, List
  4. import numpy
  5. from labours.objects import DevDay
  6. def show_languages(
  7. args: Namespace,
  8. name: str,
  9. start_date: int,
  10. end_date: int,
  11. people: List[str],
  12. days: Dict[int, Dict[int, DevDay]],
  13. ) -> None:
  14. devlangs = defaultdict(lambda: defaultdict(lambda: numpy.zeros(3, dtype=int)))
  15. for day, devs in days.items():
  16. for dev, stats in devs.items():
  17. for lang, vals in stats.Languages.items():
  18. devlangs[dev][lang] += vals
  19. devlangs = sorted(devlangs.items(), key=lambda p: -sum(x.sum() for x in p[1].values()))
  20. for dev, ls in devlangs:
  21. print()
  22. print("#", people[dev])
  23. ls = sorted(((vals.sum(), lang) for lang, vals in ls.items()), reverse=True)
  24. for vals, lang in ls:
  25. if lang:
  26. print("%s: %d" % (lang, vals))