Source code for argus_cli.helpers.formatting

import keyword
from re import sub, match

[docs]def to_caterpillar_case(camel_cased_string: str) -> str: """Replace UpperCase with upper-case and upperCase_Name with upper-case-name and splits into the dictionary levels :param str camel_cased_string: CamelCasedString to convert :rtype: str :returns: caterpillar-cased-string """ if match(r".*[a-z](ID).*", camel_cased_string): camel_cased_string = camel_cased_string.replace("ID", "Id") return sub('(?<!^)(?=[A-Z])', '-', camel_cased_string).replace("_", "-").lower().split(".")[-1]
[docs]def to_snake_case(camel_cased_string: str) -> str: """Replace UpperCase with upper-case and upperCase_Name with upper_case_name and splits into the dictionary levels :param str camel_cased_string: CamelCasedString to convert :rtype: str :returns: snake_cased_string """ if match(r".*[a-z](ID).*", camel_cased_string): camel_cased_string = camel_cased_string.replace("ID", "Id") return sub('(?<!^)(?=[A-Z])', '_', camel_cased_string).lower().split(".")[-1]
[docs]def to_camel_case(snake_cased_string: str) -> str: """Turns snake_cased_strings into snakeCasedStrings, reversing to_snake_case :param str snake_cased_string: snake_cased_string to convert :returns: camelCasedString """ first, *others = snake_cased_string.split("_") # Turn ID back into uppercase return sub(r'(?<=[a-z])(Id)(?=[A-Za-z_]|$)', lambda match: match[1].upper(), ''.join([first.lower(), *map(str.title, others)]))
[docs]def python_name_for(javascript_type: str) -> str: """Find the Python name for a javascript type :param str javascript_type: JavaScript type name, e.g array, string, integer :returns: Name for the type in python :rtype: str """ alternatives = { 'integer': 'int', 'number': 'int', 'float': 'float', 'object': 'dict', 'array': 'list', 'bool': 'bool', 'boolean': 'bool', 'string': 'str', 'null': 'None' } if javascript_type in alternatives: return alternatives[javascript_type.lower()] else: return javascript_type
[docs]def to_safe_name(argument: str) -> str: """Python prevents us from using the built-in keywords as parameter names in functions, so if the API requests any of these keywords, we escape them with an underscore and provide a method to escape and unescape them :param str argument: Argument name to escape, if necessary :returns: _argument if the argument was unsafe """ if keyword.iskeyword(argument): return "_%s" % argument return argument
[docs]def from_safe_name(argument: str) -> str: """Python prevents us from using the built-in keywords as parameter names in functions, so if the API requests any of these keywords, we escape them with an underscore and provide a method to escape and unescape them :param str argument: Argument name to escape, if necessary :returns: _argument if the argument was unsafe """ if argument.startswith("_") and keyword.iskeyword(argument.replace("_", "")): return argument.replace("_", "") return argument