| 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 |
|
|