many updates
This commit is contained in:
58
FitnessSync/scripts/backfill_lat_lon.py
Normal file
58
FitnessSync/scripts/backfill_lat_lon.py
Normal file
@@ -0,0 +1,58 @@
|
||||
|
||||
import logging
|
||||
import sys
|
||||
import os
|
||||
|
||||
# Ensure we can import from src
|
||||
# In container, app root handles this differently.
|
||||
# If running from /app, we need /app/backend to see 'src'
|
||||
sys.path.append('/app/backend')
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from src.utils.config import config
|
||||
from src.models.activity import Activity
|
||||
from src.services.parsers import extract_points_from_file
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def backfill_location():
|
||||
db_string = config.DATABASE_URL
|
||||
db = create_engine(db_string)
|
||||
Session = sessionmaker(bind=db)
|
||||
session = Session()
|
||||
|
||||
try:
|
||||
activities = session.query(Activity).filter(
|
||||
Activity.file_content != None,
|
||||
Activity.start_lat == None
|
||||
).all()
|
||||
|
||||
logger.info(f"Scanning {len(activities)} activities for backfill...")
|
||||
|
||||
count = 0
|
||||
for act in activities:
|
||||
try:
|
||||
points = extract_points_from_file(act.file_content, act.file_type)
|
||||
if points and len(points) > 0:
|
||||
first_point = points[0]
|
||||
# points are [lon, lat] or [lon, lat, ele]
|
||||
act.start_lng = first_point[0]
|
||||
act.start_lat = first_point[1]
|
||||
count += 1
|
||||
|
||||
if count % 100 == 0:
|
||||
session.commit()
|
||||
logger.info(f"Processed {count} activities...")
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to parse activity {act.id}: {e}")
|
||||
|
||||
session.commit()
|
||||
logger.info(f"Backfill complete. Updated {count} activities.")
|
||||
|
||||
finally:
|
||||
session.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
backfill_location()
|
||||
Reference in New Issue
Block a user