about summary refs log tree commit diff stats
path: root/archive/2025/summer/bsc_gerg/src/terminology/models.py
blob: 270751e6cc8cb64e5536da14815059a40db124c3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import uuid
from typing import Any, Optional, Annotated, List
from uuid import UUID

from pydantic import BaseModel, Field


class TextSource(BaseModel):
    id: UUID = Field(UUID)
    text: str


class Definition(BaseModel):
    text: str
    verified: bool
    partial: bool
    source: Optional[TextSource | Any] = None

    def is_combined(self) -> bool:
        return not self.verified and not self.partial

    def is_partial(self) -> bool:
        return not self.verified and self.partial

class Term(BaseModel):
    id: Annotated[UUID, Field(default_factory=uuid.uuid4)]
    text: str
    normalization: Optional[str] = None
    variations: Annotated[List[str], Field(default_factory=list)]
    occurrences: Annotated[List[UUID], Field(default_factory=list)]
    definitions: Annotated[List[Definition], Field(default_factory=list)]

    def normalized_or_text(self):
        return self.normalization if self.normalization is not None else self.text