Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import re
  2. from typing import Dict
  3. from million.model.message import Message
  4. import million.analyze.media_count_mapper as mcm
  5. _memoization: Dict[Message, int] = {}
  6. _dns_solver: mcm.MediaCountMapper = mcm.MediaCountMapper()
  7. def get(msg: Message) -> int:
  8. """
  9. Returns the estimated value counted in this message
  10. """
  11. return _memoization.get(msg, _compute(msg))
  12. def reset(msg: Message) -> None:
  13. """
  14. Drop memorized value of this Message
  15. """
  16. if msg in _memoization:
  17. _memoization.pop(msg)
  18. def reset() -> None:
  19. """
  20. Drop every memorized message value
  21. """
  22. _memoization.clear()
  23. def _compute(msg: Message) -> int:
  24. value = _dns_solver.solve(msg) or _computeContent(msg) or None
  25. _memoization[msg] = value
  26. return value
  27. def _computeContent(msg: Message) -> int:
  28. if not msg.content:
  29. return
  30. s = re.sub(r'[^\s\d.,]|[.,]{2,}',"", msg.content)
  31. match = re.search(r"\d+", s)
  32. if match:
  33. return int(match.group())
  34. return None