Coverage for C: \ Users \ peaco \ OneDrive \ Documents \ GitHub \ mt_metadata \ mt_metadata \ timeseries \ timing_system.py: 94%

16 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-01-10 00:11 -0800

1# ===================================================== 

2# Imports 

3# ===================================================== 

4from typing import Annotated 

5 

6from pydantic import Field, field_validator, ValidationInfo 

7 

8from mt_metadata.base import MetadataBase 

9from mt_metadata.common import Comment 

10 

11 

12# ===================================================== 

13class TimingSystem(MetadataBase): 

14 comments: Annotated[ 

15 Comment, 

16 Field( 

17 default_factory=Comment, 

18 description="Any comment on the timing system.", 

19 alias=None, 

20 json_schema_extra={ 

21 "units": None, 

22 "required": False, 

23 "examples": "GPS locked with internal quartz clock", 

24 }, 

25 ), 

26 ] 

27 

28 drift: Annotated[ 

29 float, 

30 Field( 

31 default=0.0, 

32 description="Estimated drift of the timing system.", 

33 alias=None, 

34 json_schema_extra={ 

35 "units": "seconds", 

36 "required": True, 

37 "examples": "0.001", 

38 }, 

39 ), 

40 ] 

41 

42 type: Annotated[ 

43 str, 

44 Field( 

45 default="GPS", 

46 description="Type of timing system.", 

47 alias=None, 

48 json_schema_extra={ 

49 "units": None, 

50 "required": True, 

51 "examples": "GPS", 

52 }, 

53 ), 

54 ] 

55 

56 uncertainty: Annotated[ 

57 float, 

58 Field( 

59 default=0.0, 

60 description="Estimated uncertainty of the timing system.", 

61 alias=None, 

62 json_schema_extra={ 

63 "units": "seconds", 

64 "required": True, 

65 "examples": "0.0002", 

66 }, 

67 ), 

68 ] 

69 

70 n_satellites: Annotated[ 

71 int | None, 

72 Field( 

73 default=None, 

74 description="Number of satellites used for timing.", 

75 alias=None, 

76 json_schema_extra={ 

77 "units": None, 

78 "required": False, 

79 "examples": "6", 

80 }, 

81 ), 

82 ] 

83 

84 @field_validator("comments", mode="before") 

85 @classmethod 

86 def validate_comments(cls, value, info: ValidationInfo) -> Comment: 

87 """ 

88 Validate that the value is a valid comment. 

89 """ 

90 if isinstance(value, str): 

91 return Comment(value=value) 

92 return value