webcodelab commited on
Commit
9081ced
·
verified ·
1 Parent(s): ecc0532

Update app/routes.py

Browse files
Files changed (1) hide show
  1. app/routes.py +22 -9
app/routes.py CHANGED
@@ -14,6 +14,7 @@ from .supabase_config import SUPABASE_URL, SUPABASE_API_KEY
14
  import secrets
15
  import os
16
  import requests
 
17
  api = Blueprint('api', __name__)
18
 
19
  SUPABASE_URL = os.getenv("SUPABASE_URL")
@@ -318,18 +319,25 @@ def docs():
318
 
319
 
320
  allowed_extensions = {'pdf', 'docx'}
 
321
  def allowed_file(filename):
322
  return '.' in filename and filename.rsplit('.', 1)[1].lower() in allowed_extensions
323
 
324
-
325
  @auth.route('/try-api', methods=['POST'])
326
  def try_api():
327
  api_key = request.form.get('api_key')
328
  resumes = request.files.getlist('resumes')
329
  job_description = request.form.get('job_description')
330
 
331
- if not api_key or not resumes or not job_description:
332
- flash("All fields are required.")
 
 
 
 
 
 
 
333
  return redirect(url_for('auth.docs'))
334
 
335
  # Validate API key from Supabase
@@ -342,23 +350,28 @@ def try_api():
342
  flash("Invalid API key.")
343
  return redirect(url_for('auth.docs'))
344
 
345
- # Optional: Check file types
346
  for resume in resumes:
347
  if not allowed_file(resume.filename):
348
- flash("Only PDF or DOCX resumes are allowed.")
349
  return redirect(url_for('auth.docs'))
 
350
 
351
- # Placeholder ranking logic
352
- ranked = [resume.filename for resume in resumes]
 
 
 
 
353
 
 
354
  return render_template('docs.html', response={
355
  "job_description": job_description,
356
- "ranked_resumes": ranked
357
  })
358
 
359
 
360
 
361
-
362
  @auth.route('/ping-db')
363
  def ping_db():
364
  try:
 
14
  import secrets
15
  import os
16
  import requests
17
+
18
  api = Blueprint('api', __name__)
19
 
20
  SUPABASE_URL = os.getenv("SUPABASE_URL")
 
319
 
320
 
321
  allowed_extensions = {'pdf', 'docx'}
322
+
323
  def allowed_file(filename):
324
  return '.' in filename and filename.rsplit('.', 1)[1].lower() in allowed_extensions
325
 
 
326
  @auth.route('/try-api', methods=['POST'])
327
  def try_api():
328
  api_key = request.form.get('api_key')
329
  resumes = request.files.getlist('resumes')
330
  job_description = request.form.get('job_description')
331
 
332
+ # Validate form fields
333
+ if not api_key:
334
+ flash("API key is required.")
335
+ return redirect(url_for('auth.docs'))
336
+ if not resumes:
337
+ flash("Please upload at least one resume.")
338
+ return redirect(url_for('auth.docs'))
339
+ if not job_description:
340
+ flash("Job description is required.")
341
  return redirect(url_for('auth.docs'))
342
 
343
  # Validate API key from Supabase
 
350
  flash("Invalid API key.")
351
  return redirect(url_for('auth.docs'))
352
 
353
+ # Validate file types
354
  for resume in resumes:
355
  if not allowed_file(resume.filename):
356
+ flash(f"Invalid file type: {resume.filename}. Only PDF or DOCX allowed.")
357
  return redirect(url_for('auth.docs'))
358
+ resume.filename = secure_filename(resume.filename)
359
 
360
+ # Run actual ranking logic
361
+ try:
362
+ ranked = rank_resumes_by_semantic_similarity(resumes, job_description)
363
+ except Exception as e:
364
+ flash(f"Error processing resumes: {str(e)}")
365
+ return redirect(url_for('auth.docs'))
366
 
367
+ # Render results
368
  return render_template('docs.html', response={
369
  "job_description": job_description,
370
+ "ranked_resumes": ranked # List of dicts with filename and score
371
  })
372
 
373
 
374
 
 
375
  @auth.route('/ping-db')
376
  def ping_db():
377
  try: