Files
FitTrack2/FitnessSync/backend/inspect_fit_fields.py
2026-01-13 09:42:16 -08:00

73 lines
2.3 KiB
Python

import sys
import os
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
import fitdecode
import io
# Add curdir to path
sys.path.append(os.getcwd())
from src.models.activity import Activity
# Using localhost:5433 as per docker-compose port mapping
DATABASE_URL = "postgresql://postgres:password@localhost:5433/fitbit_garmin_sync"
def inspect_fit_fields(garmin_id):
print(f"Connecting to DB: {DATABASE_URL}")
try:
engine = create_engine(DATABASE_URL)
Session = sessionmaker(bind=engine)
session = Session()
except Exception as e:
print(f"Failed to connect to DB: {e}")
return
try:
activity = session.query(Activity).filter(Activity.garmin_activity_id == garmin_id).first()
if not activity:
print(f"Activity {garmin_id} not found in DB.")
return
if not activity.file_content or activity.file_type != 'fit':
print("No FIT content found.")
return
print(f"Parsing FIT file for Activity {garmin_id}...")
record_fields = set()
lap_fields = set()
session_fields = set()
with io.BytesIO(activity.file_content) as f:
with fitdecode.FitReader(f) as fit:
for frame in fit:
if frame.frame_type == fitdecode.FIT_FRAME_DATA:
if frame.name == 'record':
for field in frame.fields:
record_fields.add(field.name)
elif frame.name == 'lap':
for field in frame.fields:
lap_fields.add(field.name)
elif frame.name == 'session':
for field in frame.fields:
session_fields.add(field.name)
print("\n--- Available 'record' Fields (Time Series) ---")
for field in sorted(record_fields):
print(f" - {field}")
print("\n--- Available 'lap' Fields ---")
for field in sorted(lap_fields):
print(f" - {field}")
print("\n--- Available 'session' Fields (Summary) ---")
for field in sorted(session_fields):
print(f" - {field}")
finally:
session.close()
if __name__ == "__main__":
inspect_fit_fields("21517046364")