many updates
This commit is contained in:
72
FitnessSync/backend/inspect_fit_fields.py
Normal file
72
FitnessSync/backend/inspect_fit_fields.py
Normal file
@@ -0,0 +1,72 @@
|
||||
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")
|
||||
Reference in New Issue
Block a user