bug fix
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 56s

This commit is contained in:
Tudor
2026-01-10 11:32:40 +00:00
parent e1383b3432
commit bb58d607c2

View File

@@ -8,6 +8,7 @@ import re
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
from typing import Optional from typing import Optional
import numpy as np
import pandas as pd import pandas as pd
from fastapi import FastAPI, HTTPException, Query, Request, Depends, Header from fastapi import FastAPI, HTTPException, Query, Request, Depends, Header
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
@@ -21,7 +22,6 @@ from starlette.middleware.base import BaseHTTPMiddleware
from .config import settings from .config import settings
from .data_loader import ( from .data_loader import (
clear_cache, clear_cache,
haversine_distance,
load_school_data, load_school_data,
geocode_single_postcode, geocode_single_postcode,
) )
@@ -276,17 +276,29 @@ async def get_schools(
schools_df = schools_df.copy() schools_df = schools_df.copy()
# Filter by distance using pre-geocoded lat/long from database # Filter by distance using pre-geocoded lat/long from database
def calc_distance(row): # Use vectorized haversine calculation for better performance
if pd.isna(row["latitude"]) or pd.isna(row["longitude"]): lat1, lon1 = search_coords
return float("inf") lat2 = schools_df["latitude"].values
return haversine_distance( lon2 = schools_df["longitude"].values
search_coords[0],
search_coords[1],
row["latitude"],
row["longitude"],
)
schools_df["distance"] = schools_df.apply(calc_distance, axis=1) # Vectorized haversine formula
R = 3959 # Earth's radius in miles
lat1_rad = np.radians(lat1)
lat2_rad = np.radians(lat2)
dlat = np.radians(lat2 - lat1)
dlon = np.radians(lon2 - lon1)
a = np.sin(dlat / 2) ** 2 + np.cos(lat1_rad) * np.cos(lat2_rad) * np.sin(dlon / 2) ** 2
c = 2 * np.arctan2(np.sqrt(a), np.sqrt(1 - a))
distances = R * c
# Handle missing coordinates
distances = np.where(
pd.isna(schools_df["latitude"]) | pd.isna(schools_df["longitude"]),
float("inf"),
distances
)
schools_df["distance"] = distances
schools_df = schools_df[schools_df["distance"] <= radius] schools_df = schools_df[schools_df["distance"] <= radius]
schools_df = schools_df.sort_values("distance") schools_df = schools_df.sort_values("distance")