Adjust active/inactive Versions

This commit is contained in:
Frank Wiles
2022-05-29 07:12:13 -05:00
parent 5c5a0ace61
commit b655078a37
6 changed files with 94 additions and 11 deletions

View File

@@ -1,6 +1,22 @@
import pytest
import tempfile
from PIL import Image
from django.core.files import File as DjangoFile
pytest_plugins = [
"users.tests.fixtures",
"versions.tests.fixtures",
]
@pytest.fixture
def temp_image_file():
image = Image.new("RGB", (100, 100))
tmp_file = tempfile.NamedTemporaryFile(suffix=".jpg")
image.save(tmp_file)
tmp_file.seek(0)
file_obj = DjangoFile(open(tmp_file.name, mode="rb"), name="tmp_file")
yield file_obj.seek(0)

View File

@@ -14,3 +14,18 @@ class VersionManager(models.Manager):
def active(self):
"""Return active versions"""
return self.get_queryset().active()
class VersionFileQuerySet(models.QuerySet):
def active(self):
"""Return files for active versions"""
return self.filter(version__active=True)
class VersionFileManager(models.Manager):
def get_queryset(self):
return VersionFileQuerySet(self.model, using=self._db)
def active(self):
"""Return files active versions"""
return self.get_queryset().active()

View File

@@ -1,7 +1,7 @@
import hashlib
from django.db import models
from .managers import VersionManager
from .managers import VersionManager, VersionFileManager
class Version(models.Model):
@@ -36,10 +36,18 @@ class VersionFile(models.Model):
checksum = models.CharField(max_length=64, unique=True, default=None)
file = models.FileField(upload_to="uploads/")
objects = VersionFileManager()
def save(self, *args, **kwargs):
if self.file is not None:
if self.checksum is None:
self.checksum = hashlib.sha256(
self.file.file.encode("utf-8")
).hexdigest()
super().save(*args, **kwargs)
# Calculate sha256 hash
if self.file is not None and self.checksum is None:
h = hashlib.sha256()
with self.file.open("rb") as f:
data = f.read()
while data:
h.update(data)
data = f.read()
self.checksum = h.hexdigest()
super().save(*args, **kwargs)

View File

@@ -26,4 +26,4 @@ class VersionSerializer(serializers.ModelSerializer):
class Meta:
model = Version
fields = ["id", "name", "release_date", "description", "files"]
fields = ["id", "name", "release_date", "description", "active", "files"]

View File

@@ -1,14 +1,50 @@
import pytest
import datetime
import hashlib
import pytest
import random
from model_bakery import baker
from django.core.files.base import ContentFile
def fake_checksum():
return hashlib.sha256(random.randbytes(200)).hexdigest()
@pytest.fixture
def version(db):
# Make version
yesterday = datetime.date.today() - datetime.timedelta(days=1)
return baker.make(
v = baker.make(
"versions.Version",
name="Version 1.79.0",
description="Some awesome description of the library",
release_date=yesterday,
)
# Make verison file
c = fake_checksum()
f1 = ContentFile("Version 1 Fake Content")
vf = baker.make("versions.VersionFile", version=v, checksum=c, file=f1)
return v
@pytest.fixture
def inactive_version(db):
# Make version
yesterday = datetime.date.today() - datetime.timedelta(days=1)
v = baker.make(
"versions.Version",
name="Version 1.0.0",
description="Some old description of the library",
release_date=yesterday,
active=False,
)
# Make verison file
c = fake_checksum()
f1 = ContentFile("Old Version Fake Content")
vf = baker.make("versions.VersionFile", version=v, checksum=c, file=f1)
return v

View File

@@ -1,6 +1,8 @@
import pytest
from model_bakery import baker
from versions.models import Version
from versions.models import Version, VersionFile
def test_active_manager(version):
@@ -8,3 +10,9 @@ def test_active_manager(version):
v3 = baker.make("versions.Version", active=False)
assert Version.objects.active().count() == 1
def test_active_file_manager(version, inactive_version):
assert Version.objects.active().count() == 1
assert VersionFile.objects.active().count() == 1