Fix Doris Barbell band logging and nav links
This commit is contained in:
@@ -132,7 +132,7 @@ def routine_log_sheet(request: Request, routine_id: str):
|
||||
context={
|
||||
'title': f"Log {routine['name']}",
|
||||
'routine': routine,
|
||||
'routine_sheet': _build_routine_log_sheet(routine),
|
||||
'routine_sheet': _build_routine_log_sheet(request, routine),
|
||||
'exercise_options': _exercise_options_for_routine(request, routine),
|
||||
'routine_action_label': _routine_action_label(routine['name']),
|
||||
'default_performed_at': _default_performed_at_value(),
|
||||
@@ -261,24 +261,29 @@ def _get_routine_or_404(request: Request, routine_id: str) -> dict:
|
||||
return routine
|
||||
|
||||
|
||||
def _build_routine_log_sheet(routine: dict) -> list[dict]:
|
||||
def _build_routine_log_sheet(request: Request, routine: dict) -> list[dict]:
|
||||
equipment_by_name = _exercise_equipment_lookup(request)
|
||||
sheet = []
|
||||
for exercise_index, exercise in enumerate(routine.get('exercises', [])):
|
||||
exercise_name = exercise['exercise_name']
|
||||
target_sets = max(int(exercise.get('target_sets', 1) or 1), 1)
|
||||
default_reps = _default_reps_value(exercise.get('target_reps'))
|
||||
is_band = equipment_by_name.get(exercise_name.strip().lower()) == 'band'
|
||||
sheet.append(
|
||||
{
|
||||
'exercise_index': exercise_index,
|
||||
'exercise_name': exercise['exercise_name'],
|
||||
'exercise_name': exercise_name,
|
||||
'target_sets': target_sets,
|
||||
'target_reps': exercise.get('target_reps'),
|
||||
'default_reps': default_reps,
|
||||
'notes': exercise.get('notes'),
|
||||
'is_band': is_band,
|
||||
'sets': [
|
||||
{
|
||||
'exercise_index': exercise_index,
|
||||
'index': set_index,
|
||||
'default_reps': default_reps,
|
||||
'is_band': is_band,
|
||||
}
|
||||
for set_index in range(target_sets)
|
||||
],
|
||||
@@ -305,6 +310,17 @@ def _exercise_options_for_routine(request: Request, routine: dict) -> list[str]:
|
||||
return ordered
|
||||
|
||||
|
||||
def _exercise_equipment_lookup(request: Request) -> dict[str, str]:
|
||||
lookup: dict[str, str] = {}
|
||||
for template in request.app.state.store.list_exercise_templates():
|
||||
name = str(template.get('name', '')).strip().lower()
|
||||
equipment = str(template.get('equipment', '')).strip().lower()
|
||||
if not name or not equipment:
|
||||
continue
|
||||
lookup[name] = equipment
|
||||
return lookup
|
||||
|
||||
|
||||
def _default_reps_value(target_reps: str | None) -> str:
|
||||
if target_reps is None:
|
||||
return ''
|
||||
@@ -332,11 +348,13 @@ def _routine_action_label(routine_name: str) -> str:
|
||||
async def _parse_structured_routine_form(request: Request, routine: dict, exercise_count: int) -> list[dict]:
|
||||
form = await request.form()
|
||||
routine_exercises = routine.get('exercises', [])
|
||||
equipment_by_name = _exercise_equipment_lookup(request)
|
||||
exercises = []
|
||||
for exercise_index in range(exercise_count):
|
||||
exercise_name = str(form.get(f'exercise_{exercise_index}_name', '')).strip()
|
||||
if not exercise_name:
|
||||
continue
|
||||
is_band_exercise = equipment_by_name.get(exercise_name.lower()) == 'band'
|
||||
try:
|
||||
set_count = int(str(form.get(f'exercise_{exercise_index}_set_count', '0')).strip())
|
||||
except ValueError as exc:
|
||||
@@ -350,17 +368,25 @@ async def _parse_structured_routine_form(request: Request, routine: dict, exerci
|
||||
reps_raw = str(form.get(f'exercise_{exercise_index}_set_{set_index}_reps', '')).strip()
|
||||
weight_raw = str(form.get(f'exercise_{exercise_index}_set_{set_index}_weight_lbs', '')).strip()
|
||||
if not reps_raw and not weight_raw:
|
||||
continue
|
||||
if not reps_raw and weight_raw and default_reps_raw.isdigit():
|
||||
if is_band_exercise and default_reps_raw.isdigit():
|
||||
reps_raw = default_reps_raw
|
||||
else:
|
||||
continue
|
||||
if not reps_raw and default_reps_raw.isdigit():
|
||||
reps_raw = default_reps_raw
|
||||
if not reps_raw or not weight_raw:
|
||||
if not reps_raw:
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail=f'Exercise {exercise_name} set {set_index + 1} needs reps.',
|
||||
)
|
||||
if not weight_raw and not is_band_exercise:
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail=f'Exercise {exercise_name} set {set_index + 1} needs both reps and weight.',
|
||||
)
|
||||
try:
|
||||
reps = int(reps_raw)
|
||||
weight_lbs = float(weight_raw)
|
||||
weight_lbs = None if not weight_raw else float(weight_raw)
|
||||
except ValueError as exc:
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
|
||||
Reference in New Issue
Block a user