Miszmisz commited on
Commit
1b4da46
·
1 Parent(s): c99af6f

add logging to debug mysterious 500

Browse files
Files changed (1) hide show
  1. main.py +26 -8
main.py CHANGED
@@ -2,11 +2,15 @@ from pydantic import BaseModel
2
  from fastapi import FastAPI, UploadFile, HTTPException
3
  from ffmpeg import input, output, run
4
  from botocore.exceptions import ClientError
 
5
  import ffmpeg
6
  import boto3
7
  import json
8
  import os
9
 
 
 
 
10
  app = FastAPI()
11
 
12
  # Define your AWS S3 credentials and bucket name
@@ -29,6 +33,7 @@ class CutRequestInput(BaseModel):
29
  data: CutRequest
30
 
31
  def download_file(news_name: str, quote_filename: str, new_filename: str = "source.mp3"):
 
32
  s3_directory = f'{aws_env}/{news_name}'
33
  s3_object_key = f'{s3_directory}/{quote_filename}'
34
  local_file = os.path.join(temp_dir, new_filename)
@@ -36,37 +41,47 @@ def download_file(news_name: str, quote_filename: str, new_filename: str = "sour
36
  try:
37
  # Ensure the download directory exists
38
  os.makedirs(temp_dir, exist_ok=True)
 
39
 
40
  s3_client.download_file(s3_bucket_name, s3_object_key, local_file)
41
- print(f"File downloaded and saved as: {local_file}")
42
 
43
  # Return the local_file path
44
  return local_file
45
 
46
  except ClientError as e:
47
  if e.response['Error']['Code'] == "404":
 
 
48
  raise HTTPException(status_code=404, detail=f"The file {quote_filename} does not exist in S3.")
49
  else:
 
 
50
  raise HTTPException(status_code=500, detail=f"Failed to download file from S3: {str(e)}")
51
  except Exception as e:
 
 
52
  raise HTTPException(status_code=500, detail=f"An unexpected error occurred: {str(e)}")
53
 
54
 
55
  @app.post("/cut-audio")
56
  async def cut_audio(request: CutRequestInput):
57
- print(f"Received request: {request}")
58
 
59
  try:
60
 
61
  cut_request = request.data
 
62
 
63
- print(f"Received request: {cut_request}")
64
 
 
65
 
66
  download_file(cut_request.news_name, cut_request.quote_filename)
67
  for i, segment in enumerate(cut_request.segments):
68
  start, end = segment
69
- output_file = f"/tmp/cut_quote_{i}.mp3"
 
 
70
  try:
71
  (
72
  ffmpeg
@@ -75,19 +90,22 @@ async def cut_audio(request: CutRequestInput):
75
  .run()
76
  )
77
  except ffmpeg.Error as e:
 
 
78
  raise HTTPException(status_code=500, detail=str(e))
79
  try:
80
  s3_output_key = f'{aws_env}/{cut_request.news_id}/genBase_segment_{i}.mp3'
81
  s3_client.upload_file(output_file, s3_bucket_name, s3_output_key)
82
  except Exception as e:
 
 
83
  raise HTTPException(status_code=500, detail=f"Failed to upload file to S3: {e}")
84
 
85
  return {"message": "Audio cut successfully"}
86
 
87
- except json.JSONDecodeError as e:
88
- raise HTTPException(status_code=400, detail=f"Invalid JSON: {str(e)}")
89
- except ValueError as e:
90
- raise HTTPException(status_code=422, detail=str(e))
91
 
92
  @app.post("/merge_audio/{output_key}")
93
  async def merge_audio(output_key: str):
 
2
  from fastapi import FastAPI, UploadFile, HTTPException
3
  from ffmpeg import input, output, run
4
  from botocore.exceptions import ClientError
5
+ import logging
6
  import ffmpeg
7
  import boto3
8
  import json
9
  import os
10
 
11
+ logging.basicConfig(level=logging.DEBUG)
12
+ logger = logging.getLogger(__name__)
13
+
14
  app = FastAPI()
15
 
16
  # Define your AWS S3 credentials and bucket name
 
33
  data: CutRequest
34
 
35
  def download_file(news_name: str, quote_filename: str, new_filename: str = "source.mp3"):
36
+ logger.debug(f"Downloading file: news_name={news_name}, quote_filename={quote_filename}")
37
  s3_directory = f'{aws_env}/{news_name}'
38
  s3_object_key = f'{s3_directory}/{quote_filename}'
39
  local_file = os.path.join(temp_dir, new_filename)
 
41
  try:
42
  # Ensure the download directory exists
43
  os.makedirs(temp_dir, exist_ok=True)
44
+ logger.debug(f"Downloading from S3: bucket={s3_bucket_name}, key={s3_object_key}, local_file={local_file}")
45
 
46
  s3_client.download_file(s3_bucket_name, s3_object_key, local_file)
47
+ logger.debug(f"File downloaded and saved as: {local_file}")
48
 
49
  # Return the local_file path
50
  return local_file
51
 
52
  except ClientError as e:
53
  if e.response['Error']['Code'] == "404":
54
+ logger.error(f"File not found in S3: {s3_object_key}")
55
+
56
  raise HTTPException(status_code=404, detail=f"The file {quote_filename} does not exist in S3.")
57
  else:
58
+ logger.error(f"S3 download error: {str(e)}")
59
+
60
  raise HTTPException(status_code=500, detail=f"Failed to download file from S3: {str(e)}")
61
  except Exception as e:
62
+ logger.exception(f"Unexpected error in download_file: {str(e)}")
63
+
64
  raise HTTPException(status_code=500, detail=f"An unexpected error occurred: {str(e)}")
65
 
66
 
67
  @app.post("/cut-audio")
68
  async def cut_audio(request: CutRequestInput):
69
+ logger.debug(f"Received request: {request}")
70
 
71
  try:
72
 
73
  cut_request = request.data
74
+ logger.debug(f"Parsed cut_request: {cut_request}")
75
 
 
76
 
77
+ print(f"Received request: {cut_request}")
78
 
79
  download_file(cut_request.news_name, cut_request.quote_filename)
80
  for i, segment in enumerate(cut_request.segments):
81
  start, end = segment
82
+ logger.debug(f"Processing segment {i}: start={start}, end={end}")
83
+
84
+ output_file = f"/tmp/cut_quote_{i}{cut_request.quote_filename}"
85
  try:
86
  (
87
  ffmpeg
 
90
  .run()
91
  )
92
  except ffmpeg.Error as e:
93
+ logger.error(f"FFMPEG Error: {str(e)}")
94
+
95
  raise HTTPException(status_code=500, detail=str(e))
96
  try:
97
  s3_output_key = f'{aws_env}/{cut_request.news_id}/genBase_segment_{i}.mp3'
98
  s3_client.upload_file(output_file, s3_bucket_name, s3_output_key)
99
  except Exception as e:
100
+ logger.error(f"S3 Upload Error: {str(e)}")
101
+
102
  raise HTTPException(status_code=500, detail=f"Failed to upload file to S3: {e}")
103
 
104
  return {"message": "Audio cut successfully"}
105
 
106
+ except Exception as e:
107
+ logger.exception("Unexpected error in cut_audio")
108
+ raise HTTPException(status_code=500, detail=f"Unexpected error: {str(e)}")
 
109
 
110
  @app.post("/merge_audio/{output_key}")
111
  async def merge_audio(output_key: str):