This :

        validators.validate_required(value, self._required)
        if not value:
            return None
        validators.validate_choice(value, self._choices)


Instead of :

        validators.validate_required(value, self._required)
        validators.validate_choice(value, self._choices)
        if not value:
            return None

Looks to correct the String type problem