convert_case.py 715 B

12345678910111213141516171819202122232425
  1. # uses code from https://github.com/daveoncode/python-string-utils
  2. import re
  3. __all__ = ["camel_to_snake", "snake_to_camel"]
  4. _re_camel_to_snake = re.compile(r"([a-z]|[A-Z0-9]+)(?=[A-Z])")
  5. _re_snake_to_camel = re.compile(r"(_)([a-z\d])")
  6. def camel_to_snake(s: str) -> str:
  7. """Convert from CamelCase to snake_case"""
  8. return _re_camel_to_snake.sub(r"\1_", s).lower()
  9. def snake_to_camel(s: str, upper: bool = True) -> str:
  10. """Convert from snake_case to CamelCase
  11. If upper is set, then convert to upper CamelCase, otherwise the first character
  12. keeps its case.
  13. """
  14. s = _re_snake_to_camel.sub(lambda m: m.group(2).upper(), s)
  15. if upper:
  16. s = s[:1].upper() + s[1:]
  17. return s