Skip to content

Commit

Permalink
Merge 26725fb into 5111070
Browse files Browse the repository at this point in the history
  • Loading branch information
oliche committed Jan 18, 2022
2 parents 5111070 + 26725fb commit e8b3197
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 16 deletions.
12 changes: 6 additions & 6 deletions alyx/data/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,9 @@ class DatasetAdmin(BaseExperimentalDataAdmin):
ordering = ('-created_datetime',)

def get_queryset(self, request):
qs = super(DatasetAdmin, self).get_queryset(request)
qs = qs.select_related('dataset_type', 'session', 'session__subject', 'created_by')
return qs
queryset = super(DatasetAdmin, self).get_queryset(request)
queryset = queryset.select_related('session', 'session__subject', 'created_by')
return queryset

def dataset_type_(self, obj):
return obj.dataset_type.name
Expand All @@ -121,17 +121,17 @@ def subject(self, obj):
return obj.session.subject.nickname

def _online(self, obj):
return obj.online
return obj.is_online
_online.short_description = 'On server'
_online.boolean = True

def _protected(self, obj):
return obj.protected
return obj.is_protected
_protected.short_description = 'Protected'
_protected.boolean = True

def _public(self, obj):
return obj.public
return obj.is_public
_public.short_description = 'Public'
_public.boolean = True

Expand Down
20 changes: 10 additions & 10 deletions alyx/data/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -301,37 +301,37 @@ class Dataset(BaseExperimentalData):
help_text="Whether this dataset is the default "
"latest revision")

def data_url(self):
records = self.file_records.filter(data_repository__data_url__isnull=False,
exists=True)
# returns preferentially globus non-personal endpoint
if records:
return records.order_by('data_repository__globus_is_personal')[0].data_url()

@property
def online(self):
def is_online(self):
fr = self.file_records.filter(data_repository__globus_is_personal=False)
if fr:
return all(fr.values_list('exists', flat=True))
else:
return False

@property
def protected(self):
def is_protected(self):
tags = self.tags.filter(protected=True)
if tags.count() > 0:
return True
else:
return False

@property
def public(self):
def is_public(self):
tags = self.tags.filter(public=True)
if tags.count() > 0:
return True
else:
return False

def data_url(self):
records = self.file_records.filter(data_repository__data_url__isnull=False,
exists=True)
# returns preferentially globus non-personal endpoint
if records:
return records.order_by('data_repository__globus_is_personal')[0].data_url()

def __str__(self):
date = self.created_datetime.strftime('%d/%m/%Y at %H:%M')
return "<Dataset %s %s '%s' by %s on %s>" % (
Expand Down
4 changes: 4 additions & 0 deletions alyx/data/serializers.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from django.contrib.auth import get_user_model
from rest_framework import serializers
from django.db.models import Count, Q, BooleanField

from .models import (DataRepositoryType, DataRepository, DataFormat, DatasetType,
Dataset, Download, FileRecord, Revision, Tag)
Expand Down Expand Up @@ -162,6 +163,9 @@ def setup_eager_loading(queryset):
'session__subject', 'revision')
queryset = queryset.prefetch_related(
'file_records', 'file_records__data_repository', 'tags')
public = Count('tags', filter=Q(tags__public=True), output_field=BooleanField())
protected = Count('tags', filter=Q(tags__protected=True), output_field=BooleanField())
queryset = queryset.annotate(public=public, protected=protected)
return queryset

def get_experiment_number(self, obj):
Expand Down
9 changes: 9 additions & 0 deletions alyx/data/tests.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from uuid import uuid4

from django.test import TestCase
from data.models import Dataset

from . import transfers

Expand All @@ -13,3 +14,11 @@ def test_add_uuid_to_filename(self):
self.assertEqual(expected, testable)
# Check leaves UUID if already added
self.assertEqual(expected, transfers._add_uuid_to_filename(testable, uuid))


class TestModel(TestCase):
def test_model_methods(self):
(dset, _) = Dataset.objects.get_or_create(name='toto.npy')
assert dset.is_online is False
assert dset.is_public is False
assert dset.is_protected is False

0 comments on commit e8b3197

Please sign in to comment.