Coverage for whole_app/models.py: 100%

26 statements  

« prev     ^ index     » next       coverage.py v7.10.4, created at 2025-08-21 23:45 +0000

1# pylint: disable=no-member 

2"""Models for input/output.""" 

3 

4import typing 

5 

6import pydantic 

7 

8from .settings import SETTINGS, AvailableLanguages, AvailableLanguagesType 

9 

10 

11class OneCorrection(pydantic.BaseModel): 

12 first_position: int 

13 last_position: int 

14 word: str 

15 suggestions: set[str] 

16 

17 

18class SpellCheckRequest(pydantic.BaseModel): 

19 text: str = pydantic.Field(..., examples=["Привед как дила"]) 

20 language: AvailableLanguagesType 

21 user_name: str | None = pydantic.Field( 

22 None, 

23 examples=["username"], 

24 pattern=SETTINGS.username_regex, 

25 min_length=SETTINGS.username_min_length, 

26 max_length=SETTINGS.username_max_length, 

27 ) 

28 exclude_urls: bool = True 

29 

30 

31class SpellCheckResponse(pydantic.BaseModel): 

32 text: str 

33 language: str 

34 corrections: list[OneCorrection] 

35 

36 

37class UserDictionaryRequest(pydantic.BaseModel): 

38 user_name: str = pydantic.Field( 

39 examples=["username"], 

40 pattern=SETTINGS.username_regex, 

41 min_length=SETTINGS.username_min_length, 

42 max_length=SETTINGS.username_max_length, 

43 ) 

44 

45 

46class UserDictionaryRequestWithWord(UserDictionaryRequest): 

47 exception_word: str = pydantic.Field(..., examples=["привед"]) 

48 

49 

50class HealthCheckResponse(pydantic.BaseModel): 

51 service_name: str = SETTINGS.service_name 

52 supported_languages: tuple[str, ...] = AvailableLanguages 

53 version: str = SETTINGS.current_version 

54 status: typing.Literal["ok", "notok"] = "ok"