diff options
Diffstat (limited to 'backend/hist_data/gen_picked_data.py')
| -rwxr-xr-x | backend/hist_data/gen_picked_data.py | 102 |
1 files changed, 79 insertions, 23 deletions
diff --git a/backend/hist_data/gen_picked_data.py b/backend/hist_data/gen_picked_data.py index 933af24..cd554d5 100755 --- a/backend/hist_data/gen_picked_data.py +++ b/backend/hist_data/gen_picked_data.py @@ -27,31 +27,87 @@ def genData(pickedDir: str, pickedEvtFile: str, dbFile: str, imgOutDir: str) -> eventsToAdd = json.load(f) nextId = -1 for event in eventsToAdd: - row = dbCur.execute('SELECT id from events where title = ?', (event['title'],)).fetchone() - if row is not None: - print(f'WARNING: Event "{event["title"]}" already exists, and will be skipped') - continue - print(f'Adding event {event["title"]}') - print("- Updating 'events'") - dbCur.execute('INSERT INTO events VALUES (?, ?, ?, ?, ?, ?, ?, ?)', - (nextId, event['title'], event['start'], event['start_upper'], event['end'], event['end_upper'], - event['fmt'], event['ctg'])) - print('- Converting image file') - image = event['image'] - success = convertImage(os.path.join(pickedDir, image['file']), os.path.join(imgOutDir, str(nextId) + '.jpg')) - if not success: + eventId = event['id'] if 'id' in event else None + title = event['title'] if 'title' in event else None + if eventId is None and title is None: + print(f'ERROR: Entry with no ID or title: {event}') break - print("- Updating 'images'") - dbCur.execute('INSERT INTO images VALUES (?, ?, ?, ?, ?)', - (nextId, image['url'], image['license'], image['artist'], image['credit'])) - print("- Updating 'event_imgs'") - dbCur.execute('INSERT INTO event_imgs VALUES (?, ?)', (nextId, nextId)) - print("- Updating 'descs'") - dbCur.execute('INSERT INTO descs VALUES (?, ?, ?)', (nextId, nextId, event['desc'])) - print("- Updating 'pop'") - dbCur.execute('INSERT INTO pop VALUES (?, ?)', (nextId, event['pop'])) # - nextId -= 1 + doAdd = eventId is None and len(event) > 1 + doModify = eventId is not None and len(event) > 1 + doDelete = not doModify and not doAdd + if doAdd: + print(f'Adding event with title "{title}"') + dbCur.execute('INSERT INTO events VALUES (?, ?, ?, ?, ?, ?, ?, ?)', + (nextId, event['title'], event['start'], event['start_upper'], event['end'], event['end_upper'], + event['fmt'], event['ctg'])) + if 'image' in event: + print('> Adding image') + image = event['image'] + outFile = os.path.join(imgOutDir, str(nextId) + '.jpg') + success = convertImage(os.path.join(pickedDir, image['file']), outFile) + if not success: + print('ERROR: Conversion failed') + break + dbCur.execute('INSERT INTO images VALUES (?, ?, ?, ?, ?)', + (nextId, image['url'], image['license'], image['artist'], image['credit'])) + dbCur.execute('INSERT INTO event_imgs VALUES (?, ?)', (nextId, nextId)) + if 'desc' in event: + dbCur.execute('INSERT INTO descs VALUES (?, ?, ?)', (nextId, nextId, event['desc'])) + dbCur.execute('INSERT INTO pop VALUES (?, ?)', (nextId, event['pop'])) + nextId -= 1 + elif doDelete: + if eventId: + print(f'Deleting event with ID {eventId}') + else: + print(f'Deleting event with title "{title}"') + row = dbCur.execute('SELECT id FROM events WHERE title = ?', (title,)).fetchone() + if row is None: + print(f'ERROR: Could not find event with title {title}') + break + eventId = row[0] + 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. + else: # doModify + print(f'Modifying event with ID {eventId}') + if dbCur.execute('SELECT id FROM events WHERE id = ?', (eventId,)).fetchone() is None: + print(f'ERROR: Could not find event with ID {eventId}') + break + 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,)) + if 'image' in event: + print('> Adding image') + image = event['image'] + outFile = os.path.join(imgOutDir, str(nextId) + '.jpg') + success = convertImage(os.path.join(pickedDir, image['file']), outFile) + if not success: + print('ERROR: Conversion failed') + 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: + 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('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('UPDATE pop SET pop = ? WHERE id = ?', (event['pop'], eventId)) + nextId -= 1 # dbCon.commit() dbCon.close() |
