terra.models.v2.samples

  1#  Copyright 2022 Terra Enabling Developers Limited
  2#
  3#  Licensed under the Apache License, Version 2.0 (the "License");
  4#  you may not use this file except in compliance with the License.
  5#  You may obtain a copy of the License at
  6#
  7#      http://www.apache.org/licenses/LICENSE-2.0
  8#
  9#  Unless required by applicable law or agreed to in writing, software
 10#  distributed under the License is distributed on an "AS IS" BASIS,
 11#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 12#  See the License for the specific language governing permissions and
 13#  limitations under the License.
 14import dataclasses
 15import typing
 16
 17from terra.models import base_model
 18
 19__all__ = [
 20    "GlucoseDataSample",
 21    "HeartRateDataSample",
 22    "LapSample",
 23    "HeartRateVariabilityDataSampleRMSSD",
 24    "HeartRateVariabilityDataSampleSDNN",
 25    "DistanceSample",
 26    "StepSample",
 27    "ElevationSample",
 28    "PositionSample",
 29    "PowerSample",
 30    "SpeedSample",
 31    "CadenceSample",
 32    "ActivityLevelSample",
 33    "METSample",
 34    "TSSSample",
 35    "SleepHypnogramSample",
 36    "OxygenSaturationSample",
 37    "BreathSample",
 38    "SnoringSample",
 39    "StressSample",
 40    "BloodPressureSample",
 41    "MeasurementDataSample",
 42    "BodyTemperatureSample",
 43    "SkinTemperatureSample",
 44    "AmbientTemperatureSample",
 45    "TemperatureSample",
 46    "OtherDeviceData",
 47    "HydrationMeasurementSample",
 48    "Vo2MaxSample",
 49    "PulseVelocitySample",
 50    "AFibClassificationSample",
 51    "DrinkSample",
 52]
 53
 54
 55@dataclasses.dataclass
 56class GlucoseDataSample(base_model.TerraDataModel):
 57    timestamp: typing.Optional[str] = dataclasses.field(default=None)
 58    blood_glucose_mg_per_dL: typing.Optional[int] = dataclasses.field(default=None)
 59    glucose_level_flag: typing.Optional[int] = dataclasses.field(default=None)
 60    trend_arrow: typing.Optional[int] = dataclasses.field(default=None)
 61
 62
 63@dataclasses.dataclass
 64class HeartRateDataSample(base_model.TerraDataModel):
 65    timestamp: typing.Optional[str] = dataclasses.field(default=None)
 66    bpm: typing.Optional[float] = dataclasses.field(default=None)
 67
 68
 69@dataclasses.dataclass
 70class LapSample(base_model.TerraDataModel):
 71    start_time: typing.Optional[str] = dataclasses.field(default=None)
 72    distance_meters: typing.Optional[float] = dataclasses.field(default=None)
 73    calories: typing.Optional[float] = dataclasses.field(default=None)
 74
 75
 76@dataclasses.dataclass
 77class HeartRateVariabilityDataSampleRMSSD(base_model.TerraDataModel):
 78    timestamp: typing.Optional[str] = dataclasses.field(default=None)
 79    hrv_rmssd: typing.Optional[float] = dataclasses.field(default=None)
 80
 81
 82@dataclasses.dataclass
 83class HeartRateVariabilityDataSampleSDNN(base_model.TerraDataModel):
 84    timestamp: typing.Optional[str] = dataclasses.field(default=None)
 85    hrv_sdnn: typing.Optional[float] = dataclasses.field(default=None)
 86
 87
 88@dataclasses.dataclass
 89class DistanceSample(base_model.TerraDataModel):
 90    timestamp: typing.Optional[str] = dataclasses.field(default=None)
 91    distance_meters: typing.Optional[float] = dataclasses.field(default=None)
 92    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)
 93
 94
 95@dataclasses.dataclass
 96class StepSample(base_model.TerraDataModel):
 97    timestamp: typing.Optional[str] = dataclasses.field(default=None)
 98    steps: typing.Optional[float] = dataclasses.field(default=None)
 99    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)
100
101
102@dataclasses.dataclass
103class CalorieSample(base_model.TerraDataModel):
104    timestamp: typing.Optional[str] = dataclasses.field(default=None)
105    calories: typing.Optional[float] = dataclasses.field(default=None)
106    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)
107
108
109@dataclasses.dataclass
110class FloorsClimbedSample(base_model.TerraDataModel):
111    timestamp: typing.Optional[str] = dataclasses.field(default=None)
112    floors_climbed: typing.Optional[float] = dataclasses.field(default=None)
113    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)
114
115
116@dataclasses.dataclass
117class ElevationSample(base_model.TerraDataModel):
118    timestamp: typing.Optional[str] = dataclasses.field(default=None)
119    elev_meters: typing.Optional[float] = dataclasses.field(default=None)
120    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)
121
122
123@dataclasses.dataclass
124class PositionSample(base_model.TerraDataModel):
125    timestamp: typing.Optional[str] = dataclasses.field(default=None)
126    coords_lat_lng_deg: typing.List[float] = dataclasses.field(default_factory=list)
127    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)
128
129
130@dataclasses.dataclass
131class PowerSample(base_model.TerraDataModel):
132    timestamp: typing.Optional[str] = dataclasses.field(default=None)
133    watts: typing.Optional[float] = dataclasses.field(default=None)
134    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)
135
136
137@dataclasses.dataclass
138class SpeedSample(base_model.TerraDataModel):
139    timestamp: typing.Optional[str] = dataclasses.field(default=None)
140    speed_meters_per_second: typing.Optional[float] = dataclasses.field(default=None)
141    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)
142
143
144@dataclasses.dataclass
145class CadenceSample(base_model.TerraDataModel):
146    timestamp: typing.Optional[str] = dataclasses.field(default=None)
147    cadence_rpm: typing.Optional[float] = dataclasses.field(default=None)
148    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)
149
150
151@dataclasses.dataclass
152class ActivityLevelSample(base_model.TerraDataModel):
153    timestamp: typing.Optional[str] = dataclasses.field(default=None)
154    activity_level: typing.Optional[int] = dataclasses.field(default=None)
155
156
157@dataclasses.dataclass
158class METSample(base_model.TerraDataModel):
159    timestamp: typing.Optional[str] = dataclasses.field(default=None)
160    level: typing.Optional[float] = dataclasses.field(default=None)
161
162
163@dataclasses.dataclass
164class TSSSample(base_model.TerraDataModel):
165    planned: typing.Optional[float] = dataclasses.field(default=None)
166    actual: typing.Optional[float] = dataclasses.field(default=None)
167    method: typing.Optional[str] = dataclasses.field(default=None)
168    intensity_factor_planned: typing.Optional[float] = dataclasses.field(default=None)
169    intensity_factor_actual: typing.Optional[float] = dataclasses.field(default=None)
170    normalized_power_watts: typing.Optional[float] = dataclasses.field(default=None)
171
172
173@dataclasses.dataclass
174class SleepHypnogramSample(base_model.TerraDataModel):
175    timestamp: typing.Optional[str] = dataclasses.field(default=None)
176    level: typing.Optional[int] = dataclasses.field(default=None)
177
178
179@dataclasses.dataclass
180class OxygenSaturationSample(base_model.TerraDataModel):
181    timestamp: typing.Optional[str] = dataclasses.field(default=None)
182    percentage: typing.Optional[float] = dataclasses.field(default=None)
183
184
185@dataclasses.dataclass
186class BreathSample(base_model.TerraDataModel):
187    timestamp: typing.Optional[str] = dataclasses.field(default=None)
188    breaths_per_min: typing.Optional[float] = dataclasses.field(default=None)
189
190
191@dataclasses.dataclass
192class SnoringSample(base_model.TerraDataModel):
193    timestamp: typing.Optional[str] = dataclasses.field(default=None)
194    duration_seconds: typing.Optional[float] = dataclasses.field(default=None)
195
196
197@dataclasses.dataclass
198class StressSample(base_model.TerraDataModel):
199    timestamp: typing.Optional[str] = dataclasses.field(default=None)
200    level: typing.Optional[float] = dataclasses.field(default=None)
201
202
203@dataclasses.dataclass
204class BloodPressureSample(base_model.TerraDataModel):
205    timestamp: typing.Optional[str] = dataclasses.field(default=None)
206    diastolic_bp: typing.Optional[float] = dataclasses.field(default=None)
207    systolic_bp: typing.Optional[float] = dataclasses.field(default=None)
208
209
210@dataclasses.dataclass
211class MeasurementDataSample(base_model.TerraDataModel):
212    measurement_time: typing.Optional[str] = dataclasses.field(default=None)
213    BMI: typing.Optional[float] = dataclasses.field(default=None)
214    BMR: typing.Optional[float] = dataclasses.field(default=None)
215    RMR: typing.Optional[float] = dataclasses.field(default=None)
216    estimated_fitness_age: typing.Optional[int] = dataclasses.field(default=None)
217    skin_fold_mm: typing.Optional[float] = dataclasses.field(default=None)
218    bodyfat_percentage: typing.Optional[float] = dataclasses.field(default=None)
219    weight_kg: typing.Optional[float] = dataclasses.field(default=None)
220    height_cm: typing.Optional[float] = dataclasses.field(default=None)
221    bone_mass_g: typing.Optional[float] = dataclasses.field(default=None)
222    muscle_mass_g: typing.Optional[float] = dataclasses.field(default=None)
223    lean_mass_g: typing.Optional[float] = dataclasses.field(default=None)
224    water_percentage: typing.Optional[float] = dataclasses.field(default=None)
225    insulin_units: typing.Optional[float] = dataclasses.field(default=None)
226    insulin_type: typing.Optional[str] = dataclasses.field(default=None)
227    urine_color: typing.Optional[str] = dataclasses.field(default=None)
228
229
230@dataclasses.dataclass
231class BodyTemperatureSample(base_model.TerraDataModel):
232    timestamp: typing.Optional[str] = dataclasses.field(default=None)
233    body_temperature_celsius: typing.Optional[float] = dataclasses.field(default=None)
234
235
236@dataclasses.dataclass
237class SkinTemperatureSample(base_model.TerraDataModel):
238    timestamp: typing.Optional[str] = dataclasses.field(default=None)
239    skin_temperature_celsius: typing.Optional[float] = dataclasses.field(default=None)
240
241
242@dataclasses.dataclass
243class AmbientTemperatureSample(base_model.TerraDataModel):
244    temperature_celsius: typing.Optional[float] = dataclasses.field(default=None)
245    timestamp: typing.Optional[str] = dataclasses.field(default=None)
246
247
248@dataclasses.dataclass
249class TemperatureSample(base_model.TerraDataModel):
250    temperature_celsius: typing.Optional[float] = dataclasses.field(default=None)
251    timestamp: typing.Optional[str] = dataclasses.field(default=None)
252
253
254@dataclasses.dataclass
255class OtherDeviceData(base_model.TerraDataModel):
256    name: typing.Optional[str] = dataclasses.field(default=None)
257    manufacturer: typing.Optional[str] = dataclasses.field(default=None)
258    serial_number: typing.Optional[str] = dataclasses.field(default=None)
259    software_version: typing.Optional[str] = dataclasses.field(default=None)
260    hardware_version: typing.Optional[str] = dataclasses.field(default=None)
261
262
263@dataclasses.dataclass
264class HydrationMeasurementSample(base_model.TerraDataModel):
265    timestamp: typing.Optional[str] = dataclasses.field(default=None)
266    hydration_kg: typing.Optional[float] = dataclasses.field(default=None)
267
268
269@dataclasses.dataclass
270class Vo2MaxSample(base_model.TerraDataModel):
271    timestamp: typing.Optional[str] = dataclasses.field(default=None)
272    vo2max_ml_per_min_per_kg: typing.Optional[float] = dataclasses.field(default=None)
273
274
275@dataclasses.dataclass
276class PulseVelocitySample(base_model.TerraDataModel):
277    timestamp: typing.Optional[str] = dataclasses.field(default=None)
278    pulse_wave_velocity_meters_per_second: typing.Optional[float] = dataclasses.field(default=None)
279
280
281@dataclasses.dataclass
282class AFibClassificationSample(base_model.TerraDataModel):
283    timestamp: typing.Optional[str] = dataclasses.field(default=None)
284    afib_classification: typing.Optional[int] = dataclasses.field(default=None)
285
286
287@dataclasses.dataclass
288class DrinkSample(base_model.TerraDataModel):
289    drink_unit: typing.Optional[str] = dataclasses.field(default=None)
290    drink_volume: typing.Optional[str] = dataclasses.field(default=None)
291    drink_name: typing.Optional[str] = dataclasses.field(default=None)
292    timestamp: typing.Optional[str] = dataclasses.field(default=None)
293
294
295@dataclasses.dataclass
296class MenstruationFlowSample(base_model.TerraDataModel):
297    timestamp: typing.Optional[str] = dataclasses.field(default=None)
298    flow: typing.Optional[int] = dataclasses.field(default=None)
@dataclasses.dataclass
class GlucoseDataSample(terra.models.base_model.TerraDataModel):
56@dataclasses.dataclass
57class GlucoseDataSample(base_model.TerraDataModel):
58    timestamp: typing.Optional[str] = dataclasses.field(default=None)
59    blood_glucose_mg_per_dL: typing.Optional[int] = dataclasses.field(default=None)
60    glucose_level_flag: typing.Optional[int] = dataclasses.field(default=None)
61    trend_arrow: typing.Optional[int] = dataclasses.field(default=None)

GlucoseDataSample(timestamp: Optional[str] = None, blood_glucose_mg_per_dL: Optional[int] = None, glucose_level_flag: Optional[int] = None, trend_arrow: Optional[int] = None)

GlucoseDataSample( timestamp: Optional[str] = None, blood_glucose_mg_per_dL: Optional[int] = None, glucose_level_flag: Optional[int] = None, trend_arrow: Optional[int] = None)
timestamp: Optional[str] = None
blood_glucose_mg_per_dL: Optional[int] = None
glucose_level_flag: Optional[int] = None
trend_arrow: Optional[int] = None
@dataclasses.dataclass
class HeartRateDataSample(terra.models.base_model.TerraDataModel):
64@dataclasses.dataclass
65class HeartRateDataSample(base_model.TerraDataModel):
66    timestamp: typing.Optional[str] = dataclasses.field(default=None)
67    bpm: typing.Optional[float] = dataclasses.field(default=None)

HeartRateDataSample(timestamp: Optional[str] = None, bpm: Optional[float] = None)

HeartRateDataSample(timestamp: Optional[str] = None, bpm: Optional[float] = None)
timestamp: Optional[str] = None
bpm: Optional[float] = None
@dataclasses.dataclass
class LapSample(terra.models.base_model.TerraDataModel):
70@dataclasses.dataclass
71class LapSample(base_model.TerraDataModel):
72    start_time: typing.Optional[str] = dataclasses.field(default=None)
73    distance_meters: typing.Optional[float] = dataclasses.field(default=None)
74    calories: typing.Optional[float] = dataclasses.field(default=None)

LapSample(start_time: Optional[str] = None, distance_meters: Optional[float] = None, calories: Optional[float] = None)

LapSample( start_time: Optional[str] = None, distance_meters: Optional[float] = None, calories: Optional[float] = None)
start_time: Optional[str] = None
distance_meters: Optional[float] = None
calories: Optional[float] = None
@dataclasses.dataclass
class HeartRateVariabilityDataSampleRMSSD(terra.models.base_model.TerraDataModel):
77@dataclasses.dataclass
78class HeartRateVariabilityDataSampleRMSSD(base_model.TerraDataModel):
79    timestamp: typing.Optional[str] = dataclasses.field(default=None)
80    hrv_rmssd: typing.Optional[float] = dataclasses.field(default=None)

HeartRateVariabilityDataSampleRMSSD(timestamp: Optional[str] = None, hrv_rmssd: Optional[float] = None)

HeartRateVariabilityDataSampleRMSSD(timestamp: Optional[str] = None, hrv_rmssd: Optional[float] = None)
timestamp: Optional[str] = None
hrv_rmssd: Optional[float] = None
@dataclasses.dataclass
class HeartRateVariabilityDataSampleSDNN(terra.models.base_model.TerraDataModel):
83@dataclasses.dataclass
84class HeartRateVariabilityDataSampleSDNN(base_model.TerraDataModel):
85    timestamp: typing.Optional[str] = dataclasses.field(default=None)
86    hrv_sdnn: typing.Optional[float] = dataclasses.field(default=None)

HeartRateVariabilityDataSampleSDNN(timestamp: Optional[str] = None, hrv_sdnn: Optional[float] = None)

HeartRateVariabilityDataSampleSDNN(timestamp: Optional[str] = None, hrv_sdnn: Optional[float] = None)
timestamp: Optional[str] = None
hrv_sdnn: Optional[float] = None
@dataclasses.dataclass
class DistanceSample(terra.models.base_model.TerraDataModel):
89@dataclasses.dataclass
90class DistanceSample(base_model.TerraDataModel):
91    timestamp: typing.Optional[str] = dataclasses.field(default=None)
92    distance_meters: typing.Optional[float] = dataclasses.field(default=None)
93    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)

DistanceSample(timestamp: Optional[str] = None, distance_meters: Optional[float] = None, timer_duration_seconds: Optional[float] = None)

DistanceSample( timestamp: Optional[str] = None, distance_meters: Optional[float] = None, timer_duration_seconds: Optional[float] = None)
timestamp: Optional[str] = None
distance_meters: Optional[float] = None
timer_duration_seconds: Optional[float] = None
@dataclasses.dataclass
class StepSample(terra.models.base_model.TerraDataModel):
 96@dataclasses.dataclass
 97class StepSample(base_model.TerraDataModel):
 98    timestamp: typing.Optional[str] = dataclasses.field(default=None)
 99    steps: typing.Optional[float] = dataclasses.field(default=None)
100    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)

StepSample(timestamp: Optional[str] = None, steps: Optional[float] = None, timer_duration_seconds: Optional[float] = None)

StepSample( timestamp: Optional[str] = None, steps: Optional[float] = None, timer_duration_seconds: Optional[float] = None)
timestamp: Optional[str] = None
steps: Optional[float] = None
timer_duration_seconds: Optional[float] = None
@dataclasses.dataclass
class ElevationSample(terra.models.base_model.TerraDataModel):
117@dataclasses.dataclass
118class ElevationSample(base_model.TerraDataModel):
119    timestamp: typing.Optional[str] = dataclasses.field(default=None)
120    elev_meters: typing.Optional[float] = dataclasses.field(default=None)
121    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)

ElevationSample(timestamp: Optional[str] = None, elev_meters: Optional[float] = None, timer_duration_seconds: Optional[float] = None)

ElevationSample( timestamp: Optional[str] = None, elev_meters: Optional[float] = None, timer_duration_seconds: Optional[float] = None)
timestamp: Optional[str] = None
elev_meters: Optional[float] = None
timer_duration_seconds: Optional[float] = None
@dataclasses.dataclass
class PositionSample(terra.models.base_model.TerraDataModel):
124@dataclasses.dataclass
125class PositionSample(base_model.TerraDataModel):
126    timestamp: typing.Optional[str] = dataclasses.field(default=None)
127    coords_lat_lng_deg: typing.List[float] = dataclasses.field(default_factory=list)
128    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)

PositionSample(timestamp: Optional[str] = None, coords_lat_lng_deg: List[float] = , timer_duration_seconds: Optional[float] = None)

PositionSample( timestamp: Optional[str] = None, coords_lat_lng_deg: List[float] = <factory>, timer_duration_seconds: Optional[float] = None)
timestamp: Optional[str] = None
timer_duration_seconds: Optional[float] = None
@dataclasses.dataclass
class PowerSample(terra.models.base_model.TerraDataModel):
131@dataclasses.dataclass
132class PowerSample(base_model.TerraDataModel):
133    timestamp: typing.Optional[str] = dataclasses.field(default=None)
134    watts: typing.Optional[float] = dataclasses.field(default=None)
135    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)

PowerSample(timestamp: Optional[str] = None, watts: Optional[float] = None, timer_duration_seconds: Optional[float] = None)

PowerSample( timestamp: Optional[str] = None, watts: Optional[float] = None, timer_duration_seconds: Optional[float] = None)
timestamp: Optional[str] = None
watts: Optional[float] = None
timer_duration_seconds: Optional[float] = None
@dataclasses.dataclass
class SpeedSample(terra.models.base_model.TerraDataModel):
138@dataclasses.dataclass
139class SpeedSample(base_model.TerraDataModel):
140    timestamp: typing.Optional[str] = dataclasses.field(default=None)
141    speed_meters_per_second: typing.Optional[float] = dataclasses.field(default=None)
142    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)

SpeedSample(timestamp: Optional[str] = None, speed_meters_per_second: Optional[float] = None, timer_duration_seconds: Optional[float] = None)

SpeedSample( timestamp: Optional[str] = None, speed_meters_per_second: Optional[float] = None, timer_duration_seconds: Optional[float] = None)
timestamp: Optional[str] = None
speed_meters_per_second: Optional[float] = None
timer_duration_seconds: Optional[float] = None
@dataclasses.dataclass
class CadenceSample(terra.models.base_model.TerraDataModel):
145@dataclasses.dataclass
146class CadenceSample(base_model.TerraDataModel):
147    timestamp: typing.Optional[str] = dataclasses.field(default=None)
148    cadence_rpm: typing.Optional[float] = dataclasses.field(default=None)
149    timer_duration_seconds: typing.Optional[float] = dataclasses.field(default=None)

CadenceSample(timestamp: Optional[str] = None, cadence_rpm: Optional[float] = None, timer_duration_seconds: Optional[float] = None)

CadenceSample( timestamp: Optional[str] = None, cadence_rpm: Optional[float] = None, timer_duration_seconds: Optional[float] = None)
timestamp: Optional[str] = None
cadence_rpm: Optional[float] = None
timer_duration_seconds: Optional[float] = None
@dataclasses.dataclass
class ActivityLevelSample(terra.models.base_model.TerraDataModel):
152@dataclasses.dataclass
153class ActivityLevelSample(base_model.TerraDataModel):
154    timestamp: typing.Optional[str] = dataclasses.field(default=None)
155    activity_level: typing.Optional[int] = dataclasses.field(default=None)

ActivityLevelSample(timestamp: Optional[str] = None, activity_level: Optional[int] = None)

ActivityLevelSample( timestamp: Optional[str] = None, activity_level: Optional[int] = None)
timestamp: Optional[str] = None
activity_level: Optional[int] = None
@dataclasses.dataclass
class METSample(terra.models.base_model.TerraDataModel):
158@dataclasses.dataclass
159class METSample(base_model.TerraDataModel):
160    timestamp: typing.Optional[str] = dataclasses.field(default=None)
161    level: typing.Optional[float] = dataclasses.field(default=None)

METSample(timestamp: Optional[str] = None, level: Optional[float] = None)

METSample(timestamp: Optional[str] = None, level: Optional[float] = None)
timestamp: Optional[str] = None
level: Optional[float] = None
@dataclasses.dataclass
class TSSSample(terra.models.base_model.TerraDataModel):
164@dataclasses.dataclass
165class TSSSample(base_model.TerraDataModel):
166    planned: typing.Optional[float] = dataclasses.field(default=None)
167    actual: typing.Optional[float] = dataclasses.field(default=None)
168    method: typing.Optional[str] = dataclasses.field(default=None)
169    intensity_factor_planned: typing.Optional[float] = dataclasses.field(default=None)
170    intensity_factor_actual: typing.Optional[float] = dataclasses.field(default=None)
171    normalized_power_watts: typing.Optional[float] = dataclasses.field(default=None)

TSSSample(planned: Optional[float] = None, actual: Optional[float] = None, method: Optional[str] = None, intensity_factor_planned: Optional[float] = None, intensity_factor_actual: Optional[float] = None, normalized_power_watts: Optional[float] = None)

TSSSample( planned: Optional[float] = None, actual: Optional[float] = None, method: Optional[str] = None, intensity_factor_planned: Optional[float] = None, intensity_factor_actual: Optional[float] = None, normalized_power_watts: Optional[float] = None)
planned: Optional[float] = None
actual: Optional[float] = None
method: Optional[str] = None
intensity_factor_planned: Optional[float] = None
intensity_factor_actual: Optional[float] = None
normalized_power_watts: Optional[float] = None
@dataclasses.dataclass
class SleepHypnogramSample(terra.models.base_model.TerraDataModel):
174@dataclasses.dataclass
175class SleepHypnogramSample(base_model.TerraDataModel):
176    timestamp: typing.Optional[str] = dataclasses.field(default=None)
177    level: typing.Optional[int] = dataclasses.field(default=None)

SleepHypnogramSample(timestamp: Optional[str] = None, level: Optional[int] = None)

SleepHypnogramSample(timestamp: Optional[str] = None, level: Optional[int] = None)
timestamp: Optional[str] = None
level: Optional[int] = None
@dataclasses.dataclass
class OxygenSaturationSample(terra.models.base_model.TerraDataModel):
180@dataclasses.dataclass
181class OxygenSaturationSample(base_model.TerraDataModel):
182    timestamp: typing.Optional[str] = dataclasses.field(default=None)
183    percentage: typing.Optional[float] = dataclasses.field(default=None)

OxygenSaturationSample(timestamp: Optional[str] = None, percentage: Optional[float] = None)

OxygenSaturationSample(timestamp: Optional[str] = None, percentage: Optional[float] = None)
timestamp: Optional[str] = None
percentage: Optional[float] = None
@dataclasses.dataclass
class BreathSample(terra.models.base_model.TerraDataModel):
186@dataclasses.dataclass
187class BreathSample(base_model.TerraDataModel):
188    timestamp: typing.Optional[str] = dataclasses.field(default=None)
189    breaths_per_min: typing.Optional[float] = dataclasses.field(default=None)

BreathSample(timestamp: Optional[str] = None, breaths_per_min: Optional[float] = None)

BreathSample( timestamp: Optional[str] = None, breaths_per_min: Optional[float] = None)
timestamp: Optional[str] = None
breaths_per_min: Optional[float] = None
@dataclasses.dataclass
class SnoringSample(terra.models.base_model.TerraDataModel):
192@dataclasses.dataclass
193class SnoringSample(base_model.TerraDataModel):
194    timestamp: typing.Optional[str] = dataclasses.field(default=None)
195    duration_seconds: typing.Optional[float] = dataclasses.field(default=None)

SnoringSample(timestamp: Optional[str] = None, duration_seconds: Optional[float] = None)

SnoringSample( timestamp: Optional[str] = None, duration_seconds: Optional[float] = None)
timestamp: Optional[str] = None
duration_seconds: Optional[float] = None
@dataclasses.dataclass
class StressSample(terra.models.base_model.TerraDataModel):
198@dataclasses.dataclass
199class StressSample(base_model.TerraDataModel):
200    timestamp: typing.Optional[str] = dataclasses.field(default=None)
201    level: typing.Optional[float] = dataclasses.field(default=None)

StressSample(timestamp: Optional[str] = None, level: Optional[float] = None)

StressSample(timestamp: Optional[str] = None, level: Optional[float] = None)
timestamp: Optional[str] = None
level: Optional[float] = None
@dataclasses.dataclass
class BloodPressureSample(terra.models.base_model.TerraDataModel):
204@dataclasses.dataclass
205class BloodPressureSample(base_model.TerraDataModel):
206    timestamp: typing.Optional[str] = dataclasses.field(default=None)
207    diastolic_bp: typing.Optional[float] = dataclasses.field(default=None)
208    systolic_bp: typing.Optional[float] = dataclasses.field(default=None)

BloodPressureSample(timestamp: Optional[str] = None, diastolic_bp: Optional[float] = None, systolic_bp: Optional[float] = None)

BloodPressureSample( timestamp: Optional[str] = None, diastolic_bp: Optional[float] = None, systolic_bp: Optional[float] = None)
timestamp: Optional[str] = None
diastolic_bp: Optional[float] = None
systolic_bp: Optional[float] = None
@dataclasses.dataclass
class MeasurementDataSample(terra.models.base_model.TerraDataModel):
211@dataclasses.dataclass
212class MeasurementDataSample(base_model.TerraDataModel):
213    measurement_time: typing.Optional[str] = dataclasses.field(default=None)
214    BMI: typing.Optional[float] = dataclasses.field(default=None)
215    BMR: typing.Optional[float] = dataclasses.field(default=None)
216    RMR: typing.Optional[float] = dataclasses.field(default=None)
217    estimated_fitness_age: typing.Optional[int] = dataclasses.field(default=None)
218    skin_fold_mm: typing.Optional[float] = dataclasses.field(default=None)
219    bodyfat_percentage: typing.Optional[float] = dataclasses.field(default=None)
220    weight_kg: typing.Optional[float] = dataclasses.field(default=None)
221    height_cm: typing.Optional[float] = dataclasses.field(default=None)
222    bone_mass_g: typing.Optional[float] = dataclasses.field(default=None)
223    muscle_mass_g: typing.Optional[float] = dataclasses.field(default=None)
224    lean_mass_g: typing.Optional[float] = dataclasses.field(default=None)
225    water_percentage: typing.Optional[float] = dataclasses.field(default=None)
226    insulin_units: typing.Optional[float] = dataclasses.field(default=None)
227    insulin_type: typing.Optional[str] = dataclasses.field(default=None)
228    urine_color: typing.Optional[str] = dataclasses.field(default=None)

MeasurementDataSample(measurement_time: Optional[str] = None, BMI: Optional[float] = None, BMR: Optional[float] = None, RMR: Optional[float] = None, estimated_fitness_age: Optional[int] = None, skin_fold_mm: Optional[float] = None, bodyfat_percentage: Optional[float] = None, weight_kg: Optional[float] = None, height_cm: Optional[float] = None, bone_mass_g: Optional[float] = None, muscle_mass_g: Optional[float] = None, lean_mass_g: Optional[float] = None, water_percentage: Optional[float] = None, insulin_units: Optional[float] = None, insulin_type: Optional[str] = None, urine_color: Optional[str] = None)

MeasurementDataSample( measurement_time: Optional[str] = None, BMI: Optional[float] = None, BMR: Optional[float] = None, RMR: Optional[float] = None, estimated_fitness_age: Optional[int] = None, skin_fold_mm: Optional[float] = None, bodyfat_percentage: Optional[float] = None, weight_kg: Optional[float] = None, height_cm: Optional[float] = None, bone_mass_g: Optional[float] = None, muscle_mass_g: Optional[float] = None, lean_mass_g: Optional[float] = None, water_percentage: Optional[float] = None, insulin_units: Optional[float] = None, insulin_type: Optional[str] = None, urine_color: Optional[str] = None)
measurement_time: Optional[str] = None
BMI: Optional[float] = None
BMR: Optional[float] = None
RMR: Optional[float] = None
estimated_fitness_age: Optional[int] = None
skin_fold_mm: Optional[float] = None
bodyfat_percentage: Optional[float] = None
weight_kg: Optional[float] = None
height_cm: Optional[float] = None
bone_mass_g: Optional[float] = None
muscle_mass_g: Optional[float] = None
lean_mass_g: Optional[float] = None
water_percentage: Optional[float] = None
insulin_units: Optional[float] = None
insulin_type: Optional[str] = None
urine_color: Optional[str] = None
@dataclasses.dataclass
class BodyTemperatureSample(terra.models.base_model.TerraDataModel):
231@dataclasses.dataclass
232class BodyTemperatureSample(base_model.TerraDataModel):
233    timestamp: typing.Optional[str] = dataclasses.field(default=None)
234    body_temperature_celsius: typing.Optional[float] = dataclasses.field(default=None)

BodyTemperatureSample(timestamp: Optional[str] = None, body_temperature_celsius: Optional[float] = None)

BodyTemperatureSample( timestamp: Optional[str] = None, body_temperature_celsius: Optional[float] = None)
timestamp: Optional[str] = None
body_temperature_celsius: Optional[float] = None
@dataclasses.dataclass
class SkinTemperatureSample(terra.models.base_model.TerraDataModel):
237@dataclasses.dataclass
238class SkinTemperatureSample(base_model.TerraDataModel):
239    timestamp: typing.Optional[str] = dataclasses.field(default=None)
240    skin_temperature_celsius: typing.Optional[float] = dataclasses.field(default=None)

SkinTemperatureSample(timestamp: Optional[str] = None, skin_temperature_celsius: Optional[float] = None)

SkinTemperatureSample( timestamp: Optional[str] = None, skin_temperature_celsius: Optional[float] = None)
timestamp: Optional[str] = None
skin_temperature_celsius: Optional[float] = None
@dataclasses.dataclass
class AmbientTemperatureSample(terra.models.base_model.TerraDataModel):
243@dataclasses.dataclass
244class AmbientTemperatureSample(base_model.TerraDataModel):
245    temperature_celsius: typing.Optional[float] = dataclasses.field(default=None)
246    timestamp: typing.Optional[str] = dataclasses.field(default=None)

AmbientTemperatureSample(temperature_celsius: Optional[float] = None, timestamp: Optional[str] = None)

AmbientTemperatureSample( temperature_celsius: Optional[float] = None, timestamp: Optional[str] = None)
temperature_celsius: Optional[float] = None
timestamp: Optional[str] = None
@dataclasses.dataclass
class TemperatureSample(terra.models.base_model.TerraDataModel):
249@dataclasses.dataclass
250class TemperatureSample(base_model.TerraDataModel):
251    temperature_celsius: typing.Optional[float] = dataclasses.field(default=None)
252    timestamp: typing.Optional[str] = dataclasses.field(default=None)

TemperatureSample(temperature_celsius: Optional[float] = None, timestamp: Optional[str] = None)

TemperatureSample( temperature_celsius: Optional[float] = None, timestamp: Optional[str] = None)
temperature_celsius: Optional[float] = None
timestamp: Optional[str] = None
@dataclasses.dataclass
class OtherDeviceData(terra.models.base_model.TerraDataModel):
255@dataclasses.dataclass
256class OtherDeviceData(base_model.TerraDataModel):
257    name: typing.Optional[str] = dataclasses.field(default=None)
258    manufacturer: typing.Optional[str] = dataclasses.field(default=None)
259    serial_number: typing.Optional[str] = dataclasses.field(default=None)
260    software_version: typing.Optional[str] = dataclasses.field(default=None)
261    hardware_version: typing.Optional[str] = dataclasses.field(default=None)

OtherDeviceData(name: Optional[str] = None, manufacturer: Optional[str] = None, serial_number: Optional[str] = None, software_version: Optional[str] = None, hardware_version: Optional[str] = None)

OtherDeviceData( name: Optional[str] = None, manufacturer: Optional[str] = None, serial_number: Optional[str] = None, software_version: Optional[str] = None, hardware_version: Optional[str] = None)
name: Optional[str] = None
manufacturer: Optional[str] = None
serial_number: Optional[str] = None
software_version: Optional[str] = None
hardware_version: Optional[str] = None
@dataclasses.dataclass
class HydrationMeasurementSample(terra.models.base_model.TerraDataModel):
264@dataclasses.dataclass
265class HydrationMeasurementSample(base_model.TerraDataModel):
266    timestamp: typing.Optional[str] = dataclasses.field(default=None)
267    hydration_kg: typing.Optional[float] = dataclasses.field(default=None)

HydrationMeasurementSample(timestamp: Optional[str] = None, hydration_kg: Optional[float] = None)

HydrationMeasurementSample( timestamp: Optional[str] = None, hydration_kg: Optional[float] = None)
timestamp: Optional[str] = None
hydration_kg: Optional[float] = None
@dataclasses.dataclass
class Vo2MaxSample(terra.models.base_model.TerraDataModel):
270@dataclasses.dataclass
271class Vo2MaxSample(base_model.TerraDataModel):
272    timestamp: typing.Optional[str] = dataclasses.field(default=None)
273    vo2max_ml_per_min_per_kg: typing.Optional[float] = dataclasses.field(default=None)

Vo2MaxSample(timestamp: Optional[str] = None, vo2max_ml_per_min_per_kg: Optional[float] = None)

Vo2MaxSample( timestamp: Optional[str] = None, vo2max_ml_per_min_per_kg: Optional[float] = None)
timestamp: Optional[str] = None
vo2max_ml_per_min_per_kg: Optional[float] = None
@dataclasses.dataclass
class PulseVelocitySample(terra.models.base_model.TerraDataModel):
276@dataclasses.dataclass
277class PulseVelocitySample(base_model.TerraDataModel):
278    timestamp: typing.Optional[str] = dataclasses.field(default=None)
279    pulse_wave_velocity_meters_per_second: typing.Optional[float] = dataclasses.field(default=None)

PulseVelocitySample(timestamp: Optional[str] = None, pulse_wave_velocity_meters_per_second: Optional[float] = None)

PulseVelocitySample( timestamp: Optional[str] = None, pulse_wave_velocity_meters_per_second: Optional[float] = None)
timestamp: Optional[str] = None
pulse_wave_velocity_meters_per_second: Optional[float] = None
@dataclasses.dataclass
class AFibClassificationSample(terra.models.base_model.TerraDataModel):
282@dataclasses.dataclass
283class AFibClassificationSample(base_model.TerraDataModel):
284    timestamp: typing.Optional[str] = dataclasses.field(default=None)
285    afib_classification: typing.Optional[int] = dataclasses.field(default=None)

AFibClassificationSample(timestamp: Optional[str] = None, afib_classification: Optional[int] = None)

AFibClassificationSample( timestamp: Optional[str] = None, afib_classification: Optional[int] = None)
timestamp: Optional[str] = None
afib_classification: Optional[int] = None
@dataclasses.dataclass
class DrinkSample(terra.models.base_model.TerraDataModel):
288@dataclasses.dataclass
289class DrinkSample(base_model.TerraDataModel):
290    drink_unit: typing.Optional[str] = dataclasses.field(default=None)
291    drink_volume: typing.Optional[str] = dataclasses.field(default=None)
292    drink_name: typing.Optional[str] = dataclasses.field(default=None)
293    timestamp: typing.Optional[str] = dataclasses.field(default=None)

DrinkSample(drink_unit: Optional[str] = None, drink_volume: Optional[str] = None, drink_name: Optional[str] = None, timestamp: Optional[str] = None)

DrinkSample( drink_unit: Optional[str] = None, drink_volume: Optional[str] = None, drink_name: Optional[str] = None, timestamp: Optional[str] = None)
drink_unit: Optional[str] = None
drink_volume: Optional[str] = None
drink_name: Optional[str] = None
timestamp: Optional[str] = None