fix(simulation): move regenerate_agent validation to request handler (404/400 before task creation)
This commit is contained in:
parent
5d679024c3
commit
594144e195
|
|
@ -3058,6 +3058,23 @@ def regenerate_agent(simulation_id: str, user_id: int):
|
||||||
"error": t('api.requireProfilesReady', status=state.status.value)
|
"error": t('api.requireProfilesReady', status=state.status.value)
|
||||||
}), 400
|
}), 400
|
||||||
|
|
||||||
|
# Validate agent synchronously before creating the task
|
||||||
|
sim_dir = manager._get_simulation_dir(simulation_id)
|
||||||
|
profiles_file = os.path.join(sim_dir, "reddit_profiles.json")
|
||||||
|
if not os.path.exists(profiles_file):
|
||||||
|
return jsonify({"success": False, "error": t('api.simulationNotFound', id=simulation_id)}), 404
|
||||||
|
|
||||||
|
with open(profiles_file, 'r', encoding='utf-8') as f:
|
||||||
|
profiles_snapshot = json.load(f)
|
||||||
|
|
||||||
|
agent_entry = next((p for p in profiles_snapshot if p.get("user_id") == user_id), None)
|
||||||
|
if agent_entry is None:
|
||||||
|
return jsonify({"success": False, "error": t('api.agentNotFound', user_id=user_id)}), 404
|
||||||
|
|
||||||
|
source_entity_uuid = agent_entry.get("source_entity_uuid")
|
||||||
|
if not source_entity_uuid:
|
||||||
|
return jsonify({"success": False, "error": t('api.agentNoSourceEntity')}), 400
|
||||||
|
|
||||||
task_manager = TaskManager()
|
task_manager = TaskManager()
|
||||||
task_id = task_manager.create_task(
|
task_id = task_manager.create_task(
|
||||||
task_type="regenerate_agent",
|
task_type="regenerate_agent",
|
||||||
|
|
@ -3072,13 +3089,10 @@ def regenerate_agent(simulation_id: str, user_id: int):
|
||||||
task_manager.update_task(task_id, status=TaskStatus.PROCESSING, progress=0,
|
task_manager.update_task(task_id, status=TaskStatus.PROCESSING, progress=0,
|
||||||
message=t('progress.generatingProfile'))
|
message=t('progress.generatingProfile'))
|
||||||
|
|
||||||
sim_dir = manager._get_simulation_dir(simulation_id)
|
|
||||||
profiles_file = os.path.join(sim_dir, "reddit_profiles.json")
|
|
||||||
|
|
||||||
with open(profiles_file, 'r', encoding='utf-8') as f:
|
with open(profiles_file, 'r', encoding='utf-8') as f:
|
||||||
profiles = json.load(f)
|
profiles = json.load(f)
|
||||||
|
|
||||||
# Find the agent
|
# Find the agent (re-read to get latest state)
|
||||||
agent_idx = None
|
agent_idx = None
|
||||||
agent = None
|
agent = None
|
||||||
for i, p in enumerate(profiles):
|
for i, p in enumerate(profiles):
|
||||||
|
|
|
||||||
|
|
@ -239,3 +239,16 @@ def test_regenerate_agent_returns_task_id(client, sim_with_profiles, monkeypatch
|
||||||
data = resp.get_json()
|
data = resp.get_json()
|
||||||
assert data["success"] is True
|
assert data["success"] is True
|
||||||
assert "task_id" in data["data"]
|
assert "task_id" in data["data"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_regenerate_agent_not_found_returns_404(client, sim_with_profiles):
|
||||||
|
sim_id = sim_with_profiles
|
||||||
|
resp = client.post(f"/api/simulation/{sim_id}/agent/999/regenerate", json={})
|
||||||
|
assert resp.status_code == 404
|
||||||
|
|
||||||
|
|
||||||
|
def test_regenerate_agent_no_source_entity_returns_400(client, sim_with_profiles):
|
||||||
|
sim_id = sim_with_profiles
|
||||||
|
# user_id=0 exists but has no source_entity_uuid in the default fixture
|
||||||
|
resp = client.post(f"/api/simulation/{sim_id}/agent/0/regenerate", json={})
|
||||||
|
assert resp.status_code == 400
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue