import datetime import mimetypes import uuid from django.db import models def get_current_datetime() -> datetime.datetime: return datetime.datetime.now(tz=datetime.timezone.utc) def get_instagram_image_path(instance, filename) -> str: mimetypes_instance = mimetypes.MimeTypes() guessed_type = mimetypes_instance.guess_type(filename, strict=False)[0] extension = "" if guessed_type is not None: for mapper in mimetypes_instance.types_map_inv: if guessed_type not in mapper: continue extension = mapper[guessed_type] if isinstance(extension, list): extension = extension[0] break return f"instagram/{uuid.uuid4()}{extension}" class InstagramPost(models.Model): """ Model representing an Instgram post obtained from its API through the update_instagram management command. """ remote_id = models.CharField( verbose_name="ID Postu", max_length=64, unique=True, ) timestamp = models.DateTimeField( verbose_name="Datum a čas vytvoření", default=get_current_datetime ) author_name = models.CharField( verbose_name="Jméno autora", max_length=64, ) author_username = models.CharField( verbose_name="Username autora", max_length=64, ) caption = models.TextField( verbose_name="Popis", blank=True, null=True, ) image = models.ImageField( verbose_name="Obrázek", upload_to=get_instagram_image_path, ) url = models.URLField( verbose_name="Odkaz", blank=True, null=True, ) def __str__(self) -> str: return f"@{self.author_username} - {self.caption}" class Meta: ordering = ("timestamp",)