-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.py
182 lines (153 loc) · 7.93 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
import os
from flask import Flask, request, jsonify, render_template, redirect
from flask_sqlalchemy import SQLAlchemy
import sqlalchemy
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session
from sqlalchemy import create_engine, func
from sqlalchemy.ext.declarative import declarative_base
import psycopg2
# from models import Keyword,Jobs
from flask import Flask, jsonify
import sys
CONST_ALL = "All"
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URL', '') or "postgresql://Jupyter_User:[email protected]/JobsDB"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
Base = declarative_base()
# db credentials to be moved to hide
engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'])
# reflect an existing database into a new model
Base = automap_base()
# reflect the tables
Base.prepare(engine, reflect=True)
# Save reference to the table
Jobs = Base.classes.jobs
Keyword = Base.classes.keyword
State = Base.classes.state
BenchmarkSalary = Base.classes.benchmark_salary
UnderEmploymentRates = Base.classes.under_employment_rates
HistoricalSalary = Base.classes.historical_salary
@app.route("/")
def home():
session = Session(engine)
statesResults = session.query(State.state).all()
rolesResults = session.query(Keyword.keyword).all()
session.close()
stateList = []
roleList = []
for state in statesResults:
stateList.append(state[0])
for keyword in rolesResults:
roleList.append(keyword[0])
stateList.append(CONST_ALL)
roleList.append(CONST_ALL)
return render_template("index.html",sdata=stateList, rdata = roleList)
@app.route("/get_jobs/<stat>/<role>", methods=['GET'])
def get_jobs(stat=None, role=None):
results = None
session = Session(engine)
if stat == CONST_ALL and role == CONST_ALL:
results = session.query(Jobs.company, Jobs.contract_time, Jobs.contract_type, Jobs.latitude, Jobs.longitude, Jobs.area, Jobs.redirect_url,Jobs.created,Jobs.title,Jobs.salary_min,
Jobs.salary_max,Jobs.description,Keyword.keyword,State.state).filter(Keyword.id == Jobs.keyword_id,State.id == Jobs.state_id).all()
if stat == CONST_ALL and role != CONST_ALL:
results = session.query(Jobs.company, Jobs.contract_time, Jobs.contract_type, Jobs.latitude, Jobs.longitude, Jobs.area, Jobs.redirect_url,Jobs.created,Jobs.title,Jobs.salary_min,
Jobs.salary_max,Jobs.description,Keyword.keyword,State.state).filter(Keyword.id == Jobs.keyword_id,State.id == Jobs.state_id, Keyword.keyword == role).all()
if stat != CONST_ALL and role == CONST_ALL:
results = session.query(Jobs.company, Jobs.contract_time, Jobs.contract_type, Jobs.latitude, Jobs.longitude, Jobs.area, Jobs.redirect_url,Jobs.created,Jobs.title,Jobs.salary_min,
Jobs.salary_max,Jobs.description,Keyword.keyword,State.state).filter(Keyword.id == Jobs.keyword_id,State.id == Jobs.state_id,State.state == stat).all()
if stat != CONST_ALL and role != CONST_ALL:
results = session.query(Jobs.company, Jobs.contract_time, Jobs.contract_type, Jobs.latitude, Jobs.longitude, Jobs.area, Jobs.redirect_url,Jobs.created,Jobs.title,Jobs.salary_min,
Jobs.salary_max,Jobs.description,Keyword.keyword,State.state).filter(Keyword.id == Jobs.keyword_id,State.id == Jobs.state_id,State.state == stat, Keyword.keyword == role).all()
session.close()
all_jobs = []
for company, contract_time, contract_type, latitude, longitude, area, redirect_url,created,title,salary_min,salary_max,description,keyword,state in results:
job_dict = {}
job_dict["company"] = company
job_dict["contract_time"] = contract_time
job_dict["contract_type"] = contract_type
job_dict["latitude"] = latitude
job_dict["longitude"] = longitude
job_dict["area"] = area
job_dict["redirect_url"] = redirect_url
job_dict["created"] = created
job_dict["title"] = title
job_dict["salary_min"] = salary_min
job_dict["salary_max"] = salary_max
job_dict["description"] = description.replace('"', '\\"')
job_dict["keyword"] = keyword
job_dict["state"] = state
all_jobs.append(job_dict)
data = all_jobs
# print(data)
return jsonify(data)
@app.route("/get_benchmark/<stat>/<role>", methods=['GET'])
def get_benchmark(stat=None, role=None):
results = None
session = Session(engine)
if stat == CONST_ALL and role == CONST_ALL:
results = session.query(BenchmarkSalary.source, BenchmarkSalary.job_role , BenchmarkSalary.contract_type,BenchmarkSalary.min_sal, BenchmarkSalary.max_sal,
BenchmarkSalary.median,BenchmarkSalary.country,Keyword.keyword,State.state).filter(Keyword.id == BenchmarkSalary.keyword_id,State.id == BenchmarkSalary.state_id).all()
if stat == CONST_ALL and role != CONST_ALL:
results = session.query(BenchmarkSalary.source, BenchmarkSalary.job_role , BenchmarkSalary.contract_type,BenchmarkSalary.min_sal, BenchmarkSalary.max_sal,
BenchmarkSalary.median,BenchmarkSalary.country,Keyword.keyword,State.state).filter(Keyword.id == BenchmarkSalary.keyword_id,State.id == BenchmarkSalary.state_id, Keyword.keyword == role).all()
if stat != CONST_ALL and role == CONST_ALL:
results = session.query(BenchmarkSalary.source, BenchmarkSalary.job_role , BenchmarkSalary.contract_type,BenchmarkSalary.min_sal, BenchmarkSalary.max_sal,
BenchmarkSalary.median,BenchmarkSalary.country,Keyword.keyword,State.state).filter(Keyword.id == BenchmarkSalary.keyword_id,State.id == BenchmarkSalary.state_id,State.state == stat).all()
if stat != CONST_ALL and role != CONST_ALL:
results = session.query(BenchmarkSalary.source, BenchmarkSalary.job_role , BenchmarkSalary.contract_type,BenchmarkSalary.min_sal, BenchmarkSalary.max_sal,
BenchmarkSalary.median,BenchmarkSalary.country,Keyword.keyword,State.state).filter(Keyword.id == BenchmarkSalary.keyword_id,State.id == BenchmarkSalary.state_id,State.state == stat, Keyword.keyword == role).all()
session.close()
all_bench = []
for source, job_role, contract_type, min_sal, max_sal, median, country,keyword,state in results:
job_dict = {}
job_dict["source"] = source
job_dict["job_role"] = job_role
job_dict["contract_type"] = contract_type
job_dict["min_sal"] = min_sal
job_dict["max_sal"] = max_sal
job_dict["median"] = median
job_dict["country"] = country
job_dict["keyword"] = keyword
job_dict["state"] = state
all_bench.append(job_dict)
data = all_bench
return jsonify(data)
@app.route("/get_underemployment", methods=['GET'])
def get_underemployment():
results = None
session = Session(engine)
results = session.query(UnderEmploymentRates.Period, UnderEmploymentRates.People).all()
session.close()
all_emp = []
for Period, People in results:
emp = {}
emp["Period"] = Period
emp["People"] = People
all_emp.append(emp)
data = all_emp
return jsonify(data)
@app.route("/get_historical_salary", methods=['GET'])
def get_historical_salary():
results = None
session = Session(engine)
results = session.query(HistoricalSalary.month, HistoricalSalary.salary,State.state).filter(State.id == HistoricalSalary.state_id).all()
session.close()
all_emp = []
for month, salary, state in results:
emp = {}
emp["month"] = month
emp["salary"] = salary
emp["state"] = state
all_emp.append(emp)
data = all_emp
return jsonify(data)
@app.route("/team")
def team():
return render_template("team.html")
@app.route("/about")
def about():
return render_template("about.html")
if __name__ == '__main__':
app.run()