convert.py 1007 B

123456789101112131415161718192021222324252627282930313233343536
  1. from collections import Counter
  2. import re
  3. def remove_extra_lines(s:str):
  4. # Alternatively: os.linesep.join([line for line in s.splitlines() if line])
  5. return re.sub('\n+', '\n', s)
  6. def remove_email_extra(s:str):
  7. s = remove_extra_lines(s)
  8. return s.replace("=20", "").replace('"3D', "").replace("=\n", "")
  9. def remove_email_content_id(s:str, repl="<ID>"):
  10. return re.sub(r"(?<================)[0-9]+(?===)", repl, s)
  11. def payloads_to_dict(*parts):
  12. data = {}
  13. for part in parts:
  14. payload = part.get_payload()
  15. key = part.get_content_type()
  16. if key in data:
  17. new_key = key
  18. n = 0
  19. while new_key in data:
  20. n += 1
  21. new_key = key + f"_{n}"
  22. key = new_key
  23. if isinstance(payload, str):
  24. data[key] = payload
  25. elif payload is None:
  26. # Most likely empty message
  27. pass
  28. else:
  29. data[key] = payloads_to_dict(*payload)
  30. return data