Add per-condition encounter rates to seed data (#26)
Co-authored-by: Julian Tabel <juliantabel.jt@gmail.com> Co-committed-by: Julian Tabel <juliantabel.jt@gmail.com>
This commit was merged in pull request #26.
This commit is contained in:
@@ -192,6 +192,41 @@ async def upsert_routes(
|
||||
return {row.name: row.id for row in result}
|
||||
|
||||
|
||||
async def _upsert_single_encounter(
|
||||
session: AsyncSession,
|
||||
route_id: int,
|
||||
pokemon_id: int,
|
||||
game_id: int,
|
||||
method: str,
|
||||
encounter_rate: int,
|
||||
min_level: int,
|
||||
max_level: int,
|
||||
condition: str = "",
|
||||
) -> None:
|
||||
stmt = (
|
||||
insert(RouteEncounter)
|
||||
.values(
|
||||
route_id=route_id,
|
||||
pokemon_id=pokemon_id,
|
||||
game_id=game_id,
|
||||
encounter_method=method,
|
||||
encounter_rate=encounter_rate,
|
||||
condition=condition,
|
||||
min_level=min_level,
|
||||
max_level=max_level,
|
||||
)
|
||||
.on_conflict_do_update(
|
||||
constraint="uq_route_pokemon_method_game_condition",
|
||||
set_={
|
||||
"encounter_rate": encounter_rate,
|
||||
"min_level": min_level,
|
||||
"max_level": max_level,
|
||||
},
|
||||
)
|
||||
)
|
||||
await session.execute(stmt)
|
||||
|
||||
|
||||
async def upsert_route_encounters(
|
||||
session: AsyncSession,
|
||||
route_id: int,
|
||||
@@ -207,28 +242,33 @@ async def upsert_route_encounters(
|
||||
print(f" Warning: no pokemon_id for pokeapi_id {enc['pokeapi_id']}")
|
||||
continue
|
||||
|
||||
stmt = (
|
||||
insert(RouteEncounter)
|
||||
.values(
|
||||
route_id=route_id,
|
||||
pokemon_id=pokemon_id,
|
||||
game_id=game_id,
|
||||
encounter_method=enc["method"],
|
||||
encounter_rate=enc["encounter_rate"],
|
||||
min_level=enc["min_level"],
|
||||
max_level=enc["max_level"],
|
||||
conditions = enc.get("conditions")
|
||||
if conditions:
|
||||
for condition_name, rate in conditions.items():
|
||||
await _upsert_single_encounter(
|
||||
session,
|
||||
route_id,
|
||||
pokemon_id,
|
||||
game_id,
|
||||
enc["method"],
|
||||
rate,
|
||||
enc["min_level"],
|
||||
enc["max_level"],
|
||||
condition=condition_name,
|
||||
)
|
||||
count += 1
|
||||
else:
|
||||
await _upsert_single_encounter(
|
||||
session,
|
||||
route_id,
|
||||
pokemon_id,
|
||||
game_id,
|
||||
enc["method"],
|
||||
enc["encounter_rate"],
|
||||
enc["min_level"],
|
||||
enc["max_level"],
|
||||
)
|
||||
.on_conflict_do_update(
|
||||
constraint="uq_route_pokemon_method_game",
|
||||
set_={
|
||||
"encounter_rate": enc["encounter_rate"],
|
||||
"min_level": enc["min_level"],
|
||||
"max_level": enc["max_level"],
|
||||
},
|
||||
)
|
||||
)
|
||||
await session.execute(stmt)
|
||||
count += 1
|
||||
count += 1
|
||||
|
||||
return count
|
||||
|
||||
|
||||
Reference in New Issue
Block a user