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
« prev ^ index » next coverage.py v7.13.1, created at 2026-01-10 00:11 -0800
1# =====================================================
2# Imports
3# =====================================================
4from typing import Annotated
6from pydantic import Field, field_validator, ValidationInfo
8from mt_metadata.base import MetadataBase
9from mt_metadata.common import Comment
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 ]
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 ]
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 ]
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 ]
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 ]
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