Skip to content

Commit

Permalink
Improve ability to include extra info on showings
Browse files Browse the repository at this point in the history
  • Loading branch information
ggeerraarrdd committed Dec 19, 2023
1 parent 4b7b38d commit a04638f
Show file tree
Hide file tree
Showing 6 changed files with 269 additions and 48 deletions.
44 changes: 43 additions & 1 deletion app.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import sqlite3

import queries
from form import get_dicts, get_query
from form import get_dicts, get_query, get_dicts_updates, get_query_update_series, get_query_update_schedules


# Configure application
Expand Down Expand Up @@ -290,6 +290,48 @@ def cms_view():

if request.method == "POST":

post = request.form.to_dict()

# print(json.dumps(post, indent=4))

dicts = get_dicts_updates(post)
dict_series = dicts[0]
dict_schedule = dicts[1]
# dict_films = dicts[2]
# dict_colors = dicts[3]

# print(json.dumps(dict_series, indent=4))
# print(json.dumps(dict_schedule, indent=4))
# print(json.dumps(dict_films, indent=4))
# print(json.dumps(dict_colors, indent=4))

#
# FILM SERIES
#
# 1. Translate dict into SQL query
query_series = get_query_update_series(dict_series)
# 2. Execute query
if query_series is not None:
print(query_series)
queries.update_records(db, query_series)
else:
print("Series: nothing to update")

#
# SCHEDULE
#
# 0. Update dictionary
for film in dict_schedule:
if "id" in dict_schedule[film]:
dict_schedule[film]["film_id"] = dict_schedule[film].pop("id")
# 1. Translate dict into SQL query
query_schedule = get_query_update_schedules(dict_schedule)
print(query_schedule)
# 2. Execute query
if query_schedule is not None:
for query in query_schedule:
queries.update_records(db, query)

return redirect("/cms")

else:
Expand Down
142 changes: 142 additions & 0 deletions form.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,3 +155,145 @@ def get_query(dict):
query = f"INSERT INTO {table_name} ({columns}) VALUES ({values});"

return query


def get_dicts_updates(post):

keys_series = [
"series_number",
"series_semester",
"series_year",
"series_title",
"series_brief",
"series_poster"
]

keys_schedule = [
"schedule_id",
"series_id",
"imdb",
"schedule",
"notes"
]

keys_films = [
"id",
"imdb",
"film_title",
"film_director",
"film_year",
"film_runtime",
"film_description",
"wiki",
]

keys_colors = [
"color1",
"color2",
"color3"
]

# PART 1
# Create series dict
dict_series = {k.lstrip('new_'): post[k] for k in keys_series if k in post}

# INTERIM
# Process post to create dictionary for schedule and films keys
dict_all = {}

for key, value in post.items():
if key not in keys_series and key not in keys_colors:
num = 'film' + key[-1]
if key[-2].isdigit():
num = 'film' + key[-2:]
key = key.rstrip('0123456789')
if num not in dict_all:
dict_all[num] = {}
key = key.rstrip('0123456789')
dict_all[num][key] = value

# PART 2
# Only schedule keys in dict_all
dict_schedule = {}

for key, value in dict_all.items():
film_values = {}
for k, v in value.items():
if k in keys_schedule:
film_values[k] = v
dict_schedule[key] = film_values

# PART 3
# Only film keys in dict_all
dict_films = {}

for key, value in dict_all.items():
film_values = {}
for k, v in value.items():
if k in keys_films:
film_values[k] = v
dict_films[key] = film_values

# PART 4
# Create films dict
dict_colors = {k: post[k] for k in keys_colors if k in post}

# RETURN
return dict_series, dict_schedule, dict_films, dict_colors


def get_query_update_series(dict):

series_number = dict.get("series_number")

set_values = []

count = 0
for key, value in dict.items():
if key != "series_number":
if value:
set_values.append(f"{key} = '{value}'")
count += 1

set_values = ", ".join(set_values)

if count == 0:
query = None
else:
query = f"UPDATE series SET {set_values} WHERE series_id = {series_number};"

return query


def get_query_update_schedules(dict):

count = 0
query = []

for key, value in dict.items():

set_values = []
set_condition = []

if value["notes"]:
for inner_key, inner_value in value.items():
if inner_key != "schedule_id":
if inner_key == "imdb":
set_values.append(f"film_id = '{inner_value}'")
else:
set_values.append(f"{inner_key} = '{inner_value}'")
elif inner_key == "schedule_id":
set_condition.append(f"{inner_key} = '{inner_value}'")

set_values = ", ".join(set_values)
set_condition = " AND ".join(set_condition)

query.append(f"UPDATE schedules SET {set_values} WHERE {set_condition};")

count += 1

if count == 0:
query = None

return query

Binary file modified lafs.db
Binary file not shown.
20 changes: 19 additions & 1 deletion queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ def get_info_schedules(db, series_id):
query = "SELECT strftime('%d', schedule) AS day, "
query = query + "f.id, "
query = query + "rtrim (substr ('January February March April May June July August SeptemberOctober November December', strftime ('%m', schedule) * 9 - 8, 9)) AS month, "
query = query + "film_title, film_director, film_year, film_runtime, wiki, sc.schedule, sc.notes "
query = query + "film_title, film_director, film_year, film_runtime, wiki, sc.schedule_id, sc.schedule, sc.notes "
query = query + "FROM series AS se "
query = query + "JOIN schedules AS sc ON se.series_id = sc.series_id "
query = query + "JOIN films AS f ON sc.film_id = f.id "
Expand Down Expand Up @@ -213,6 +213,7 @@ def get_info_cms_next_film(db, series_id):
query = query + "film_year, "
query = query + "film_runtime, "
query = query + "wiki, "
query = query + "sc.schedule_id, "
query = query + "sc.schedule, "
query = query + "sc.notes "
query = query + "FROM series AS se "
Expand Down Expand Up @@ -272,6 +273,7 @@ def get_info_cms_schedules(db, series_id):

query = "SELECT "
query = query + "s.series_id "
query = query + ",sc.schedule_id "
query = query + ",sc.schedule "
query = query + ",sc.film_id "
query = query + ",sc.notes"
Expand Down Expand Up @@ -445,4 +447,20 @@ def insert_new_records(db, query):

connection.commit()

return 1


def update_records(db, query):

# Create connection and cursor
connection = sqlite3.connect(db, check_same_thread=False)
connection.row_factory = sqlite3.Row
cursor = connection.cursor()

cursor.execute(query)

connection.commit()

connection.close()

return 1
2 changes: 1 addition & 1 deletion templates/cms_index.html
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
Special Note
</div>
<span style="padding-top: 20px; text-transform: uppercase; font-size: 12px">
{{ next.note }}
{{ next.notes }}
</span>


Expand Down
Loading

0 comments on commit a04638f

Please sign in to comment.