Source code for marshmallow_utils.fields.isolanguage

# -*- coding: utf-8 -*-
#
# Copyright (C) 2016-2020 CERN.
#
# Marshmallow-Utils is free software; you can redistribute it and/or modify
# it under the terms of the MIT License; see LICENSE file for more details.

"""ISO language string field."""

import pycountry
from marshmallow import ValidationError

from .sanitizedunicode import SanitizedUnicode


def _(x):
    return x


def validate_iso639_3(value):
    """Validate that language is ISO 639-3 value."""
    if not pycountry.languages.get(alpha_3=value):
        raise ValidationError(
            _("Language must be a lower-cased 3-letter ISO 639-3 string."),
            field_name=["language"],
        )


[docs]class ISOLangString(SanitizedUnicode): """ISO language string field.""" def __init__(self, validate=validate_iso639_3, *args, **kwargs): """ISO language string field initialization.""" super(ISOLangString, self).__init__(validate=validate, *args, **kwargs)