This repository has been archived on 2022-10-08. You can view files and clone it, but cannot push or open issues or pull requests.
memories/memories/core/db.py

82 lines
1.9 KiB
Python

import os
from datetime import datetime
from playhouse.postgres_ext import PostgresqlExtDatabase, HStoreField, Model
from peewee import CharField, DateTimeField
database = PostgresqlExtDatabase(
"memories",
user="memories",
password="memories",
host="127.0.0.1",
port=5432,
register_hstore=True,
)
class Item(Model):
PICTURE = "picture"
VIDEO = "video"
KIND_CHOICES = ((PICTURE, "Picture"), (VIDEO, "Video"))
file_path = CharField()
kind = CharField(choices=KIND_CHOICES, default=PICTURE, index=True)
creation_date = DateTimeField()
checksum = CharField(max_length=63)
metadata = HStoreField()
exif = HStoreField()
stat = HStoreField()
mimetype = CharField()
class Meta:
database = database
@property
def filename(self):
return os.path.basename(self.file_path)
def get_stat(self):
return Stat(self.stat)
class Stat:
stat_result: os.stat_result
def __init__(self, stat_result):
self.stat_result = stat_result
def __dict__(self):
return {
"mode": self.mode,
"access_time": self.access_time,
"modified_time": self.modified_time,
"creation_time": self.creation_time,
"birth_time": self.birth_time,
}
def as_dict(self):
return self.__dict__()
@property
def mode(self):
return self.stat_result["st_mode"]
@property
def access_time(self):
return datetime.fromtimestamp(self.stat_result["st_atime"])
@property
def modified_time(self):
return datetime.fromtimestamp(self.stat_result["st_mtime"])
@property
def creation_time(self):
return datetime.fromtimestamp(self.stat_result["st_ctime"])
@property
def birth_time(self):
if "st_birthtime" in self.stat_result:
return datetime.fromtimestamp(self.stat_result["st_birthtime"])
return None