diff --git a/app.py b/app.py index 1f97668..ac03869 100644 --- a/app.py +++ b/app.py @@ -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 @@ -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: diff --git a/form.py b/form.py index 206dd43..30eae56 100644 --- a/form.py +++ b/form.py @@ -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 + diff --git a/lafs.db b/lafs.db index 9b46a1e..1d410f1 100644 Binary files a/lafs.db and b/lafs.db differ diff --git a/queries.py b/queries.py index 5b054a7..e03ffb3 100644 --- a/queries.py +++ b/queries.py @@ -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 " @@ -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 " @@ -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" @@ -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 \ No newline at end of file diff --git a/templates/cms_index.html b/templates/cms_index.html index 63cd3aa..f755c82 100644 --- a/templates/cms_index.html +++ b/templates/cms_index.html @@ -38,7 +38,7 @@ Special Note - {{ next.note }} + {{ next.notes }} diff --git a/templates/cms_view.html b/templates/cms_view.html index a43a07b..e07c98a 100644 --- a/templates/cms_view.html +++ b/templates/cms_view.html @@ -22,7 +22,7 @@ -
+
@@ -30,9 +30,13 @@
- Film Series + + Film Series #{{ cms_series.series_id }} +
+
Status: {% if cms_status.status == 1 -%} @@ -53,15 +57,15 @@

-
- Semester
+


-
- Year
+

@@ -69,15 +73,13 @@

-

-
- -
+
+


@@ -104,22 +106,28 @@
-
+
{{- loop.index -}}

-
-
+ + + +
+

+
-
-
+
+
+
+

+ +
-
- Director
+

+
-
-
+
+

+
-
- Runtime
+

-
- -
+ +
+

+
-

-
- -

@@ -311,21 +326,25 @@


- +


- +


- +
@@ -394,7 +413,7 @@
-