HR-ATS-Portal/backend/job/candidate/views.py

28 lines
1004 B
Python

from sqlalchemy.ext.asyncio import AsyncSession
import os,logging,io
from fastapi import HTTPException
from pypdf import PdfReader
from sqlalchemy import select
from job.candidate.plugins import normalize_spaced_text
class FileRead:
def __init__(self,session:AsyncSession,filename=None,file=None):
self.session=session
self.filename=filename
self.file=file
async def read_file(self,file=None,filename=None):
try:
reader = PdfReader(io.BytesIO(self.file))
if reader.is_encrypted:
raise HTTPException(400, "PDF is password protected")
pages = [(page.extract_text() or "") for page in reader.pages]
return {
"filename": self.filename,
"num_pages": len(reader.pages),
"text": normalize_spaced_text("\n".join(pages)),
}
except HTTPException:
raise
except Exception as e:
raise HTTPException(400, str(e))