Source code for dict_validator.fields.regexp.underscore_case_field

from dict_validator.fields import String


# code duplication is here for readability of a regex
# pylint: disable=duplicate-code
REGEXP = "".join([
    r"^",
    r"([a-z]{1}[a-z0-9]+)",
    r"{1}",
    r"(_{1}[a-z0-9]{1}[a-z0-9]+)",
    r"*",
    r"$"
])


[docs]class UnderscoreCase(String): """ >>> from dict_validator import validate >>> class Schema: ... field = UnderscoreCase() >>> list(validate(Schema, {"field": 'value'})) [] >>> list(validate(Schema, {"field": 'value_with_parts'})) [] Can contain digits >>> list(validate(Schema, {"field": 'value_with_12'})) [] Can't contain upper case chars >>> list(validate(Schema, {"field": 'wrong_Value'})) [(['field'], 'Did not match Regexp(underscore-case)')] Can't start with an int >>> list(validate(Schema, {"field": '012wrong_value'})) [(['field'], 'Did not match Regexp(underscore-case)')] Can't start with an underscore >>> list(validate(Schema, {"field": '_wrong_value'})) [(['field'], 'Did not match Regexp(underscore-case)')] Can't end with an underscore >>> list(validate(Schema, {"field": 'wrong_value_'})) [(['field'], 'Did not match Regexp(underscore-case)')] Each part should be at least two symbols long (here - 1 - V) >>> list(validate(Schema, {"field": 'wrong_v'})) [(['field'], 'Did not match Regexp(underscore-case)')] Even the first part should contain at least two symbols >>> list(validate(Schema, {"field": 'w_rong_value'})) [(['field'], 'Did not match Regexp(underscore-case)')] """ def __init__(self, **kwargs): super(UnderscoreCase, self).__init__( REGEXP,
"underscore-case", **kwargs)