115 lines
3.5 KiB
Python
115 lines
3.5 KiB
Python
from __future__ import unicode_literals
|
|
|
|
import uuid
|
|
|
|
from pytz import common_timezones
|
|
|
|
from django.conf import settings
|
|
from django.contrib.contenttypes.fields import GenericForeignKey
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from django.db import models
|
|
from django.utils.encoding import force_text, python_2_unicode_compatible
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from .managers import ErrorLogEntryManager, UserLocaleProfileManager
|
|
from .storages import storage_sharedupload
|
|
|
|
|
|
def upload_to(instance, filename):
|
|
return 'shared-file-{}'.format(uuid.uuid4().hex)
|
|
|
|
|
|
class ErrorLogEntry(models.Model):
|
|
"""
|
|
Class to store an error log for any object. Uses generic foreign keys to
|
|
reference the parent object.
|
|
"""
|
|
namespace = models.CharField(
|
|
max_length=128, verbose_name=_('Namespace')
|
|
)
|
|
content_type = models.ForeignKey(
|
|
blank=True, on_delete=models.CASCADE, null=True,
|
|
related_name='error_log_content_type', to=ContentType,
|
|
)
|
|
object_id = models.PositiveIntegerField(blank=True, null=True)
|
|
content_object = GenericForeignKey(
|
|
ct_field='content_type', fk_field='object_id',
|
|
)
|
|
datetime = models.DateTimeField(
|
|
auto_now_add=True, db_index=True, verbose_name=_('Date time')
|
|
)
|
|
result = models.TextField(blank=True, null=True, verbose_name=_('Result'))
|
|
|
|
objects = ErrorLogEntryManager()
|
|
|
|
class Meta:
|
|
ordering = ('datetime',)
|
|
verbose_name = _('Error log entry')
|
|
verbose_name_plural = _('Error log entries')
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
class SharedUploadedFile(models.Model):
|
|
"""
|
|
Keep a database link to a stored file. Used to share files between code
|
|
that runs out of process.
|
|
"""
|
|
file = models.FileField(
|
|
storage=storage_sharedupload, upload_to=upload_to,
|
|
verbose_name=_('File')
|
|
)
|
|
filename = models.CharField(max_length=255, verbose_name=_('Filename'))
|
|
datetime = models.DateTimeField(
|
|
auto_now_add=True, verbose_name=_('Date time')
|
|
)
|
|
|
|
class Meta:
|
|
verbose_name = _('Shared uploaded file')
|
|
verbose_name_plural = _('Shared uploaded files')
|
|
|
|
def __str__(self):
|
|
return self.filename
|
|
|
|
def save(self, *args, **kwargs):
|
|
self.filename = force_text(self.file)
|
|
super(SharedUploadedFile, self).save(*args, **kwargs)
|
|
|
|
def delete(self, *args, **kwargs):
|
|
self.file.storage.delete(self.file.name)
|
|
return super(SharedUploadedFile, self).delete(*args, **kwargs)
|
|
|
|
def open(self):
|
|
return self.file.storage.open(self.file.name)
|
|
|
|
|
|
@python_2_unicode_compatible
|
|
class UserLocaleProfile(models.Model):
|
|
"""
|
|
Stores the locale preferences of a user. Stores timezone and language
|
|
at the moment.
|
|
"""
|
|
user = models.OneToOneField(
|
|
on_delete=models.CASCADE, related_name='locale_profile',
|
|
to=settings.AUTH_USER_MODEL, verbose_name=_('User')
|
|
)
|
|
timezone = models.CharField(
|
|
choices=zip(common_timezones, common_timezones), max_length=48,
|
|
verbose_name=_('Timezone')
|
|
)
|
|
language = models.CharField(
|
|
choices=settings.LANGUAGES, max_length=8, verbose_name=_('Language')
|
|
)
|
|
|
|
objects = UserLocaleProfileManager()
|
|
|
|
class Meta:
|
|
verbose_name = _('User locale profile')
|
|
verbose_name_plural = _('User locale profiles')
|
|
|
|
def __str__(self):
|
|
return force_text(self.user)
|
|
|
|
def natural_key(self):
|
|
return self.user.natural_key()
|
|
natural_key.dependencies = [settings.AUTH_USER_MODEL]
|