"""Utils app models.""" import random from datetime import datetime from django.conf import settings from django.contrib.gis.db import models from django.utils import timezone from django.utils.html import mark_safe from django.utils.translation import ugettext_lazy as _ from easy_thumbnails.fields import ThumbnailerImageField class ProjectBaseMixin(models.Model): """Base mixin model.""" created = models.DateTimeField(default=timezone.now, editable=False, verbose_name=_('Date created')) modified = models.DateTimeField(auto_now=True, verbose_name=_('Date updated')) class Meta: """Meta class.""" abstract = True class OAuthProjectMixin: """OAuth2 mixin for project GM""" def get_source(self): """Method to get of platform""" return NotImplemented basemixin_fields = ['created', 'modified'] class BaseAttributes(ProjectBaseMixin): created_by = models.ForeignKey( 'account.User', on_delete=models.SET_NULL, verbose_name=_('created by'), null=True, related_name='%(class)s_records_created' ) modified_by = models.ForeignKey( 'account.User', on_delete=models.SET_NULL, verbose_name=_('modified by'), null=True, related_name='%(class)s_records_modified' ) class Meta: """Meta class.""" abstract = True def generate_code(): """Generate code method.""" return '%06d' % random.randint(0, 999999) def image_path(instance, filename): """Determine avatar path method.""" filename = '%s.jpeg' % generate_code() return 'image/%s/%s/%s' % ( instance._meta.model_name, datetime.now().strftime(settings.REST_DATE_FORMAT), filename) class ImageMixin(models.Model): """Avatar model.""" THUMBNAIL_KEY = 'default' image = ThumbnailerImageField(upload_to=image_path, blank=True, null=True, default=None, verbose_name=_('Image')) class Meta: """Meta class.""" abstract = True def get_image(self, key=None): """Get thumbnailed image file.""" return self.image[key or self.THUMBNAIL_KEY] if self.image else None def get_image_url(self, key=None): """Get image thumbnail url.""" return self.get_image(key).url if self.image else None def image_tag(self): """Admin preview tag.""" if self.image: return mark_safe('' % self.get_image_url()) else: return None image_tag.short_description = _('Image') image_tag.allow_tags = True class PlatformMixin(models.Model): """Platforms""" MOBILE = 0 WEB = 1 SOURCES = ( (MOBILE, _('Mobile')), (WEB, _('Web')), ) source = models.PositiveSmallIntegerField(choices=SOURCES, default=MOBILE, verbose_name=_('Source')) class Meta: """Meta class""" abstract = True