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.py102
-rw-r--r--backend/hist_data/picked/README.md11
2 files changed, 86 insertions, 27 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()
diff --git a/backend/hist_data/picked/README.md b/backend/hist_data/picked/README.md
index 395fd9d..659c175 100644
--- a/backend/hist_data/picked/README.md
+++ b/backend/hist_data/picked/README.md
@@ -1,12 +1,13 @@
-This directory holds data for additional manually-picked events.
+This directory holds data for manually-picked events.
Files
=====
- events.json <br>
- Encodes an array of objects, each describing an event to add.
+ Encodes an array of objects, each describing an event to modify, add, or delete.
For example:
[{
+ "id": 81068910,
"title": "COVID-19 Pandemic",
"start": 2458919,
"start_upper": null,
@@ -25,5 +26,7 @@ Files
"pop": 100
}]
- The `image.file` field should name an image file in this directory.
- Other fields correspond to those in the `events`, `images`, `descs`, and `pop` tables (see `../README.md`).
+ - For event modification, specify `id` and one or more other fields to change.
+ If `image` is present, all its fields should be present.
+ - For event deletion, specify only `id` or `title`.
+ - For event addition, specify all fields except `id`, and possibly `image` and `desc`.