Skip to content

Instantly share code, notes, and snippets.

@Menziess
Created October 18, 2023 12:16
Show Gist options
  • Save Menziess/37cddbfb3ea6d937317f859c41b55800 to your computer and use it in GitHub Desktop.
Save Menziess/37cddbfb3ea6d937317f859c41b55800 to your computer and use it in GitHub Desktop.
Convert input string to snake-, camel-, kebab- or pascalcase.
from re import findall
from toolz.curried import curry, map, pipe
def to_something_case(text: str, case='snake') -> str:
"""Convert input string to snake-, camel-, kebab- or pascalcase."""
if not text:
return text
first_char, sep, other_first_chars = {
'snake': (str.lower, '_', str.lower),
'camel': (str.lower, '', str.title),
'kebab': (str.lower, '-', str.lower),
'pascal': (str.title, '', str.title),
}[case]
result = pipe(
text,
curry(findall)(r'[A-Z][a-z]*|[a-z]+'),
map(str.lower),
map(other_first_chars),
sep.join,
)
return first_char(result[0]) + result[1:]
def test_to_something_case():
"""Should convert strings to camelcase."""
assert to_something_case('My sentence!') == 'my_sentence'
assert to_something_case('My sentence!', case='snake') == 'my_sentence'
assert to_something_case('My sentence!', case='camel') == 'mySentence'
assert to_something_case('My sentence!', case='kebab') == 'my-sentence'
assert to_something_case('My sentence!', case='pascal') == 'MySentence'
assert to_something_case('camelCase') == 'camel_case'
assert to_something_case('PascalCase') == 'pascal_case'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment