import os import os.path import stat import json from datetime import datetime from django.db import models 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 class Picture(models.Model): PICTURE = "picture" # PICTURE_360 = 'picture-360' # PANORAMA = 'picture-panorama' VIDEO = "video" # VIDEO_360 = 'video-360' KIND_CHOICES = ( (PICTURE, PICTURE.capitalize()), # (PICTURE_360, "Picture 360"), # (PANORAMA, PANORAMA.capitalize()), (VIDEO, VIDEO.capitalize()), # (VIDEO_360, "Video 360"), ) file_path = models.FilePathField(max_length=255) creation_date = models.DateTimeField(db_index=True) checksum = models.CharField(max_length=64) metadata = models.TextField(blank=True, null=True) exif = models.TextField(blank=True, null=True) stat = models.TextField(blank=True, null=True) mimetype = models.CharField(max_length=64) raw = models.BooleanField(default=False) kind = models.CharField(choices=KIND_CHOICES, default=PICTURE, max_length=24) @property def filename(self): return os.path.basename(self.file_path) def get_stat(self): return Stat(json.loads(self.stat)) # class Meta: # ordering = ("creation_date", )