diff --git a/main.py b/main.py index c102c24..80cccb0 100644 --- a/main.py +++ b/main.py @@ -17,7 +17,7 @@ con = sqlite3.connect(DB_LOCATION) con.row_factory = sqlite3.Row cur = con.cursor() # NB! single is enough for now, we might require multiple later -origins = [ # CORS +origins = [ # CORS "*", ] @@ -144,3 +144,31 @@ async def rate_picture(cookie: str, picture_id: int, mark: int): return JSONResponse(status_code=406) return {"status": "success"} + + +@app.get("/photo_points") +async def photo_points(): + """Get points with the url of a photo and the rate""" + # assume we always have at least some photos + # fetch them all + cur.execute( + """SELECT images.imgid, resizedpath, GPSLatitude, GPSLongitude, + 100*SUM(marks.mark)/COUNT(marks.mark)/MAX(marks.mark) + FROM images + LEFT JOIN marks ON images.imgid = marks.imgid + GROUP BY images.imgid; + """, # 100 * SUM(marks.mark)/COUNT(marks.mark)/MAX(marks.mark) + # is an ad-hoc percentage of likes without know how front end defined like/dislike + # returns None with no marks (sqlite handles division by 0 gracefully) + ) + points = cur.fetchall() + return [ + { + "id": point["imgid"], + "url": point["resizedpath"], + "lon": point["GPSLongitude"], + "lat": point["GPSLatitude"], + "rate": point["100*SUM(marks.mark)/COUNT(marks.mark)/MAX(marks.mark)"], + } + for point in points + ] diff --git a/util/import_photos.py b/util/import_photos.py index 51ac9b7..906430d 100644 --- a/util/import_photos.py +++ b/util/import_photos.py @@ -9,9 +9,11 @@ from shutil import move import sqlite3 # update database residing here -DB_LOCATION = "db/photovoter.dblite" # Q: any allowances for this being not OUR database? +DB_LOCATION = ( + "db/photovoter.dblite" # Q: any allowances for this being not OUR database? +) # place compressed images here (needs to exist) -DEST_STRUNK = "db/image/" +DEST_SHRUNK = "db/image/" # move originals here (needs to exist) DEST_ORIGINAL = "db/original/" @@ -23,10 +25,10 @@ def usage(): def process_pictures(): """Process images from the base directory in the first command line argument. - Place the resized copies to DEST_STRUNK and + Place the resized copies to DEST_SHRUNK and move the originals to DEST_ORIGINAL. Return a dict for each image processed for database collection. - Uses: DEST_STRUNK, DEST_ORIGINAL + Uses: DEST_SHRUNK, DEST_ORIGINAL """ # walk every pic # We only care about files in the root of the path @@ -48,7 +50,7 @@ def process_pictures(): cloned.strip() # Q: may damage icc, do we allow that or use smh else? cloned.transform(resize="50%") # Q: what do we want here? # move them to the processed folder - cloned.save(filename=path.join(DEST_STRUNK, filename)) + cloned.save(filename=path.join(DEST_SHRUNK, filename)) # move the originals out of the working directory # Q: do we strip exif from originals? @@ -56,7 +58,7 @@ def process_pictures(): # return the freshly processed picture info yield { - "ResizedImage": path.join(DEST_STRUNK, filename), + "ResizedImage": path.join(DEST_SHRUNK, filename), "OriginalImage": path.join(DEST_ORIGINAL, filename), "DateTimeOriginal": exif["DateTimeOriginal"], # Q: normalize it? "GPSLatitude": exif["GPSLatitude"],