49 lines
1014 B
Python
49 lines
1014 B
Python
import random
|
|
from typing import List
|
|
|
|
from adventure.models.base import FloatRange, IntRange
|
|
|
|
|
|
def resolve_float_range(range: float | FloatRange | None) -> float | None:
|
|
"""
|
|
Resolve a float range to a single value.
|
|
"""
|
|
|
|
if range is None:
|
|
return None
|
|
|
|
if isinstance(
|
|
range, (float, int)
|
|
): # int is not really necessary here, but mypy complains without it
|
|
return range
|
|
|
|
return random.uniform(range.min, range.max)
|
|
|
|
|
|
def resolve_int_range(range: int | IntRange | None) -> int | None:
|
|
"""
|
|
Resolve an integer range to a single value.
|
|
"""
|
|
|
|
if range is None:
|
|
return None
|
|
|
|
if isinstance(range, int):
|
|
return range
|
|
|
|
return random.randint(range.min, range.max)
|
|
|
|
|
|
def resolve_string_list(result: str | List[str] | None) -> str | None:
|
|
"""
|
|
Resolve a string result to a single value.
|
|
"""
|
|
|
|
if result is None:
|
|
return None
|
|
|
|
if isinstance(result, str):
|
|
return result
|
|
|
|
return random.choice(result)
|