def test_multilingual_string_without_matching_locale_should_explode(): mls = MultilingualStringType() with pytest.raises(ConversionError): mls.to_primitive({'fr_FR': 'serpent'}) with pytest.raises(ConversionError): mls.to_primitive({'en_US': 'snake'}, context={'locale': 'fr_FR'})
def test_multilingual_string_should_emit_string_with_explicit_locale(): mls = MultilingualStringType(default_locale='en_US') assert mls.to_primitive({ 'en_US': 'snake', 'fr_FR': 'serpent' }, context={'locale': 'fr_FR'}) == 'serpent'
def test_multilingualstring_should_validate_length(): MultilingualStringType(min_length=3).validate({'en_US': 'foo'}) MultilingualStringType(max_length=3).validate({'en_US': 'foo'}) with pytest.raises(ValidationError): MultilingualStringType(min_length=4).validate({'en_US': 'foo'}) with pytest.raises(ValidationError): MultilingualStringType(max_length=2).validate({'en_US': 'foo'})
def test_multilingualstring_should_validate_regex(): MultilingualStringType(regex='^[a-z]*$').validate({'en_US': 'foo'}) with pytest.raises(ValidationError): MultilingualStringType(regex='^[a-z]*$').validate({'en_US': '123'}) with pytest.raises(ValidationError): MultilingualStringType(locale_regex='^\d*$').validate({'en_US': 'foo'}) assert MultilingualStringType(locale_regex=None).validate_regex( {'en_US': 'foo'}) is None
def test_multilingual_string_should_accept_lists_of_locales(): strings = { 'en_US': 'snake', 'fr_FR': 'serpent', 'es_MX': 'serpiente', } mls = MultilingualStringType(default_locale=['foo', 'fr_FR', 'es_MX']) assert mls.to_primitive(strings) == 'serpent' assert mls.to_primitive(strings, context={'locale': ['es_MX', 'bar']}) == 'serpiente' mls = MultilingualStringType() assert mls.to_primitive(strings, context={'locale': ['foo', 'es_MX', 'fr_FR']}) == 'serpiente'
class Model(Entity): name = StringType(required=True, deserialize_from=('name', 'model_name')) parameters = ListType(ModelType(ModelParameter), default=None, deserialize_from=('parameters', 'params')) file = StringType(deserialize_from=('file', 'model_file', 'filename')) template = StringType() display_options = DictType(BooleanType, default=None) output_options = DictType(ListType(StringType), default={}) # Multilingual fields title = MultilingualStringType(default_locale=settings.FALLBACK_LOCALE) description = MultilingualStringType( default_locale=settings.FALLBACK_LOCALE) instructions = DictType( MultilingualStringType(default_locale=settings.FALLBACK_LOCALE)) class Options: roles = {'DTO': blacklist('file', 'template')} serialize_when_none = False
class ModelParameter(Entity): id = StringType(required=True) type = StringType(default='number') options = DictType(StringType, default=None) # Multilingual fields metadata = DictType( MultilingualStringType(default_locale=settings.FALLBACK_LOCALE)) class Options: serialize_when_none = False
def test_multilingualstring_should_only_take_certain_types(): mls = MultilingualStringType() mls(None) mls({}) with pytest.raises(ValueError): mls(123) with pytest.raises(ValueError): mls([]) with pytest.raises(ValueError): mls('foo')
def test_multilingualstring_should_handle_none(): mls = MultilingualStringType(default_locale='en_US') assert mls.to_primitive(None) is None
def test_multilingualstring_should_handle_castable_values(): mls = MultilingualStringType(default_locale='en_US') assert mls.to_primitive({'en_US': 123}) == u'123'
def test_multilingual_string_should_require_a_locale(): mls = MultilingualStringType() with pytest.raises(ConversionError): mls.to_primitive({'foo': 'bar'})
def test_multilingualstring_should_enforce_noncastable_values(): mls = MultilingualStringType(default_locale='en_US') with pytest.raises(ConversionError): mls.to_primitive({'en_US': 123.0}) == u'123'
def test_multilingual_string_should_emit_string_with_explicit_locale(): mls = MultilingualStringType(default_locale='en_US') assert mls.to_primitive( {'en_US': 'snake', 'fr_FR': 'serpent'}, context={'locale': 'fr_FR'}) == 'serpent'
class Animal(XMLModel): text = MultilingualStringType()