odoo18/addons_extensions/hr_recruitment_extended/models/resume_pearser.py

44 lines
1.7 KiB
Python

from odoo import models, fields, api
from pyresparser import ResumeParser
import base64
import tempfile
class ResumeParserModel(models.Model):
_name = 'resume.parser'
_description = 'Resume Parser'
name = fields.Char(string="Candidate Name")
email = fields.Char(string="Email")
phone = fields.Char(string="Phone")
skills_text = fields.Text(string="Skills")
experience_text = fields.Text(string="Experience")
degree_text = fields.Text(string="Degree")
resume_file = fields.Binary(string="Resume File")
resume_filename = fields.Char(string="Filename")
def action_parse_resume(self):
for record in self:
if not record.resume_file:
raise ValueError('Please upload a resume file first.')
# Save file temporarily
temp_dir = tempfile.gettempdir()
file_path = f"{temp_dir}/{record.resume_filename}"
with open(file_path, 'wb') as f:
f.write(base64.b64decode(record.resume_file))
# Parse Resume using AI (pyresparser)
try:
data = ResumeParser(file_path).get_extracted_data()
# Update fields
record.name = data.get('name', '')
record.email = data.get('email', '')
record.phone = data.get('phone', '')
record.skills_text = ', '.join(data.get('skills', [])) if data.get('skills') else ''
record.experience_text = '\n'.join(data.get('experience', [])) if data.get('experience') else ''
record.degree_text = ', '.join(data.get('degree', [])) if data.get('degree') else ''
except Exception as e:
raise ValueError(f"Error parsing resume: {str(e)}")