Spaces:
Sleeping
Sleeping
Update main.py
Browse files
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 |
-
|
| 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 |
-
|
| 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 |
-
|
| 488 |
-
|
| 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 |
-
|
| 497 |
-
|
| 498 |
-
|
| 499 |
-
|
| 500 |
-
|
| 501 |
-
|
| 502 |
-
|
| 503 |
-
|
| 504 |
-
|
| 505 |
-
audio_blob.upload_from_string(audio_bytes, content_type="audio/mpeg")
|
| 506 |
-
scene["audio_storage_path"] = audio_blob.public_url
|
| 507 |
|
| 508 |
-
|
| 509 |
-
|
| 510 |
-
project_ref.update({'status': '
|
|
|
|
| 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)
|
| 518 |
-
|
| 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'])
|