49 lines
1.9 KiB
Python
49 lines
1.9 KiB
Python
from __future__ import absolute_import
|
|
|
|
from ast import literal_eval
|
|
|
|
from django.db import models
|
|
from django.contrib.contenttypes.models import ContentType
|
|
|
|
from .conf.settings import LOG_SIZE
|
|
|
|
|
|
class SourceTransformationManager(models.Manager):
|
|
def get_for_object(self, obj):
|
|
ct = ContentType.objects.get_for_model(obj)
|
|
return self.model.objects.filter(content_type=ct).filter(object_id=obj.pk)
|
|
|
|
def get_for_object_as_list(self, obj):
|
|
warnings = []
|
|
transformations = []
|
|
for transformation in self.get_for_object(obj).values('transformation', 'arguments'):
|
|
try:
|
|
transformations.append(
|
|
{
|
|
'transformation': transformation['transformation'],
|
|
'arguments': literal_eval(transformation['arguments'].strip())
|
|
}
|
|
)
|
|
except (ValueError, SyntaxError), e:
|
|
warnings.append(e)
|
|
|
|
return transformations, warnings
|
|
|
|
|
|
class SourceLogManager(models.Manager):
|
|
def save_status(self, source, status):
|
|
new_recent = self.model(source=source, status=status)
|
|
new_recent.save()
|
|
content_type = ContentType.objects.get_for_model(source)
|
|
to_delete = self.model.objects.filter(content_type=content_type, object_id=source.pk).order_by('-creation_datetime')[LOG_SIZE:]
|
|
for recent_to_delete in to_delete:
|
|
recent_to_delete.delete()
|
|
|
|
def get_for_source(self, source):
|
|
content_type = ContentType.objects.get_for_model(source)
|
|
return self.model.objects.filter(content_type=content_type, object_id=source.pk).order_by('-creation_datetime')
|
|
|
|
def get_latest_for(self, source):
|
|
content_type = ContentType.objects.get_for_model(source)
|
|
return self.model.objects.filter(content_type=content_type, object_id=source.pk).latest().creation_datetime
|