82 lines
1.9 KiB
Python
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
|