Spaces:
Sleeping
Sleeping
import os | |
import json | |
from flask import Flask, request, render_template, redirect, url_for, session, flash, send_from_directory, send_file | |
from werkzeug.utils import secure_filename | |
from utils.file_to_text import extract_text_based_on_format, preprocess_text | |
from utils.anoter_to_json import process_uploaded_json | |
from utils.json_to_spacy import convert_json_to_spacy | |
from utils.model import train_model | |
import zipfile | |
app = Flask(__name__) | |
app.secret_key = 'your_secret_key' | |
os.umask(0o000) | |
print("Current user:", os.getuid()) | |
print("Upload folder permissions:", os.stat(app.config['UPLOAD_FOLDER']).st_mode) | |
print("Trying to save file:", file_path) | |
# Folder paths | |
app.config['UPLOAD_FOLDER'] = 'uploads' | |
app.config['JSON_FOLDER'] = 'JSON' | |
app.config['DATA_FOLDER'] = 'data' | |
app.config['MODELS_FOLDER'] = 'Models' | |
# Creating Folders if not exists | |
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) | |
os.makedirs(app.config['JSON_FOLDER'], exist_ok=True) | |
os.makedirs(app.config['DATA_FOLDER'], exist_ok=True) | |
os.makedirs(app.config['MODELS_FOLDER'], exist_ok=True) | |
# Allowed file extensions | |
ALLOWED_EXTENSIONS = {'pdf', 'docx', 'rsf', 'odt', 'png', 'jpg', 'jpeg', 'json'} | |
# Function to check file extensions | |
def allowed_file(filename): | |
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS | |
def index(): | |
return render_template('upload.html') | |
def guide(): | |
return render_template('guide.html') | |
def ner_preview(): | |
return render_template('anoter.html') | |
def json_file(): | |
return render_template('savejson.html') | |
def spacy_file(): | |
return render_template('saveSpacy.html') | |
def text_preview(): | |
try: | |
resume_file_path = os.path.join(app.config['DATA_FOLDER'], 'resume_text.txt') | |
if not os.path.exists(resume_file_path): | |
flash('Resume text not found', 'error') | |
return redirect(url_for('index')) | |
with open(resume_file_path, 'r') as f: | |
text = f.read() | |
return render_template('text.html', text=text) | |
except Exception as e: | |
flash(f"Error loading text preview: {str(e)}", 'error') | |
return redirect(url_for('index')) | |
def upload_file(): | |
try: | |
if request.method == 'POST': | |
if 'file' not in request.files: | |
print("the file 1 ",file) | |
flash('No file part', 'error') | |
return render_template('upload.html') # Avoid redirect loop | |
file = request.files['file'] | |
if file.filename == '': | |
flash('No selected file', 'error') | |
return render_template('upload.html') # Avoid redirect loop | |
if file and allowed_file(file.filename): | |
filename = secure_filename(file.filename) | |
print("the file 1 ",filename) | |
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) | |
print("the file path ",file_path) | |
file.save(file_path) | |
print("file save in folder") | |
# Handle non-JSON files | |
if not filename.lower().endswith('.json'): | |
return process_other_files(file_path, filename) | |
else: | |
flash('JSON file uploaded successfully', 'success') | |
return render_template('upload.html') | |
flash('File type not allowed', 'error') | |
return render_template('upload.html') | |
return render_template('upload.html') | |
except Exception as e: | |
print(f"Error----------: {str(e)}", 'error') | |
flash(f"Error: {str(e)}", 'error') | |
return render_template('upload.html') | |
def process_other_files(file_path, filename): | |
try: | |
extracted_text, _ = extract_text_based_on_format(file_path) | |
cleaned_text = preprocess_text(extracted_text) | |
resume_file_path = os.path.join(app.config['DATA_FOLDER'], 'resume_text.txt') | |
print("text file path",resume_file_path) | |
with open(resume_file_path, 'w', encoding='utf-8') as f: | |
f.write(cleaned_text) | |
session['uploaded_file'] = filename | |
print("save in txt file") | |
return render_template('text.html', text=cleaned_text) | |
except Exception as e: | |
flash(f"Error processing file {filename}: {str(e)}", 'error') | |
return redirect(request.referrer) | |
def download_file(): | |
try: | |
return send_from_directory(app.config['DATA_FOLDER'], 'resume_text.txt', as_attachment=True) | |
except Exception as e: | |
flash(f"Error downloading file: {str(e)}", 'error') | |
return redirect(request.referrer) | |
def download_latest_model(): | |
try: | |
models_dir = app.config['MODELS_FOLDER'] | |
model_files = os.listdir(models_dir) | |
if not model_files: | |
flash('No model files found', 'error') | |
return redirect(request.referrer) | |
latest_model_file = sorted(model_files, reverse=True)[0] | |
model_path = os.path.join(models_dir, latest_model_file) | |
if not os.path.exists(model_path): | |
flash('Model file not found on the server', 'error') | |
return redirect(request.referrer) | |
zip_filename = os.path.join(models_dir, f"{latest_model_file}.zip") | |
with zipfile.ZipFile(zip_filename, 'w') as zipf: | |
zipf.write(model_path, os.path.basename(model_path)) | |
return send_file(zip_filename, as_attachment=True) | |
except Exception as e: | |
flash(f"Error while downloading the model: {str(e)}", 'error') | |
return redirect(request.referrer) | |
if __name__ == '__main__': | |
app.run(debug=True) | |