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