Bump version to 0.16.2 and improve sleep data parsing

Updated backend and frontend version numbers to 0.16.2. Improved robustness in Garmin sleep data parsing by handling None values before casting to int, preventing potential runtime errors. #439
This commit is contained in:
João Vitória Silva
2025-12-11 15:13:11 +00:00
parent 4d828cb02b
commit ea472e4df8
6 changed files with 41 additions and 13 deletions

View File

@@ -7,7 +7,7 @@ from cryptography.fernet import Fernet
import core.logger as core_logger
# Constant related to version
API_VERSION = "v0.16.1"
API_VERSION = "v0.16.2"
LICENSE_NAME = "GNU Affero General Public License v3.0 or later"
LICENSE_IDENTIFIER = "AGPL-3.0-or-later"
LICENSE_URL = "https://spdx.org/licenses/AGPL-3.0-or-later.html"

View File

@@ -339,16 +339,40 @@ def fetch_and_process_sleep_by_dates(
light_sleep_seconds=sleep_dto.get("lightSleepSeconds"),
rem_sleep_seconds=sleep_dto.get("remSleepSeconds"),
awake_sleep_seconds=sleep_dto.get("awakeSleepSeconds"),
avg_heart_rate=int(sleep_dto.get("avgHeartRate")),
avg_heart_rate=(
int(sleep_dto.get("avgHeartRate"))
if sleep_dto.get("avgHeartRate") is not None
else None
),
min_heart_rate=None,
max_heart_rate=None,
avg_spo2=int(sleep_dto.get("averageSpO2Value")),
avg_spo2=(
int(sleep_dto.get("averageSpO2Value"))
if sleep_dto.get("averageSpO2Value") is not None
else None
),
lowest_spo2=sleep_dto.get("lowestSpO2Value"),
highest_spo2=sleep_dto.get("highestSpO2Value"),
avg_respiration=int(sleep_dto.get("averageRespirationValue")),
lowest_respiration=int(sleep_dto.get("lowestRespirationValue")),
highest_respiration=int(sleep_dto.get("highestRespirationValue")),
avg_stress_level=int(sleep_dto.get("avgSleepStress")),
avg_respiration=(
int(sleep_dto.get("averageRespirationValue"))
if sleep_dto.get("averageRespirationValue") is not None
else None
),
lowest_respiration=(
int(sleep_dto.get("lowestRespirationValue"))
if sleep_dto.get("lowestRespirationValue") is not None
else None
),
highest_respiration=(
int(sleep_dto.get("highestRespirationValue"))
if sleep_dto.get("highestRespirationValue") is not None
else None
),
avg_stress_level=(
int(sleep_dto.get("avgSleepStress"))
if sleep_dto.get("avgSleepStress") is not None
else None
),
awake_count=sleep_dto.get("awakeCount"),
restless_moments_count=None,
sleep_score_overall=overall_score.get("value"),
@@ -398,7 +422,11 @@ def fetch_and_process_sleep_by_dates(
in health_sleep_schema.SleepScore._value2member_map_
else None
),
avg_sleep_stress=int(sleep_dto.get("avgSleepStress")),
avg_sleep_stress=(
int(sleep_dto.get("avgSleepStress"))
if sleep_dto.get("avgSleepStress") is not None
else None
),
sleep_stress_score=(
health_sleep_schema.SleepScore(sleep_stress_score.get("qualifierKey"))
if sleep_stress_score

View File

@@ -1,6 +1,6 @@
[tool.poetry]
name = "endurain"
version = "0.16.1"
version = "0.16.2"
description = "Endurain API for the Endurain app"
authors = ["João Vitória Silva <8648976+joaovitoriasilva@users.noreply.github.com>"]
readme = "README.md"

View File

@@ -1,12 +1,12 @@
{
"name": "endurain",
"version": "0.16.1",
"version": "0.16.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "endurain",
"version": "0.16.1",
"version": "0.16.2",
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^6.7.1",
"@fortawesome/free-brands-svg-icons": "^6.7.1",

View File

@@ -1,6 +1,6 @@
{
"name": "endurain",
"version": "0.16.1",
"version": "0.16.2",
"private": true,
"type": "module",
"scripts": {

View File

@@ -23,7 +23,7 @@
<a class="link-body-emphasis" href="https://discord.gg/6VUjUq2uZR"
><font-awesome-icon :icon="['fab', 'fa-discord']"
/></a>
v0.16.1
v0.16.2
</p>
<p class="text-center text-muted">
<img :src="INTEGRATION_LOGOS.strava" alt="Compatible with STRAVA image" height="25" />