|
| 1 | +from typing import Optional |
| 2 | + |
| 3 | +from pydantic import BaseModel, HttpUrl |
| 4 | + |
| 5 | + |
| 6 | +class Metadata(BaseModel): |
| 7 | + acknowledgement: str |
| 8 | + comment: str |
| 9 | + contributor_name: str |
| 10 | + contributor_role: str |
| 11 | + creator_email: str |
| 12 | + creator_name: str |
| 13 | + creator_url: HttpUrl |
| 14 | + deployment_id: str |
| 15 | + deployment_name: str |
| 16 | + deployment_start: str |
| 17 | + deployment_end: str |
| 18 | + format_version: str |
| 19 | + glider_name: str |
| 20 | + glider_serial: str |
| 21 | + glider_model: str |
| 22 | + glider_instrument_name: str |
| 23 | + glider_wmo: str |
| 24 | + institution: str |
| 25 | + keywords: str |
| 26 | + keywords_vocabulary: str |
| 27 | + license: str |
| 28 | + metadata_link: HttpUrl |
| 29 | + Metadata_Conventions: str |
| 30 | + naming_authority: str |
| 31 | + platform_type: str |
| 32 | + processing_level: str |
| 33 | + project: str |
| 34 | + project_url: HttpUrl |
| 35 | + publisher_email: str |
| 36 | + publisher_name: str |
| 37 | + publisher_url: HttpUrl |
| 38 | + references: str |
| 39 | + sea_name: str |
| 40 | + source: str |
| 41 | + standard_name_vocabulary: str |
| 42 | + summary: str |
| 43 | + transmission_system: str |
| 44 | + wmo_id: str |
| 45 | + |
| 46 | + |
| 47 | +class Device(BaseModel): |
| 48 | + make: str |
| 49 | + model: str |
| 50 | + serial: str |
| 51 | + long_name: Optional[str] = None |
| 52 | + make_model: Optional[str] = None |
| 53 | + factory_calibrated: Optional[str] = None |
| 54 | + calibration_date: Optional[str] = None |
| 55 | + calibration_report: Optional[str] = None |
| 56 | + comment: Optional[str] = None |
| 57 | + |
| 58 | + |
| 59 | +class GliderDevices(BaseModel): |
| 60 | + pressure: Device |
| 61 | + ctd: Device |
| 62 | + optics: Device |
| 63 | + oxygen: Device |
| 64 | + |
| 65 | + |
| 66 | +class NetCDFVariable(BaseModel): |
| 67 | + source: str |
| 68 | + long_name: Optional[str] = None |
| 69 | + standard_name: Optional[str] = None |
| 70 | + units: Optional[str] = None |
| 71 | + axis: Optional[str] = None |
| 72 | + coordinates: Optional[str] = None |
| 73 | + conversion: Optional[str] = None |
| 74 | + comment: Optional[str] = None |
| 75 | + observation_type: Optional[str] = None |
| 76 | + platform: Optional[str] = None |
| 77 | + reference: Optional[str] = None |
| 78 | + valid_max: Optional[float] = None |
| 79 | + valid_min: Optional[float] = None |
| 80 | + coordinate_reference_frame: Optional[str] = None |
| 81 | + instrument: Optional[str] = None |
| 82 | + accuracy: Optional[float] = None |
| 83 | + precision: Optional[float] = None |
| 84 | + resolution: Optional[float] = None |
| 85 | + positive: Optional[str] = None |
| 86 | + reference_datum: Optional[str] = None |
| 87 | + coarsen: Optional[int] = None |
| 88 | + |
| 89 | + |
| 90 | +class NetCDFVariables(BaseModel): |
| 91 | + timebase: Optional[NetCDFVariable] = ( |
| 92 | + None #! Is this required? `example-slocum`` doesn't have it |
| 93 | + ) |
| 94 | + time: NetCDFVariable |
| 95 | + latitude: NetCDFVariable |
| 96 | + longitude: NetCDFVariable |
| 97 | + heading: NetCDFVariable |
| 98 | + pitch: NetCDFVariable |
| 99 | + roll: NetCDFVariable |
| 100 | + conductivity: NetCDFVariable |
| 101 | + temperature: NetCDFVariable |
| 102 | + pressure: NetCDFVariable |
| 103 | + chlorophyll: NetCDFVariable |
| 104 | + cdom: NetCDFVariable |
| 105 | + backscatter_700: NetCDFVariable |
| 106 | + oxygen_concentration: NetCDFVariable |
| 107 | + temperature_oxygen: Optional[NetCDFVariable] = ( |
| 108 | + None #! Is this required? `example-slocum`` doesn't have it |
| 109 | + ) |
| 110 | + |
| 111 | + |
| 112 | +class ProfileVariable(BaseModel): |
| 113 | + comment: str |
| 114 | + long_name: str |
| 115 | + valid_max: Optional[float] = None |
| 116 | + valid_min: Optional[float] = None |
| 117 | + observation_type: Optional[str] = None |
| 118 | + platform: Optional[str] = None |
| 119 | + standard_name: Optional[str] = None |
| 120 | + units: Optional[str] = None |
| 121 | + calendar: Optional[str] = None |
| 122 | + type: Optional[str] = None |
| 123 | + calibration_date: Optional[str] = None |
| 124 | + calibration_report: Optional[str] = None |
| 125 | + factory_calibrated: Optional[str] = None |
| 126 | + make_model: Optional[str] = None |
| 127 | + serial_number: Optional[str] = None |
| 128 | + |
| 129 | + |
| 130 | +class ProfileVariables(BaseModel): |
| 131 | + profile_id: ProfileVariable |
| 132 | + profile_time: ProfileVariable |
| 133 | + profile_time_start: ProfileVariable |
| 134 | + profile_time_end: ProfileVariable |
| 135 | + profile_lat: ProfileVariable |
| 136 | + profile_lon: ProfileVariable |
| 137 | + u: ProfileVariable |
| 138 | + v: ProfileVariable |
| 139 | + lon_uv: ProfileVariable |
| 140 | + lat_uv: ProfileVariable |
| 141 | + time_uv: ProfileVariable |
| 142 | + instrument_ctd: ProfileVariable |
0 commit comments