Source code for sodarcache.models
import uuid
from django.conf import settings
from django.contrib.postgres.fields import JSONField
from django.db import models
# Projectroles dependency
from projectroles.models import Project
# Access Django user model
AUTH_USER_MODEL = getattr(settings, 'AUTH_USER_MODEL', 'auth.User')
[docs]class BaseCacheItem(models.Model):
"""Abstract class representing a cached item"""
class Meta:
abstract = True
unique_together = (('project', 'app_name', 'name'),)
indexes = [models.Index(fields=['project', 'app_name', 'name'])]
#: Project in which the item belongs (optional)
project = models.ForeignKey(
Project,
related_name='cached_items',
help_text='Project in which the item belongs (optional)',
null=True,
blank=True,
)
#: App name
app_name = models.CharField(
max_length=255, null=False, blank=False, help_text='App name'
)
#: Identifier for the item given by the data setting app
name = models.CharField(
max_length=255,
null=False,
blank=False,
help_text='Name or title of the item given by the data setting app',
)
#: DateTime of the update
date_modified = models.DateTimeField(
auto_now_add=True, help_text='DateTime of the update'
)
#: User who updated the item (optional)
user = models.ForeignKey(
AUTH_USER_MODEL,
null=True,
blank=True,
help_text='User who updated the item (optional)',
)
#: UUID for the item
sodar_uuid = models.UUIDField(
default=uuid.uuid4, unique=True, help_text='Item SODAR UUID'
)
[docs]class JSONCacheItem(BaseCacheItem):
"""Class representing a cached item in JSON format"""
#: Cached data as JSON
data = JSONField(default=dict, help_text='Cached data as JSON')
def __str__(self):
return '{}: {}: {}'.format(
self.project.title if self.project else 'N/A',
self.app_name,
self.name,
)
def __repr__(self):
values = (
self.project.title if self.project else 'N/A',
self.app_name,
self.name,
)
return 'JSONCacheItem({})'.format(', '.join(repr(v) for v in values))