ats-resume-api / frontend /services /api_client.py
Maaz2002's picture
Deploy ATS Resume API to Hugging Face Space
dc95236
Raw
History Blame Contribute Delete
2.23 kB
from typing import Any, Dict, List
import requests
import streamlit as st
DEFAULT_BACKEND_URL = "http://localhost:8000"
def _backend_url() -> str:
try:
return st.secrets["backend"]["url"]
except (KeyError, FileNotFoundError):
return DEFAULT_BACKEND_URL
def _auth_headers(access_token: str) -> Dict[str, str]:
return {"Authorization": f"Bearer {access_token}"}
def health_check() -> Dict[str, Any]:
response = requests.get(f"{_backend_url()}/api/v1/health", timeout=10)
response.raise_for_status()
return response.json()
def analyze_resume(
resume_file,
access_token: str,
job_description: str = "",
) -> Dict[str, Any]:
files = {
"resume": (resume_file.name, resume_file.getvalue(), resume_file.type),
}
data = {"job_description": job_description}
response = requests.post(
f"{_backend_url()}/api/v1/analyze-resume",
files=files,
data=data,
headers=_auth_headers(access_token),
timeout=180,
)
response.raise_for_status()
return response.json()
def get_history(access_token: str) -> List[Dict[str, Any]]:
response = requests.get(
f"{_backend_url()}/api/v1/history",
headers=_auth_headers(access_token),
timeout=30,
)
response.raise_for_status()
return response.json()
def delete_history_entry(analysis_id: str, access_token: str) -> None:
response = requests.delete(
f"{_backend_url()}/api/v1/history/{analysis_id}",
headers=_auth_headers(access_token),
timeout=30,
)
response.raise_for_status()
def generate_pdf(analysis_data: Dict[str, Any], access_token: str) -> bytes:
response = requests.post(
f"{_backend_url()}/api/v1/generate-pdf",
json=analysis_data,
headers=_auth_headers(access_token),
timeout=60,
)
response.raise_for_status()
return response.content
def get_history_pdf(analysis_id: str, access_token: str) -> bytes:
response = requests.get(
f"{_backend_url()}/api/v1/history/{analysis_id}/pdf",
headers=_auth_headers(access_token),
timeout=60,
)
response.raise_for_status()
return response.content