aboutsummaryrefslogtreecommitdiff
path: root/backend/hist_data
diff options
context:
space:
mode:
Diffstat (limited to 'backend/hist_data')
-rwxr-xr-xbackend/hist_data/gen_picked_data.py77
1 files changed, 59 insertions, 18 deletions
diff --git a/backend/hist_data/gen_picked_data.py b/backend/hist_data/gen_picked_data.py
index cd554d5..c5f4577 100755
--- a/backend/hist_data/gen_picked_data.py
+++ b/backend/hist_data/gen_picked_data.py
@@ -13,13 +13,14 @@ import argparse
import json, sqlite3
# Local imports
from gen_imgs import convertImage
+from cal import SCALES, dbDateToHistDate, dateToUnit
PICKED_DIR = 'picked'
PICKED_EVT_FILE = 'events.json'
DB_FILE = 'data.db'
IMG_OUT_DIR = 'img'
-def genData(pickedDir: str, pickedEvtFile: str, dbFile: str, imgOutDir: str) -> None:
+def genData(pickedDir: str, pickedEvtFile: str, dbFile: str, imgOutDir: str, scales: list[int]) -> None:
dbCon = sqlite3.connect(dbFile)
dbCur = dbCon.cursor()
#
@@ -41,6 +42,7 @@ def genData(pickedDir: str, pickedEvtFile: str, dbFile: str, imgOutDir: str) ->
dbCur.execute('INSERT INTO events VALUES (?, ?, ?, ?, ?, ?, ?, ?)',
(nextId, event['title'], event['start'], event['start_upper'], event['end'], event['end_upper'],
event['fmt'], event['ctg']))
+ # Update image, description, and popularity tables
if 'image' in event:
print('> Adding image')
image = event['image']
@@ -55,27 +57,48 @@ def genData(pickedDir: str, pickedEvtFile: str, dbFile: str, imgOutDir: str) ->
if 'desc' in event:
dbCur.execute('INSERT INTO descs VALUES (?, ?, ?)', (nextId, nextId, event['desc']))
dbCur.execute('INSERT INTO pop VALUES (?, ?)', (nextId, event['pop']))
+ # Update event distribution tables
+ for scale in scales:
+ unit = dateToUnit(dbDateToHistDate(event['start'], event['fmt']), scale)
+ if dbCur.execute('SELECT count FROM dist WHERE scale = ? AND unit = ?', (scale, unit)).fetchone():
+ dbCur.execute('UPDATE dist SET count = count + 1 WHERE scale = ? AND unit = ?', (scale, unit))
+ else:
+ dbCur.execute('INSERT INTO dist VALUES (?, ?, ?)', (scale, unit, 1))
+ dbCur.execute('INSERT INTO event_disp VALUES (?, ?, ?)', (nextId, scale, unit))
+ #
nextId -= 1
elif doDelete:
if eventId:
print(f'Deleting event with ID {eventId}')
+ row = dbCur.execute('SELECT id, start, fmt FROM events WHERE id = ?', (eventId,)).fetchone()
else:
print(f'Deleting event with title "{title}"')
- row = dbCur.execute('SELECT id FROM events WHERE title = ?', (title,)).fetchone()
+ row = dbCur.execute('SELECT id, start, fmt FROM events WHERE title = ?', (title,)).fetchone()
if row is None:
print(f'ERROR: Could not find event with title {title}')
break
- eventId = row[0]
+ eventId, eventStart, eventFmt = row
+ # Note: Intentionally not deleting entries or files for images that become unused.
dbCur.execute('DELETE FROM events WHERE id = ?', (eventId,))
dbCur.execute('DELETE FROM pop WHERE id = ?', (eventId,))
dbCur.execute('DELETE FROM descs WHERE id = ?', (eventId,))
dbCur.execute('DELETE FROM event_imgs WHERE id = ?', (eventId,))
- # Note: Intentionally not deleting entries or files for images that become unused.
+ for scale in scales:
+ unit = dateToUnit(dbDateToHistDate(eventStart, eventFmt), scale)
+ (oldCount,) = dbCur.execute(
+ 'SELECT count FROM dist WHERE scale = ? AND unit = ?', (scale, unit)).fetchone()
+ if oldCount == 1:
+ dbCur.execute('DELETE FROM dist WHERE scale = ? AND unit = ?', (scale, unit))
+ else:
+ dbCur.execute('UPDATE dist SET count = count - 1 WHERE scale = ? AND unit = ?', (scale, unit))
+ dbCur.execute('DELETE FROM event_disp WHERE id = ?', (eventId,))
else: # doModify
print(f'Modifying event with ID {eventId}')
- if dbCur.execute('SELECT id FROM events WHERE id = ?', (eventId,)).fetchone() is None:
+ row = dbCur.execute('SELECT start, fmt FROM events WHERE id = ?', (eventId,)).fetchone()
+ if row is None:
print(f'ERROR: Could not find event with ID {eventId}')
break
+ oldStart, oldFmt = row
for field in ['title', 'start', 'start_upper', 'end', 'end_upper', 'fmt', 'ctg']:
if field in event:
dbCur.execute(f'UPDATE events SET {field} = ? WHERE id = ?', (event[field], eventId,))
@@ -89,24 +112,42 @@ def genData(pickedDir: str, pickedEvtFile: str, dbFile: str, imgOutDir: str) ->
break
dbCur.execute('INSERT INTO images VALUES (?, ?, ?, ?, ?)',
(nextId, image['url'], image['license'], image['artist'], image['credit']))
- row = dbCur.execute('SELECT img_id FROM event_imgs WHERE id = ?', (eventId,)).fetchone()
- if row is None:
- dbCur.execute('INSERT INTO event_imgs VALUES (?, ?)', (eventId, nextId))
- else:
+ if dbCur.execute('SELECT img_id FROM event_imgs WHERE id = ?', (eventId,)).fetchone():
dbCur.execute('UPDATE event_imgs SET img_id = ? WHERE id = ?', (nextId, eventId))
# Note: Intentionally not deleting entries or files for images that become unused.
- if 'desc' in event:
- row = dbCur.execute('SELECT desc FROM descs WHERE id = ?', (eventId,)).fetchone()
- if row is None:
- dbCur.execute('INSERT INTO descs VALUES (?, ?)', (eventId, event['desc']))
else:
+ dbCur.execute('INSERT INTO event_imgs VALUES (?, ?)', (eventId, nextId))
+ if 'desc' in event:
+ if dbCur.execute('SELECT desc FROM descs WHERE id = ?', (eventId,)).fetchone():
dbCur.execute('UPDATE event_imgs SET desc = ? WHERE id = ?', (event['desc'], eventId))
- if 'pop' in event:
- row = dbCur.execute('SELECT pop FROM pop WHERE id = ?', (eventId,)).fetchone()
- if row is None:
- dbCur.execute('INSERT INTO pop VALUES (?, ?)', (eventId, event['pop']))
else:
+ dbCur.execute('INSERT INTO descs VALUES (?, ?)', (eventId, event['desc']))
+ if 'pop' in event:
+ if dbCur.execute('SELECT pop FROM pop WHERE id = ?', (eventId,)).fetchone():
dbCur.execute('UPDATE pop SET pop = ? WHERE id = ?', (event['pop'], eventId))
+ else:
+ dbCur.execute('INSERT INTO pop VALUES (?, ?)', (eventId, event['pop']))
+ if 'start' in event:
+ # Remove old distribution data
+ for scale in scales:
+ unit = dateToUnit(dbDateToHistDate(oldStart, oldFmt), scale)
+ (oldCount,) = dbCur.execute(
+ 'SELECT count FROM dist WHERE scale = ? AND unit = ?', (scale, unit)).fetchone()
+ if oldCount == 1:
+ dbCur.execute('DELETE FROM dist WHERE scale = ? AND unit = ?', (scale, unit))
+ else:
+ dbCur.execute('UPDATE dist SET count = count - 1 WHERE scale = ? AND unit = ?', (scale, unit))
+ dbCur.execute('DELETE FROM event_disp WHERE id = ?', (eventId,))
+ # Add new distribution data
+ newFmt = event['fmt'] if 'fmt' in event else oldFmt
+ for scale in scales:
+ unit = dateToUnit(dbDateToHistDate(event['start'], newFmt), scale)
+ if dbCur.execute('SELECT count FROM dist WHERE scale = ? AND unit = ?', (scale, unit)).fetchone():
+ dbCur.execute('UPDATE dist SET count = count + 1 WHERE scale = ? AND unit = ?', (scale, unit))
+ else:
+ dbCur.execute('INSERT INTO dist VALUES (?, ?, ?)', (scale, unit, 1))
+ dbCur.execute('INSERT INTO event_disp VALUES (?, ?, ?)', (eventId, scale, unit))
+ # Note: Intentionally not updating 'event_disp' table to account for 'indirect event displayability'
nextId -= 1
#
dbCon.commit()
@@ -116,4 +157,4 @@ if __name__ == '__main__':
parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
args = parser.parse_args()
#
- genData(PICKED_DIR, PICKED_EVT_FILE, DB_FILE, IMG_OUT_DIR)
+ genData(PICKED_DIR, PICKED_EVT_FILE, DB_FILE, IMG_OUT_DIR, SCALES)