Skip to content

Commit

Permalink
Add ISO 639 part 3 validator for model field lang
Browse files Browse the repository at this point in the history
  • Loading branch information
johannesdewit committed Feb 11, 2024
1 parent 68a40fd commit 04eca7c
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 5 deletions.
10 changes: 8 additions & 2 deletions heidegger_index/migrations/0013_lemma_lang.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# Generated by Django 4.2.9 on 2024-02-09 08:50
# Generated by Django 4.1 on 2024-02-11 23:08

from django.db import migrations, models
import heidegger_index.validators


class Migration(migrations.Migration):

dependencies = [
("heidegger_index", "0012_lemma_zeno"),
]
Expand All @@ -12,6 +14,10 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name="lemma",
name="lang",
field=models.CharField(max_length=3, null=True),
field=models.CharField(
max_length=3,
null=True,
validators=[heidegger_index.validators.validate_iso639_3_lang],
),
),
]
4 changes: 2 additions & 2 deletions heidegger_index/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
slugify,
contains_page_range,
)
from heidegger_index.validators import validate_gnd, validate_zeno
from heidegger_index.validators import validate_gnd, validate_zeno, validate_iso639_3_lang


class Work(models.Model):
Expand Down Expand Up @@ -80,7 +80,7 @@ class Lemma(models.Model):
related = models.ManyToManyField("self", symmetrical=True)
type = models.CharField(max_length=1, null=True, choices=LemmaType.list_choices())
description = models.TextField(null=True)
lang = models.CharField(max_length=3, null=True)
lang = models.CharField(max_length=3, null=True, validators=[validate_iso639_3_lang])

urn = models.URLField(
MetadataType.URN.label,
Expand Down
12 changes: 12 additions & 0 deletions heidegger_index/validators.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from django.core.exceptions import ValidationError
from .constants import MetadataType
from iso639 import Lang
from iso639.exceptions import InvalidLanguageValue

import re

Expand Down Expand Up @@ -56,3 +58,13 @@ def validate_dk(value: int | str):

def validate_zeno(value: str | int):
validate_simple_regex(value, ZENO_REGEX, MetadataType.ZENO.label)


def validate_iso639_3_lang(value: str):
try:
lang_code = Lang(value)
except InvalidLanguageValue as e:
raise ValidationError(e.msg)

if lang_code.pt3 != value:
raise ValidationError(f'"{value}" is not a ISO 639 part 3 language code.')
3 changes: 2 additions & 1 deletion requirements/production.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,5 @@ aenum==3.*
django-compressor==4.*
django-libsass==0.*
python-decouple==3.*
lxml==5.*
lxml==5.*
iso639-lang

0 comments on commit 04eca7c

Please sign in to comment.