diff --git a/graphene/utils/str_converters.py b/graphene/utils/str_converters.py index 2a214f06..f0d41553 100644 --- a/graphene/utils/str_converters.py +++ b/graphene/utils/str_converters.py @@ -4,10 +4,22 @@ import re # Adapted from this response in Stackoverflow # http://stackoverflow.com/a/19053800/1072990 def to_camel_case(snake_str): + + def _camel_case_convert(components): + return components[0] + "".join(x.capitalize() if x else "_" for x in components[1:]) + + leading_underscore = False + if snake_str.startswith('_'): + leading_underscore = True + snake_str = snake_str[1:] + components = snake_str.split("_") + # We capitalize the first letter of each component except the first one # with the 'capitalize' method and join them together. - return components[0] + "".join(x.capitalize() if x else "_" for x in components[1:]) + if leading_underscore: + return "_" + _camel_case_convert(components) + return _camel_case_convert(components) # From this response in Stackoverflow diff --git a/graphene/utils/tests/test_str_converters.py b/graphene/utils/tests/test_str_converters.py index 307d6877..f37b355a 100644 --- a/graphene/utils/tests/test_str_converters.py +++ b/graphene/utils/tests/test_str_converters.py @@ -17,3 +17,4 @@ def test_camel_case(): assert to_camel_case("snakes_on_a__plane") == "snakesOnA_Plane" assert to_camel_case("i_phone_hysteria") == "iPhoneHysteria" assert to_camel_case("field_i18n") == "fieldI18n" + assert to_camel_case("_private_field") == "_privateField"