Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions app1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Let's write your code here!
from flask import Flask, request

app = Flask(__name__)

@app.route("/")
def hello_world():
return "Hello!"

@app.route("/morning")
def good_morning():
return "Good Morning"
@app.route("/evening/<firstname>")
def evening(firstname):
return f"Good evening, {firstname} "

@app.route("/greetings/<period_of_the_day>/<firstname>")
def greetings(period_of_the_day,firstname):
return f"Good {period_of_the_day}, {firstname}"

@app.route("/add/<int:first>/<int:second>")
def add(first,second):
return str( first + second )

@app.route("/afternoon")
def good_afternoon():
firstname = request.args.get("firstname", "who are you")
other_param=int(request.args.get('second','0'))
other_param_2=int(request.args.get('third','0'))
return f"Good afternoon {firstname} - {other_param} - {other_param+other_param_2}!"

@app.route("/substract")
def difference():
first=int(request.args.get('first','0'))
second=int(request.args.get('second','0'))
return str(first-second)

@app.route("/hello")
def hello_api():
return{"message": "Hello!", "hey": "I'm an API!"}
162 changes: 162 additions & 0 deletions app2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
# Let's write your code here!
from flask import Flask
from flask_basicauth import BasicAuth
from flask import abort
from flask import request
from flask_swagger_ui import get_swaggerui_blueprint
import math
import json
import pymysql
import os



app = Flask(__name__)
app.config.from_file("flask_config.json", load=json.load)
auth = BasicAuth(app)

swaggerui_blueprint = get_swaggerui_blueprint(
base_url='/docs',
api_url='/static/openapi.yaml',)
app.register_blueprint(swaggerui_blueprint)

def remove_null_fields(obj):
return {k:v for k, v in obj.items() if v is not None}
@app.route("/movies/<int:movie_id>")
@auth.required
def movie(movie_id):
db_conn = pymysql.connect(host="localhost",
user="root",
password="warp4818",
database="bechdel",
cursorclass=pymysql.cursors.DictCursor)
with db_conn.cursor() as cursor:
cursor.execute("""SELECT
M.movieId,
M.originalTitle,
M.primaryTitle AS englishTitle,
B.rating AS bechdelScore,
M.runtimeMinutes,
M.startYear AS Year,
M.movieType,
M.isAdult
FROM Movies M
JOIN Bechdel B ON B.movieId = M.movieId
WHERE M.movieId=%s"""
, (movie_id, ))
movie = cursor.fetchone()
if not movie:
abort(404)

movie = remove_null_fields(movie)


with db_conn.cursor() as cursor:
cursor.execute(" SELECT * FROM MoviesGenres WHERE movieId=%s", (movie_id, ))
genres=cursor.fetchall()

movie['genres']=[g['genre'] for g in genres]

with db_conn.cursor() as cursor:
cursor.execute("""SELECT
P.personId,
P.primaryName AS name,
P.birthYear,
P.deathYear,
MP.job,
MP.category AS role
FROM MoviesPeople MP
JOIN People P on P.personId = MP.personId
WHERE MP.movieId=%s""", (movie_id, ))
actors=cursor.fetchall()

movie['actors']=[a['name'] for a in actors]
movie['actor'] = [remove_null_fields(p) for p in actors]


db_conn.close()
return movie


MAX_PAGE_SIZE = 100

@app.route("/movies")
def movies():
page = int(request.args.get('page', 0))
page_size = int(request.args.get('page_size', MAX_PAGE_SIZE))
page_size = min(page_size, MAX_PAGE_SIZE)

db_conn = pymysql.connect(host="localhost", user="root",password='warp4818' ,database="bechdel",
cursorclass=pymysql.cursors.DictCursor)
with db_conn.cursor() as cursor:
cursor.execute("""
SELECT * FROM Movies
ORDER BY movieId
LIMIT %s
OFFSET %s
""", (page_size, page * page_size))
movies = cursor.fetchall()

with db_conn.cursor() as cursor:
cursor.execute("SELECT COUNT(*) AS total FROM Movies")
total = cursor.fetchone()
last_page = math.ceil(total['total'] / page_size)

db_conn.close()
return {
'movies': movies,
'next_page': f'/movies?page={page+1}&page_size={page_size}',
'last_page': f'/movies?page={last_page}&page_size={page_size}',
}

@app.route("/people/<int:person_id>")
def people(person_id):
db_conn = pymysql.connect(host="localhost",
user="root",
password="warp4818",
database="bechdel",
cursorclass=pymysql.cursors.DictCursor)
with db_conn.cursor() as cursor:
cursor.execute(""" select * from bechdel.People p where p.personId=%s """,(person_id,))
people=cursor.fetchone()

return people

@app.route("/people")
def peoples():
page = int(request.args.get('page', 0))
page_size = int(request.args.get('page_size', MAX_PAGE_SIZE))
page_size = min(page_size, MAX_PAGE_SIZE)

db_conn = pymysql.connect(host="localhost", user="root",password='warp4818' ,database="bechdel",
cursorclass=pymysql.cursors.DictCursor)
with db_conn.cursor() as cursor:
cursor.execute("""
SELECT * FROM People p
ORDER BY p.personId
LIMIT %s
OFFSET %s
""", (page_size, page * page_size))
movies = cursor.fetchall()

with db_conn.cursor() as cursor:
cursor.execute("SELECT COUNT(*) AS total FROM People")
total = cursor.fetchone()
last_page = math.ceil(total['total'] / page_size)

db_conn.close()
return {
'People': movies,
'next_page': f'/People?page={page+1}&page_size={page_size}',
'last_page': f'/People?page={last_page}&page_size={page_size}',
}





#select *
#from bechdel.MoviesPeople mp
#oin bechdel.people p on mp.personId=p.personId
#join bechdel.movies m on mp.movieId=m.movieId
#where mp.personId=%s
161 changes: 161 additions & 0 deletions app3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
import json
import math
from collections import defaultdict
from flask import Flask, abort, request
from flask_basicauth import BasicAuth
from flask_swagger_ui import get_swaggerui_blueprint
import pymysql

app = Flask(__name__)
app.config.from_file("flask_config.json", load=json.load)
auth = BasicAuth(app)

swaggerui_blueprint = get_swaggerui_blueprint(
base_url='/docs',
api_url='/static/openapi.yaml',
)
app.register_blueprint(swaggerui_blueprint)

MAX_PAGE_SIZE = 100

def remove_null_fields(obj):
return {k:v for k, v in obj.items() if v is not None}

@app.route("/movies/<int:movie_id>")
@auth.required
def movie(movie_id):
db_conn = pymysql.connect(host="localhost", user="root", database="bechdel",
cursorclass=pymysql.cursors.DictCursor)

with db_conn.cursor() as cursor:
cursor.execute("""
SELECT
M.movieId,
M.originalTitle,
M.primaryTitle AS englishTitle,
B.rating AS bechdelScore,
M.runtimeMinutes,
M.startYear AS Year,
M.movieType,
M.isAdult
FROM Movies M
JOIN Bechdel B ON B.movieId = M.movieId
WHERE M.movieId=%s
""", (movie_id, ))
movie = cursor.fetchone()
if not movie:
abort(404)
movie = remove_null_fields(movie)
movie['bechdelTest'] = movie['bechdelScore'] == 3

with db_conn.cursor() as cursor:
cursor.execute("SELECT * FROM MoviesGenres WHERE movieId=%s", (movie_id, ))
genres = cursor.fetchall()
movie['genres'] = [g['genre'] for g in genres]

with db_conn.cursor() as cursor:
cursor.execute("""
SELECT
P.personId,
P.primaryName AS name,
P.birthYear,
P.deathYear,
MP.category AS role
FROM MoviesPeople MP
JOIN People P on P.personId = MP.personId
WHERE MP.movieId=%s
""", (movie_id, ))
people = cursor.fetchall()
movie['people'] = [remove_null_fields(p) for p in people]

db_conn.close()
return movie


@app.route("/movies")
@auth.required
def movies():
# URL parameters
page = int(request.args.get('page', 0))
page_size = int(request.args.get('page_size', MAX_PAGE_SIZE))
page_size = min(page_size, MAX_PAGE_SIZE)
include_details = bool(int(request.args.get('include_details', 0)))

db_conn = pymysql.connect(host="localhost", user="root", database="bechdel",
cursorclass=pymysql.cursors.DictCursor)
# Get the movies
with db_conn.cursor() as cursor:
cursor.execute("""
SELECT
M.movieId,
M.originalTitle,
M.primaryTitle AS englishTitle,
B.rating AS bechdelScore,
M.runtimeMinutes,
M.startYear AS year,
M.movieType,
M.isAdult
FROM Movies M
JOIN Bechdel B ON B.movieId = M.movieId
ORDER BY movieId
LIMIT %s
OFFSET %s
""", (page_size, page * page_size))
movies = cursor.fetchall()
movie_ids = [mov['movieId'] for mov in movies]

if include_details:
# Get genres
with db_conn.cursor() as cursor:
placeholder = ','.join(['%s'] * len(movie_ids))
cursor.execute(f"SELECT * FROM MoviesGenres WHERE movieId IN ({placeholder})",
movie_ids)
genres = cursor.fetchall()
genres_dict = defaultdict(list)
for obj in genres:
genres_dict[obj['movieId']].append(obj['genre'])

# Get people
with db_conn.cursor() as cursor:
placeholder = ','.join(['%s'] * len(movie_ids))
cursor.execute(f"""
SELECT
MP.movieId,
P.personId,
P.primaryName AS name,
P.birthYear,
P.deathYear,
MP.category AS role
FROM MoviesPeople MP
JOIN People P on P.personId = MP.personId
WHERE movieId IN ({placeholder})
""", movie_ids)
people = cursor.fetchall()
people_dict = defaultdict(list)
for obj in people:
movieId = obj['movieId']
del obj['movieId']
people_dict[movieId].append(obj)

# Merge genres and people into movies
for movie in movies:
movieId = movie['movieId']
movie['genres'] = genres_dict[movieId]
movie['people'] = people_dict[movieId]

# Get the total movies count
with db_conn.cursor() as cursor:
cursor.execute("SELECT COUNT(*) AS total FROM Movies")
total = cursor.fetchone()
last_page = math.ceil(total['total'] / page_size)

db_conn.close()
return {
'movies': movies,
'next_page': f'/movies?page={page+1}&page_size={page_size}&include_details={int(include_details)}',
'last_page': f'/movies?page={last_page}&page_size={page_size}&include_details={int(include_details)}',
}




Loading