Skip to content

Commit

Permalink
chore: setup database
Browse files Browse the repository at this point in the history
  • Loading branch information
WilliamSilveiraF committed Oct 25, 2023
1 parent 3435ad0 commit 17f3df8
Show file tree
Hide file tree
Showing 11 changed files with 85 additions and 10 deletions.
33 changes: 26 additions & 7 deletions api/routes/audio.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
from fastapi import APIRouter, UploadFile, File, HTTPException
from fastapi import APIRouter, UploadFile, File, HTTPException, Depends
from pathlib import Path
from services.transcribe_audio import transcribe_audio_content

from services import summary, sentiment_calculator, transcribe_audio
from models.audio_analysis import AudioAnalysis
from sqlalchemy.orm import Session
from db.utils import get_db
import os

router = APIRouter()
Expand All @@ -13,7 +15,10 @@ def read_root():
return {"Audio":"OK"}

@router.post("/upload/")
async def upload_audio(file: UploadFile = File(...)):
async def upload_audio(
file: UploadFile = File(...),
db: Session = Depends(get_db)
):
try:
data = await file.read()

Expand All @@ -23,9 +28,23 @@ async def upload_audio(file: UploadFile = File(...)):
with open(path_to_audio, 'wb') as f:
f.write(data)

audio_text = transcribe_audio_content(path_to_audio)

return {"filename": file.filename, "message": "File uploaded successfully!"}
transcription = transcribe_audio.transcribe_audio_content(path_to_audio)
summary_text = summary.generate_summary(transcription)
sentiment_scores = sentiment_calculator.sentiment_score(transcription)

audio_analysis = AudioAnalysis(
filename=file.filename,
summary=summary_text,
transcription=transcription,
negative_score=sentiment_scores['negative_score'],
neutral_score=sentiment_scores['neutral_score'],
positive_score=sentiment_scores['positive_score']
)

db.add(audio_analysis)
db.commit()

return {"audio_id": audio_analysis.id, "message": "File uploaded successfully!"}
except Exception as e:
print(e)
raise HTTPException(status_code=500, detail="File upload failed.")
Expand Down
3 changes: 3 additions & 0 deletions config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from decouple import config

DATABASE_URL = config('DATABASE_URL')
Empty file added db/__init__.py
Empty file.
5 changes: 5 additions & 0 deletions db/init_db.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from db.session import engine
from models import audio_analysis

def init_db():
audio_analysis.Base.metadata.create_all(bind=engine)
11 changes: 11 additions & 0 deletions db/session.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from config import DATABASE_URL


engine = create_engine(DATABASE_URL)

SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()
8 changes: 8 additions & 0 deletions db/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from db.session import SessionLocal

def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
15 changes: 13 additions & 2 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,20 @@
from fastapi import FastAPI
from fastapi import FastAPI, Depends
from api.routes import audio
from middlewares import cors_middleware
from typing import Annotated
from sqlalchemy.orm import Session
from db.init_db import init_db
from db.utils import get_db


app = FastAPI()

@app.on_event("startup")
async def startup_event():
init_db()

cors_middleware.setup_cors(app)

app.include_router(audio.router)
db_dependency = Annotated[Session, Depends(get_db)]

app.include_router(audio.router)
Empty file added models/__init__.py
Empty file.
14 changes: 14 additions & 0 deletions models/audio_analysis.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from sqlalchemy import Column, String, Text, Integer, Float
from db.session import Base

class AudioAnalysis(Base):
__tablename__ = 'audio_analysis'

id = Column(Integer, primary_key=True, index=True)
filename = Column(String(255))
summary = Column(Text)
transcription = Column(Text)
negative_score = Column(Float)
neutral_score = Column(Float)
positive_score = Column(Float)

Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,8 @@ def sentiment_score(text: str) -> int:
scores = output[0][0].detach().numpy()
scores = softmax(scores)

return { 'negative': scores[0], 'neutral': scores[1], 'positive': scores[2] }
return {
'negative_score': float(scores[0]),
'neutral_score': float(scores[1]),
'positive_score': float(scores[2])
}
File renamed without changes.

0 comments on commit 17f3df8

Please sign in to comment.