rairo commited on
Commit
88765b2
·
verified ·
1 Parent(s): ea70ca1

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +24 -32
main.py CHANGED
@@ -466,56 +466,48 @@ def generate_sozo_report(project_id):
466
  })
467
  return jsonify({'error': str(e)}), 500
468
 
 
 
469
  @app.route('/api/sozo/projects/<string:project_id>/generate-video', methods=['POST'])
470
  def generate_sozo_video(project_id):
471
- logger.info(f"Endpoint /generate-video POST for project {project_id}")
472
  try:
473
  token = request.headers.get('Authorization', '').split(' ')[1]
474
  uid = verify_token(token)
475
  if not uid: return jsonify({'error': 'Unauthorized'}), 401
476
- logger.info(f"Token verified for user {uid} for video script generation.")
477
-
478
  project_ref = db.reference(f'sozo_projects/{project_id}')
479
  project_data = project_ref.get()
480
- if not project_data or project_data.get('uid') != uid:
481
- logger.warning(f"User {uid} failed to generate video script: Project {project_id} not found or not owned.")
482
- return jsonify({'error': 'Project not found or unauthorized'}), 404
483
-
484
  data = request.get_json()
485
  voice_model = data.get('voice_model', 'aura-2-andromeda-en')
 
486
 
487
- logger.info(f"User {uid}: Ownership verified for project {project_id}. Starting video script generation with voice {voice_model}.")
488
- project_ref.update({'status': 'generating_video', 'updatedAt': datetime.utcnow().isoformat()})
489
-
490
- blob_path = f"sozo_projects/{uid}/{project_id}/data{Path(project_data['originalFilename']).suffix}"
491
- logger.info(f"User {uid}: Downloading data from {blob_path}")
492
  blob = bucket.blob(blob_path)
493
  file_bytes = blob.download_as_bytes()
494
  df = load_dataframe_safely(io.BytesIO(file_bytes), project_data['originalFilename'])
495
 
496
- logger.info(f"User {uid}: Calling core logic to generate video script for project {project_id}.")
497
- video_script = generate_video_from_project(df, project_data.get('report_content', {}).get('raw_md', ''), voice_model)
498
-
499
- logger.info(f"User {uid}: Uploading generated audio files to storage for project {project_id}.")
500
- for scene in video_script.get("scenes", []):
501
- if scene.get("audio_content"):
502
- audio_bytes = scene.pop("audio_content")
503
- audio_blob_name = f"sozo_projects/{uid}/{project_id}/audio/{scene['scene_id']}.mp3"
504
- audio_blob = bucket.blob(audio_blob_name)
505
- audio_blob.upload_from_string(audio_bytes, content_type="audio/mpeg")
506
- scene["audio_storage_path"] = audio_blob.public_url
507
 
508
- logger.info(f"User {uid}: Saving video script specification to database for project {project_id}.")
509
- project_ref.child('video_script').set(video_script)
510
- project_ref.update({'status': 'video_script_complete', 'updatedAt': datetime.utcnow().isoformat()})
 
511
 
512
- full_project_data = project_ref.get()
513
- logger.info(f"User {uid}: Video script generation for project {project_id} complete.")
514
- return jsonify({'success': True, 'project': full_project_data}), 200
515
-
516
  except Exception as e:
517
- db.reference(f'sozo_projects/{project_id}').update({'status': 'failed', 'error': str(e), 'updatedAt': datetime.utcnow().isoformat()})
518
- logger.error(f"CRITICAL ERROR generating video for {project_id}: {traceback.format_exc()}")
519
  return jsonify({'error': str(e)}), 500
520
 
521
  @app.route('/api/sozo/projects/<string:project_id>/charts', methods=['POST'])
 
466
  })
467
  return jsonify({'error': str(e)}), 500
468
 
469
+ # In app.py
470
+
471
  @app.route('/api/sozo/projects/<string:project_id>/generate-video', methods=['POST'])
472
  def generate_sozo_video(project_id):
 
473
  try:
474
  token = request.headers.get('Authorization', '').split(' ')[1]
475
  uid = verify_token(token)
476
  if not uid: return jsonify({'error': 'Unauthorized'}), 401
477
+
 
478
  project_ref = db.reference(f'sozo_projects/{project_id}')
479
  project_data = project_ref.get()
480
+ if not project_data or project_data.get('uid') != uid: return jsonify({'error': 'Project not found or unauthorized'}), 404
481
+
 
 
482
  data = request.get_json()
483
  voice_model = data.get('voice_model', 'aura-2-andromeda-en')
484
+ if voice_model not in ['aura-2-andromeda-en', 'aura-2-orpheus-en']: return jsonify({'error': 'Invalid voice model specified'}), 400
485
 
486
+ project_ref.update({'status': 'generating_video'})
487
+
488
+ blob_path = "/".join(project_data['originalDataUrl'].split('/')[4:])
 
 
489
  blob = bucket.blob(blob_path)
490
  file_bytes = blob.download_as_bytes()
491
  df = load_dataframe_safely(io.BytesIO(file_bytes), project_data['originalFilename'])
492
 
493
+ # --- THIS IS THE CORRECTED FUNCTION CALL ---
494
+ video_url = generate_video_from_project(
495
+ df,
496
+ project_data.get('rawMarkdown', ''), # Use the correct key for the markdown
497
+ uid, # ADDED missing uid
498
+ project_id, # ADDED missing project_id
499
+ voice_model, # Now in the correct position
500
+ bucket # ADDED missing bucket
501
+ )
 
 
502
 
503
+ if not video_url: raise Exception("Video generation failed in core function.")
504
+
505
+ project_ref.update({'status': 'video_complete', 'videoUrl': video_url})
506
+ return jsonify({'success': True, 'video_url': video_url}), 200
507
 
 
 
 
 
508
  except Exception as e:
509
+ db.reference(f'sozo_projects/{project_id}').update({'status': 'failed', 'error': str(e)})
510
+ traceback.print_exc()
511
  return jsonify({'error': str(e)}), 500
512
 
513
  @app.route('/api/sozo/projects/<string:project_id>/charts', methods=['POST'])