30 lines
919 B
Python
30 lines
919 B
Python
|
"""
|
||
|
Taken from
|
||
|
https://github.com/mahenzon/ri-sdk-python-wrapper/blob/master/ri_sdk_codegen/utils/case_converter.py
|
||
|
"""
|
||
|
|
||
|
|
||
|
def camel_case_to_snake_case(input_str: str) -> str:
|
||
|
"""
|
||
|
>>> camel_case_to_snake_case("SomeSDK")
|
||
|
'some_sdk'
|
||
|
>>> camel_case_to_snake_case("RServoDrive")
|
||
|
'r_servo_drive'
|
||
|
>>> camel_case_to_snake_case("SDKDemo")
|
||
|
'sdk_demo'
|
||
|
"""
|
||
|
chars = []
|
||
|
for c_idx, char in enumerate(input_str):
|
||
|
if c_idx and char.isupper():
|
||
|
nxt_idx = c_idx + 1
|
||
|
# idea of the flag is to separate abbreviations
|
||
|
# as new words, show them in lower case
|
||
|
flag = nxt_idx >= len(input_str) or input_str[nxt_idx].isupper()
|
||
|
prev_char = input_str[c_idx - 1]
|
||
|
if prev_char.isupper() and flag:
|
||
|
pass
|
||
|
else:
|
||
|
chars.append("_")
|
||
|
chars.append(char.lower())
|
||
|
return "".join(chars)
|