# Seed migration: populate sample 7-day weather forecasts for existing SoilLocations. from datetime import timedelta from django.db import migrations from django.utils import timezone SAMPLE_DAILY_DATA = [ { "day_offset": 0, "temperature_min": 18.5, "temperature_max": 33.2, "temperature_mean": 25.8, "precipitation": 0.0, "precipitation_probability": 5.0, "humidity_mean": 28.0, "wind_speed_max": 12.0, "et0": 6.8, "weather_code": 0, }, { "day_offset": 1, "temperature_min": 19.0, "temperature_max": 34.5, "temperature_mean": 26.7, "precipitation": 0.0, "precipitation_probability": 10.0, "humidity_mean": 30.0, "wind_speed_max": 14.0, "et0": 7.1, "weather_code": 1, }, { "day_offset": 2, "temperature_min": 20.2, "temperature_max": 32.0, "temperature_mean": 26.1, "precipitation": 3.5, "precipitation_probability": 65.0, "humidity_mean": 52.0, "wind_speed_max": 18.0, "et0": 5.2, "weather_code": 61, }, { "day_offset": 3, "temperature_min": 17.8, "temperature_max": 28.5, "temperature_mean": 23.1, "precipitation": 12.0, "precipitation_probability": 85.0, "humidity_mean": 70.0, "wind_speed_max": 22.0, "et0": 3.8, "weather_code": 63, }, { "day_offset": 4, "temperature_min": 16.5, "temperature_max": 27.0, "temperature_mean": 21.7, "precipitation": 5.0, "precipitation_probability": 55.0, "humidity_mean": 60.0, "wind_speed_max": 16.0, "et0": 4.5, "weather_code": 61, }, { "day_offset": 5, "temperature_min": 18.0, "temperature_max": 31.0, "temperature_mean": 24.5, "precipitation": 0.0, "precipitation_probability": 8.0, "humidity_mean": 35.0, "wind_speed_max": 10.0, "et0": 6.2, "weather_code": 2, }, { "day_offset": 6, "temperature_min": 19.5, "temperature_max": 34.0, "temperature_mean": 26.7, "precipitation": 0.0, "precipitation_probability": 3.0, "humidity_mean": 25.0, "wind_speed_max": 8.0, "et0": 7.0, "weather_code": 0, }, ] def seed_forecasts(apps, schema_editor): SoilLocation = apps.get_model("location_data", "SoilLocation") WeatherForecast = apps.get_model("weather", "WeatherForecast") today = timezone.now().date() for location in SoilLocation.objects.all(): for daily in SAMPLE_DAILY_DATA: forecast_date = today + timedelta(days=daily["day_offset"]) WeatherForecast.objects.get_or_create( location=location, forecast_date=forecast_date, defaults={ "temperature_min": daily["temperature_min"], "temperature_max": daily["temperature_max"], "temperature_mean": daily["temperature_mean"], "precipitation": daily["precipitation"], "precipitation_probability": daily["precipitation_probability"], "humidity_mean": daily["humidity_mean"], "wind_speed_max": daily["wind_speed_max"], "et0": daily["et0"], "weather_code": daily["weather_code"], }, ) def unseed_forecasts(apps, schema_editor): WeatherForecast = apps.get_model("weather", "WeatherForecast") WeatherForecast.objects.all().delete() class Migration(migrations.Migration): dependencies = [ ("weather", "0002_seed_weather_parameters"), ("location_data", "0002_soildepthdata_refactor"), ] operations = [ migrations.RunPython(seed_forecasts, unseed_forecasts), ]