|
from peewee import BlobField, CharField, IntegrityError, Model, SqliteDatabase |
|
|
|
import datetime |
|
import os.path |
|
import pickle |
|
import tempfile |
|
|
|
|
|
|
|
|
|
class Gallery(Model): |
|
|
|
id = CharField(primary_key=True) |
|
|
|
path = CharField(unique=True) |
|
|
|
metadata = BlobField() |
|
|
|
class Meta: |
|
|
|
database = SqliteDatabase(f'{tempfile.gettempdir()}/.db') |
|
|
|
|
|
Gallery.create_table() |
|
|
|
|
|
|
|
|
|
def delete(path): |
|
Gallery.delete().where(Gallery.path == path).execute() |
|
|
|
|
|
def delete_by_id(id): |
|
Gallery.delete().where(Gallery.id == id).execute() |
|
|
|
|
|
def exists(path): |
|
return Gallery.select().where(Gallery.path == path).exists() |
|
|
|
|
|
def exists_by_id(id): |
|
return Gallery.select().where(Gallery.id == id).exists() |
|
|
|
|
|
def get(path): |
|
image = Gallery.get(Gallery.path == path) |
|
return image.id, pickle.loads(image.metadata) |
|
|
|
|
|
def get_by_id(id): |
|
image = Gallery.get(Gallery.id == id) |
|
return image.path, pickle.loads(image.metadata) |
|
|
|
|
|
def tuples(): |
|
images = [] |
|
for id, path, metadata in Gallery.select().order_by(Gallery.id).tuples(): |
|
images.append((id, path, pickle.loads(metadata))) |
|
return images |
|
|
|
|
|
def update(path, metadata): |
|
metadata = pickle.dumps(metadata) |
|
|
|
if os.path.basename(path) == 'webcam.png': |
|
timestamp = datetime.datetime.fromtimestamp( |
|
os.path.getctime(path)).strftime('%Y%m%d_%H%M%S') |
|
|
|
id = f'DCIM/Camera/{timestamp}.png' |
|
else: |
|
id = f'DCIM/Upload/{os.path.basename(path)}' |
|
|
|
try: |
|
Gallery.create(id=id, path=path, metadata=metadata) |
|
except IntegrityError: |
|
Gallery.set_by_id(id, dict(path=path, metadata=metadata)) |
|
|
|
return id |
|
|