22import sqlite3
33from typing import Dict , Any , List
44
5+ # Local
6+ from helpers import DatabaseConnection
7+
58
69
710
@@ -21,19 +24,11 @@ def get_id_current_series(db: str) -> int:
2124 Returns:
2225 int: ID of the current film series.
2326 """
24- # Create connection and cursor
25- connection = sqlite3 .connect (db , check_same_thread = False )
26- connection .row_factory = sqlite3 .Row
27- cursor = connection .cursor ()
28-
29- # Query db
30- query = "SELECT series_id FROM series ORDER BY series_id DESC LIMIT 1;"
31- cursor .execute (query )
32- current_series_id = cursor .fetchone ()
33-
34- # Close cursor and connection
35- cursor .close ()
36- connection .close ()
27+ with DatabaseConnection (db ) as cursor :
28+ query = "SELECT series_id FROM series ORDER BY series_id DESC LIMIT 1;"
29+ cursor .execute (query )
30+
31+ current_series_id = cursor .fetchone ()
3732
3833 return current_series_id
3934
@@ -49,39 +44,31 @@ def get_info_series(db: str, series_id: int) -> Dict[str, Any]:
4944 Returns:
5045 Dict[str, Any]: Information about the series.
5146 """
52- # Create connection and cursor
53- connection = sqlite3 .connect (db , check_same_thread = False )
54- connection .row_factory = sqlite3 .Row
55- cursor = connection .cursor ()
56-
57- # Query db
58- query = "SELECT s.series_id, "
59- query = query + "series_semester || series_year AS semester, "
60- query = query + "series_semester, "
61- query = query + "series_year, "
62- query = query + "series_title, "
63- query = query + "series_brief, "
64- query = query + "series_poster, "
65- query = query + "series_poster_url, "
66- query = query + "series_display, "
67- query = query + "color1, "
68- query = query + "color2, "
69- query = query + "color3 "
70- query = query + "FROM series s "
71- query = query + "JOIN colors AS c ON s.series_id = c.series_id "
72- query = query + "WHERE s.series_id = ?; "
73- cursor .execute (query , (series_id ,))
74- results = cursor .fetchone ()
47+ with DatabaseConnection (db ) as cursor :
48+ query = "SELECT s.series_id, "
49+ query = query + "series_semester || series_year AS semester, "
50+ query = query + "series_semester, "
51+ query = query + "series_year, "
52+ query = query + "series_title, "
53+ query = query + "series_brief, "
54+ query = query + "series_poster, "
55+ query = query + "series_poster_url, "
56+ query = query + "series_display, "
57+ query = query + "color1, "
58+ query = query + "color2, "
59+ query = query + "color3 "
60+ query = query + "FROM series s "
61+ query = query + "JOIN colors AS c ON s.series_id = c.series_id "
62+ query = query + "WHERE s.series_id = ?; "
63+ cursor .execute (query , (series_id ,))
64+
65+ results = cursor .fetchone ()
7566
7667 # Construct the full URL for the series poster
7768 results = dict (results )
7869 if results ['series_poster_url' ]:
7970 results ['series_poster_url' ] = f"{{ url_for('main_bp.static', filename=f'images/{ results ['series_poster_url' ]} ') }}"
8071
81- # Close cursor and connection
82- cursor .close ()
83- connection .close ()
84-
8572 return results
8673
8774
@@ -96,35 +83,26 @@ def get_info_schedules(db: str, series_id: int) -> List[Dict[str, Any]]:
9683 Returns:
9784 List[Dict[str, Any]]: A list of dictionaries containing schedule information.
9885 """
99- # Create connection and cursor
100- connection = sqlite3 .connect (db , check_same_thread = False )
101- connection .row_factory = sqlite3 .Row
102- cursor = connection .cursor ()
103-
104- # Query db
105- query = "SELECT strftime('%d', schedule) AS day, "
106- query = query + "f.id, "
107- query = query + "rtrim (substr ('January February March April May June July August SeptemberOctober November December', strftime ('%m', schedule) * 9 - 8, 9)) AS month, "
108- query = query + "film_title, film_director, film_year, film_runtime, wiki, sc.schedule, sc.notes "
109- query = query + "FROM series AS se "
110- query = query + "JOIN schedules AS sc ON se.series_id = sc.series_id "
111- query = query + "JOIN films AS f ON sc.film_id = f.id "
112- query = query + "WHERE se.series_id = ?; "
113- cursor .execute (query , (series_id ,))
114-
115- # Get rows
116- rows = cursor .fetchall ()
117-
118- # Get the column names from cursor.description
119- columns = [column [0 ] for column in cursor .description ]
86+ with DatabaseConnection (db ) as cursor :
87+ query = "SELECT strftime('%d', schedule) AS day, "
88+ query = query + "f.id, "
89+ query = query + "rtrim (substr ('January February March April May June July August SeptemberOctober November December', strftime ('%m', schedule) * 9 - 8, 9)) AS month, "
90+ query = query + "film_title, film_director, film_year, film_runtime, wiki, sc.schedule, sc.notes "
91+ query = query + "FROM series AS se "
92+ query = query + "JOIN schedules AS sc ON se.series_id = sc.series_id "
93+ query = query + "JOIN films AS f ON sc.film_id = f.id "
94+ query = query + "WHERE se.series_id = ?; "
95+ cursor .execute (query , (series_id ,))
96+
97+ # Get rows
98+ rows = cursor .fetchall ()
99+
100+ # Get the column names from cursor.description
101+ columns = [column [0 ] for column in cursor .description ]
120102
121103 # Convert each row into a dictionary using zip
122104 result = [dict (zip (columns , row )) for row in rows ]
123105
124- # Close cursor and connection
125- cursor .close ()
126- connection .close ()
127-
128106 return result
129107
130108
@@ -138,20 +116,15 @@ def get_info_series_ids(db: str) -> List[Dict[str, Any]]:
138116 Returns:
139117 List[Dict[str, Any]]: A list of dictionaries containing series ID information.
140118 """
141- # Create connection and cursor
142- connection = sqlite3 .connect (db , check_same_thread = False )
143- connection .row_factory = sqlite3 .Row
144- cursor = connection .cursor ()
145-
146- # Query db
147- query = "SELECT DISTINCT(series_id), series_semester, series_year, series_display FROM series; "
148- cursor .execute (query )
119+ with DatabaseConnection (db ) as cursor :
120+ query = "SELECT DISTINCT(series_id), series_semester, series_year, series_display FROM series; "
121+ cursor .execute (query )
149122
150- # Get rows
151- rows = cursor .fetchall ()
123+ # Get rows
124+ rows = cursor .fetchall ()
152125
153- # Get the column names from cursor.description
154- columns = [column [0 ] for column in cursor .description ]
126+ # Get the column names from cursor.description
127+ columns = [column [0 ] for column in cursor .description ]
155128
156129 # Convert each row into a dictionary using zip
157130 result = [dict (zip (columns , row )) for row in rows ]
@@ -169,24 +142,19 @@ def get_info_serieses(db: str) -> List[Dict[str, Any]]:
169142 Returns:
170143 List[Dict[str, Any]]: A list of dictionaries containing series ID information.
171144 """
172- # Create connection and cursor
173- connection = sqlite3 .connect (db , check_same_thread = False )
174- connection .row_factory = sqlite3 .Row
175- cursor = connection .cursor ()
145+ with DatabaseConnection (db ) as cursor :
146+ query = "SELECT DISTINCT(series_id), "
147+ query = query + "series_semester, "
148+ query = query + "series_year, "
149+ query = query + "series_display "
150+ query = query + "FROM series; "
151+ cursor .execute (query )
176152
177- # Query db
178- query = "SELECT DISTINCT(series_id), "
179- query = query + "series_semester, "
180- query = query + "series_year, "
181- query = query + "series_display "
182- query = query + "FROM series; "
183- cursor .execute (query )
153+ # Get rows
154+ rows = cursor .fetchall ()
184155
185- # Get rows
186- rows = cursor .fetchall ()
187-
188- # Get the column names from cursor.description
189- columns = [column [0 ] for column in cursor .description ]
156+ # Get the column names from cursor.description
157+ columns = [column [0 ] for column in cursor .description ]
190158
191159 # Convert each row into a dictionary using zip
192160 result = [dict (zip (columns , row )) for row in rows ]
@@ -205,19 +173,14 @@ def get_info_film(db: str, film_id: int) -> Dict[str, Any]:
205173 Returns:
206174 Dict[str, Any]: Information about the film.
207175 """
208- # Create connection and cursor
209- connection = sqlite3 .connect (db , check_same_thread = False )
210- connection .row_factory = sqlite3 .Row
211- cursor = connection .cursor ()
212-
213- # Query db
214- query = "SELECT * "
215- query = query + "FROM films "
216- query = query + "WHERE id = ?; "
217- cursor .execute (query , (film_id ,))
176+ with DatabaseConnection (db ) as cursor :
177+ query = "SELECT * "
178+ query = query + "FROM films "
179+ query = query + "WHERE id = ?; "
180+ cursor .execute (query , (film_id ,))
218181
219- # Get row
220- row = cursor .fetchone ()
182+ # Get row
183+ row = cursor .fetchone ()
221184
222185 # Convert row into a dictionary
223186 result = dict (row )
@@ -227,18 +190,13 @@ def get_info_film(db: str, film_id: int) -> Dict[str, Any]:
227190
228191def get_info_series_status (db , series_id ):
229192
230- # Create connection and cursor
231- connection = sqlite3 .connect (db , check_same_thread = False )
232- connection .row_factory = sqlite3 .Row
233- cursor = connection .cursor ()
234-
235- query = "SELECT "
236- query = query + "max(date(substr(schedule, 1, 4) || '-' || substr(schedule, 6, 2) || '-' || substr(schedule, 9, 2))) < current_timestamp AS status "
237- query = query + "FROM schedules WHERE series_id = ?; "
238- cursor .execute (query , series_id )
193+ with DatabaseConnection (db ) as cursor :
239194
240- series_status = cursor .fetchone ()
195+ query = "SELECT "
196+ query = query + "max(date(substr(schedule, 1, 4) || '-' || substr(schedule, 6, 2) || '-' || substr(schedule, 9, 2))) < current_timestamp AS status "
197+ query = query + "FROM schedules WHERE series_id = ?; "
198+ cursor .execute (query , series_id )
241199
242- connection . close ()
200+ series_status = cursor . fetchone ()
243201
244- return ( series_status )
202+ return series_status
0 commit comments