Compare commits
3 commits
6286699b52
...
3ad11b070a
| Author | SHA1 | Date | |
|---|---|---|---|
| 3ad11b070a | |||
| 9dd033ba77 | |||
| fcd0e9c1cd |
2 changed files with 61 additions and 43 deletions
|
|
@ -274,36 +274,37 @@ def get_location_for_date(
|
||||||
get_country(acc.get("country", "gb")),
|
get_country(acc.get("country", "gb")),
|
||||||
)
|
)
|
||||||
|
|
||||||
# Check if most recent travel was from a trip that ended in the UK
|
# Check for recent trips that have ended - prioritize this over individual travel data
|
||||||
# If so, prioritize that over foreign accommodations within the trip
|
# This handles cases where you're traveling home after a trip (e.g. stopovers, connections)
|
||||||
if most_recent_location and most_recent_date:
|
for trip in trips:
|
||||||
for trip in trips:
|
if trip.end and trip.end < target_date:
|
||||||
if (
|
locations = trip.locations()
|
||||||
trip.end
|
if locations:
|
||||||
and trip.end < target_date
|
final_city, final_country = locations[-1]
|
||||||
and trip.start <= most_recent_date <= trip.end
|
days_since_trip = (target_date - trip.end).days
|
||||||
):
|
|
||||||
# The most recent travel was within a trip that has since ended
|
# If trip ended in UK, you should be home now
|
||||||
locations = trip.locations()
|
if (
|
||||||
if locations:
|
hasattr(final_country, "alpha_2")
|
||||||
final_city, final_country = locations[-1]
|
and final_country.alpha_2 == "GB"
|
||||||
# If trip ended in UK, you should be home now
|
):
|
||||||
if (
|
return ("Bristol", get_country("gb"))
|
||||||
hasattr(final_country, "alpha_2")
|
|
||||||
and final_country.alpha_2 == "GB"
|
|
||||||
):
|
|
||||||
return ("Bristol", get_country("gb"))
|
|
||||||
|
|
||||||
# For short European trips (ended >3 days ago), assume returned home
|
# For short trips to nearby countries or international trips
|
||||||
# if no subsequent travel data shows you're still abroad
|
# (ended >=1 day ago), assume returned home if no subsequent travel data
|
||||||
days_since_trip = (target_date - trip.end).days
|
if (
|
||||||
if (
|
days_since_trip >= 1
|
||||||
days_since_trip > 3
|
and hasattr(final_country, "alpha_2")
|
||||||
and hasattr(final_country, "alpha_2")
|
and (
|
||||||
and final_country.alpha_2
|
# European countries (close by rail/ferry)
|
||||||
in {"BE", "NL", "FR", "DE", "CH", "AT", "IT", "ES"}
|
final_country.alpha_2 in {"BE", "NL", "FR", "DE", "CH", "AT", "IT", "ES"}
|
||||||
):
|
# Nearby Balkan countries
|
||||||
return ("Bristol", get_country("gb"))
|
or final_country.alpha_2 in {"GR", "AL", "XK", "HR", "SI", "MK", "BA", "ME", "RS", "BG", "RO"}
|
||||||
|
# International trips (assume return home after trip ends)
|
||||||
|
or final_country.alpha_2 in {"US", "CA", "IN", "JP", "CN", "AU", "NZ", "BR", "AR", "ZA"}
|
||||||
|
)
|
||||||
|
):
|
||||||
|
return ("Bristol", get_country("gb"))
|
||||||
|
|
||||||
# Return most recent location or default to Bristol
|
# Return most recent location or default to Bristol
|
||||||
if most_recent_location:
|
if most_recent_location:
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
|
|
||||||
|
import agenda.busy
|
||||||
import agenda.travel as travel
|
import agenda.travel as travel
|
||||||
import agenda.trip
|
import agenda.trip
|
||||||
from web_view import app
|
from web_view import app
|
||||||
|
|
@ -9,20 +10,7 @@ def test_get_location_for_date() -> None:
|
||||||
app.config["SERVER_NAME"] = "test"
|
app.config["SERVER_NAME"] = "test"
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
today = datetime.now().date()
|
today = datetime.now().date()
|
||||||
start = date(today.year, 1, 1)
|
trips = agenda.trip.build_trip_list()
|
||||||
trips = [
|
|
||||||
t
|
|
||||||
for t in agenda.trip.build_trip_list()
|
|
||||||
if t.start
|
|
||||||
in [
|
|
||||||
date(2023, 2, 2),
|
|
||||||
date(2023, 9, 8),
|
|
||||||
date(2023, 11, 14),
|
|
||||||
date(2025, 2, 9),
|
|
||||||
date(2025, 7, 4),
|
|
||||||
]
|
|
||||||
]
|
|
||||||
assert len(trips) == 5
|
|
||||||
|
|
||||||
data_dir = app.config["PERSONAL_DATA"]
|
data_dir = app.config["PERSONAL_DATA"]
|
||||||
|
|
||||||
|
|
@ -31,6 +19,32 @@ def test_get_location_for_date() -> None:
|
||||||
accommodations = travel.parse_yaml("accommodation", data_dir)
|
accommodations = travel.parse_yaml("accommodation", data_dir)
|
||||||
airports = travel.parse_yaml("airports", data_dir)
|
airports = travel.parse_yaml("airports", data_dir)
|
||||||
|
|
||||||
|
for year in range(2023, 2025):
|
||||||
|
start = date(2023, 1, 1)
|
||||||
|
busy_events = agenda.busy.get_busy_events(start, app.config, trips)
|
||||||
|
weekends = agenda.busy.weekends(start, busy_events, trips, data_dir)
|
||||||
|
|
||||||
|
for weekend in weekends:
|
||||||
|
for day in "saturday", "sunday":
|
||||||
|
assert weekend[day + "_location"][0] == "Bristol" or bool(
|
||||||
|
weekend[day]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Debug the April 29 issue
|
||||||
|
april_29_location = agenda.busy.get_location_for_date(
|
||||||
|
date(2023, 4, 29), trips, bookings, accommodations, airports
|
||||||
|
)
|
||||||
|
print(f"\nDirect call for April 29: {april_29_location}")
|
||||||
|
|
||||||
|
# Check what the foss-north trip looks like
|
||||||
|
foss_north_trip = None
|
||||||
|
for trip in trips:
|
||||||
|
if trip.title == "foss-north" and trip.start == date(2023, 4, 22):
|
||||||
|
foss_north_trip = trip
|
||||||
|
print(f"foss-north trip: {trip.start} to {trip.end}")
|
||||||
|
print(f"foss-north locations: {trip.locations()}")
|
||||||
|
break
|
||||||
|
|
||||||
l1 = agenda.busy.get_location_for_date(
|
l1 = agenda.busy.get_location_for_date(
|
||||||
date(2025, 2, 15), trips, bookings, accommodations, airports
|
date(2025, 2, 15), trips, bookings, accommodations, airports
|
||||||
)
|
)
|
||||||
|
|
@ -60,3 +74,6 @@ def test_get_location_for_date() -> None:
|
||||||
date(2025, 8, 2), trips, bookings, accommodations, airports
|
date(2025, 8, 2), trips, bookings, accommodations, airports
|
||||||
)
|
)
|
||||||
assert l2[0] == "Bristol"
|
assert l2[0] == "Bristol"
|
||||||
|
|
||||||
|
# Fix the April 29 case
|
||||||
|
assert april_29_location[0] == "Bristol"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue