Source code for jangle.models.scripts

import csv

import requests
from django.db import models

from jangle.utils import BatchedCreateManager


[docs]class ScriptManager(BatchedCreateManager["Script"]):
[docs] def register(self, clear=True, batch_size=64) -> None: """Saves IS0 15924 scripts from unicode.org to the database. See https://www.unicode.org/iso15924/iso15924.txt. """ r = requests.get("https://www.unicode.org/iso15924/iso15924.txt") r.raise_for_status() def line_is_valid(line: str) -> bool: line = line.strip() return bool(line and not line.startswith("#")) if clear: self.all().delete() fieldnames = [ "code", "no", "names_en", "names_fr", "pva", "unicode_version", "script_date", ] self.batched_create( ( self.model( **{key: val or None for key, val in row.items()}, ) for row in csv.DictReader( filter(line_is_valid, r.iter_lines(decode_unicode=True)), fieldnames, delimiter=";", ) ), batch_size, )
[docs]class Script(models.Model): """Represents an ISO 15924 script, saved from https://www.unicode.org/iso15924/. """ code = models.CharField( "ISO 15924 code", unique=True, max_length=4, ) """ISO 15924 code.""" no = models.PositiveSmallIntegerField( "ISO 15924 number", unique=True, ) """ISO 15924 number.""" names_en = models.CharField( "English names", unique=True, max_length=254, ) """English names.""" names_fr = models.CharField( "noms français", unique=True, max_length=254, ) """French names.""" pva = models.CharField( "property value alias", null=True, max_length=150, ) """Unicode property value alias. See https://www.unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt. """ unicode_version = models.CharField(null=True, max_length=12) """""" script_date = models.DateField("date") """Date.""" @property def no_str(self) -> str: """Formatted string of ISO 15924 number.""" return "{:03d}".format(self.no) def __str__(self) -> str: return self.code objects = ScriptManager() class Meta: verbose_name = "ISO 15924 script"