leeteerah
leeteerah

Reputation: 43

How to pass variable in flask application between different routes using Session

I want to pass two variables from the upload route to classify_data route using Session. But, I am getting an error. The error is : TypeError: process_data() takes 0 positional arguments but 2 were given.

Here is the coding for my flask app.

import csv
from flask import Flask, render_template, request, redirect, url_for, session
import pandas as pd
from scraper import scrape_data
from data_cleaning import clean_data
from data_preprocessing import process_data
from flask_session import Session

app = Flask(__name__)
app.static_folder = 'static'
app.secret_key = 'fyp'
app.config['SESSION_PERMANENT'] = False
app.config['SESSION_TYPE'] = "filesystem"
Session(app)

@app.route('/')
def home():
    return render_template('home_page.html')


@app.route('/upload_page')
def upload_page():
    return render_template('upload_page.html')


@app.route('/upload', methods=['POST'])
def upload():
    job_field = request.form['job-field']
    job_title = request.form['job-title']
    jobdata = []

    if job_field == "Information Technology and Software Development":
        if job_title == "Senior Frontend Developer":
            with open('static/job_IT.csv', newline='') as csvfile:
                reader = csv.reader(csvfile, delimiter=',', quotechar='"')
                next(reader)  # skip the header row
                for i, row in enumerate(reader):
                    if i == 1:  # append the second row to the data list
                        jobdata.append(row)
                        break  # stop reading the file
        elif job_title == "Data Processing Specialist":
            with open('static/job_IT.csv', newline='') as csvfile:
                reader = csv.reader(csvfile, delimiter=',', quotechar='"')
                next(reader)  # skip the header row
                for i, row in enumerate(reader):
                    if i == 2:  # append the second row to the data list
                        jobdata.append(row)
                        break  # stop reading the file
        elif job_title == "Java Developer":
            with open('static/job_IT.csv', newline='') as csvfile:
                reader = csv.reader(csvfile, delimiter=',', quotechar='"')
                next(reader)  # skip the header row
                for i, row in enumerate(reader):
                    if i == 3:  # append the second row to the data list
                        jobdata.append(row)
                        break  # stop reading the file
    elif job_field == "Digital Marketing":
        if job_title == "Digital Marketing Web Specialist":
            with open('static/job_DM.csv', newline='') as csvfile:
                reader = csv.reader(csvfile, delimiter=',', quotechar='"')
                next(reader)  # skip the header row
                for i, row in enumerate(reader):
                    if i == 1:  # append the second row to the data list
                        jobdata.append(row)
                        break  # stop reading the file
        elif job_title == "Video Editor":
            with open('static/job_DM.csv', newline='') as csvfile:
                reader = csv.reader(csvfile, delimiter=',', quotechar='"')
                next(reader)  # skip the header row
                for i, row in enumerate(reader):
                    if i == 2:  # append the second row to the data list
                        jobdata.append(row)
                        break  # stop reading the file
        elif job_title == "Graphic Designer":
            with open('static/job_DM.csv', newline='') as csvfile:
                reader = csv.reader(csvfile, delimiter=',', quotechar='"')
                next(reader)  # skip the header row
                for i, row in enumerate(reader):
                    if i == 3:  # append the second row to the data list
                        jobdata.append(row)
                        break  # stop reading the file
    elif job_field == "Finance":
        if job_title == "Financial Analyst-SSC":
            with open('static/job_FN.csv', newline='') as csvfile:
                reader = csv.reader(csvfile, delimiter=',', quotechar='"')
                next(reader)  # skip the header row
                for i, row in enumerate(reader):
                    if i == 1:  # append the second row to the data list
                        jobdata.append(row)
                        break  # stop reading the file
        elif job_title == "Accountant":
            with open('static/job_FN.csv', newline='') as csvfile:
                reader = csv.reader(csvfile, delimiter=',', quotechar='"')
                next(reader)  # skip the header row
                for i, row in enumerate(reader):
                    if i == 2:  # append the second row to the data list
                        jobdata.append(row)
                        break  # stop reading the file
        elif job_title == "Specialist, Business Finance (APAC)":
            with open('static/job_FN.csv', newline='') as csvfile:
                reader = csv.reader(csvfile, delimiter=',', quotechar='"')
                next(reader)  # skip the header row
                for i, row in enumerate(reader):
                    if i == 3:  # append the second row to the data list
                        jobdata.append(row)
                        break  # stop reading the file

    file = request.files['file']
    df = pd.read_csv(file)
    data = scrape_data(df)
    cleandata = clean_data(data)
    session['cleandata'] = cleandata
    session['jobdata'] = jobdata

    return render_template('display.html', data=cleandata, jobdata=jobdata)

@app.route('/classify_data', methods=['POST'])
def process_data():
    cleandata = session.get('cleandata')
    jobdata = session.get('jobdata')
    processdata = process_data(cleandata, jobdata)
    print(processdata)
    return render_template('display_classification.html', processdata=processdata)


if __name__ == '__main__':
    app.run(debug=True)

Here is the coding for my python file: `` import csv import pandas as pd from sklearn.feature_extraction.text import CountVectorizer from sklearn.metrics.pairwise import cosine_similarity

def process_data(cleandata, jobdata):

headers = cleandata[0].keys()
with open('data.csv', 'w', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=headers)
    writer.writeheader()
    for row in cleandata:
        writer.writerow(row)

headers = jobdata[0].keys()
with open('jobdata.csv', 'w', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=headers)
    writer.writeheader()
    for row in jobdata:
        writer.writerow(row)

# read data from csv files
df1 = pd.read_csv('data.csv')
df2 = pd.read_csv('jobdata.csv')

# 1. FIND SIMILARITY SCORE
# select the columns to compare
columns_to_compare = ['Title', 'Education', 'Skills', 'Languages']

# iterate over each row in df1 and calculate similarity score with df2
similarity_scores = []
for idx, row in df1.iterrows():
    text1 = ' '.join(str(row[col]) for col in columns_to_compare)
    text2 = ' '.join(str(val) for val in df2.iloc[0][columns_to_compare])

    # create a bag-of-words representation of the text
    vectorizer = CountVectorizer(binary=True, stop_words=None, min_df=1)
    X = vectorizer.fit_transform([text1])
    Y = vectorizer.transform([text2])

    # calculate cosine similarity between the bag-of-words representations
    similarity_score = cosine_similarity(X, Y)[0][0]
    similarity_scores.append(similarity_score)

# add the similarity scores to the original dataframe
df1['similarityscores_title_edu_skills_lang'] = similarity_scores

# save the dataframe to csv file
df1.to_csv('similarity_scores.csv', index=False)

process = []

for item in cleandata:
    process_item = {}
    for key, value in item.items():
        process_item[key] = value
    process.append(process_item)

# 2. calculate duration (for experiences)
# 3. label data -> then display (sekali rate kot)
# 4. split column

return process

Upvotes: 0

Views: 188

Answers (1)

John Gordon
John Gordon

Reputation: 33343

Your flask app imports that function:

from data_preprocessing import process_data

... but then it overwrites the imported function with another function of the same name:

@app.route('/classify_data', methods=['POST'])
def process_data():
    ...

Name the second function something else.

Upvotes: 0

Related Questions