diff --git a/src/apps/api/views/competitions.py b/src/apps/api/views/competitions.py index 6ee0b07ed..cf22b444e 100644 --- a/src/apps/api/views/competitions.py +++ b/src/apps/api/views/competitions.py @@ -507,7 +507,7 @@ def creation_status(self, request, pk): @action(detail=False, methods=('GET',), permission_classes=(AllowAny,)) def front_page(self, request): popular_comps = get_popular_competitions() - featured_comps = get_featured_competitions(excluded_competitions=popular_comps) + featured_comps = get_featured_competitions() popular_comps_serializer = CompetitionSerializerSimple(popular_comps, many=True) featured_comps_serializer = CompetitionSerializerSimple(featured_comps, many=True) return Response(data={ diff --git a/src/apps/competitions/migrations/0049_auto_20241121_0922.py b/src/apps/competitions/migrations/0049_auto_20241121_0922.py new file mode 100644 index 000000000..83a3c99a9 --- /dev/null +++ b/src/apps/competitions/migrations/0049_auto_20241121_0922.py @@ -0,0 +1,40 @@ +# Generated by Django 2.2.17 on 2024-11-21 09:22 + +from django.db import migrations, models +import storages.backends.s3boto3 +import utils.data + + +class Migration(migrations.Migration): + + dependencies = [ + ('competitions', '0048_auto_20240401_1646'), + ] + + operations = [ + migrations.AddField( + model_name='competition', + name='is_featured', + field=models.BooleanField(default=False), + ), + migrations.AlterField( + model_name='submission', + name='detailed_result', + field=models.FileField(blank=True, null=True, storage=storages.backends.s3boto3.S3Boto3Storage(), upload_to=utils.data.PathWrapper('detailed_result')), + ), + migrations.AlterField( + model_name='submission', + name='prediction_result', + field=models.FileField(blank=True, null=True, storage=storages.backends.s3boto3.S3Boto3Storage(), upload_to=utils.data.PathWrapper('prediction_result')), + ), + migrations.AlterField( + model_name='submission', + name='scoring_result', + field=models.FileField(blank=True, null=True, storage=storages.backends.s3boto3.S3Boto3Storage(), upload_to=utils.data.PathWrapper('scoring_result')), + ), + migrations.AlterField( + model_name='submissiondetails', + name='data_file', + field=models.FileField(storage=storages.backends.s3boto3.S3Boto3Storage(), upload_to=utils.data.PathWrapper('submission_details')), + ), + ] diff --git a/src/apps/competitions/migrations/0051_merge_20241203_1313.py b/src/apps/competitions/migrations/0051_merge_20241203_1313.py new file mode 100644 index 000000000..52b57e54c --- /dev/null +++ b/src/apps/competitions/migrations/0051_merge_20241203_1313.py @@ -0,0 +1,14 @@ +# Generated by Django 2.2.28 on 2024-12-03 13:13 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('competitions', '0050_auto_20241128_0814'), + ('competitions', '0049_auto_20241121_0922'), + ] + + operations = [ + ] diff --git a/src/apps/competitions/models.py b/src/apps/competitions/models.py index adefa962d..24efd11c2 100644 --- a/src/apps/competitions/models.py +++ b/src/apps/competitions/models.py @@ -78,6 +78,9 @@ class Competition(ChaHubSaveMixin, models.Model): # If true, participants see the make their submissions public can_participants_make_submissions_public = models.BooleanField(default=True) + # If true, competition is featured and may show up on the home page + is_featured = models.BooleanField(default=False) + # Count of submissions for this competition submissions_count = models.PositiveIntegerField(default=0) diff --git a/src/apps/competitions/utils.py b/src/apps/competitions/utils.py index 5e85acdb3..be8f3c699 100644 --- a/src/apps/competitions/utils.py +++ b/src/apps/competitions/utils.py @@ -1,7 +1,7 @@ ''' This file contains utilities for competitions ''' -# import random +import random # from django.db.models import Count from competitions.models import Competition @@ -25,34 +25,18 @@ def get_popular_competitions(limit=4): return competitions[:limit] -def get_featured_competitions(limit=4, excluded_competitions=None): +def get_featured_competitions(limit=4): ''' - Function to return featured competitions if they are still open. + Function to return featured competitions - :param limit: Amount of competitions to return. Default is 3 - :param excluded_competitions: list of popular competitions to prevent displaying duplicates + :param limit: Amount of competitions to return. Default is 4 :rtype: list :return: list of featured competitions ''' - # TODO: Fix the fetching of the featured competitions - # Uncomment and update the following code when a long term fix is implemented for participants count + competitions = Competition.objects.filter(is_featured=True) - # competitions = Competition.objects.filter(published=True) \ - # .annotate(participant_count=Count('participants')) - - # if excluded_competitions: - # competitions = competitions.exclude(pk__in=[c.pk for c in excluded_competitions]) - - # if len(competitions) <= limit: - # return competitions - # else: - # return random.sample(list(competitions), limit) - - # Temporary solution to show specific featured competitions - try: - featured_competiion_ids = [3523, 2745, 3160, 1567] - competitions = Competition.objects.filter(id__in=featured_competiion_ids) + if len(competitions) <= limit: return competitions - except Exception: - return [] + else: + return random.sample(list(competitions), limit) diff --git a/src/apps/datasets/migrations/0008_auto_20241121_0922.py b/src/apps/datasets/migrations/0008_auto_20241121_0922.py new file mode 100644 index 000000000..e79d81c57 --- /dev/null +++ b/src/apps/datasets/migrations/0008_auto_20241121_0922.py @@ -0,0 +1,20 @@ +# Generated by Django 2.2.17 on 2024-11-21 09:22 + +from django.db import migrations, models +import storages.backends.s3boto3 +import utils.data + + +class Migration(migrations.Migration): + + dependencies = [ + ('datasets', '0007_auto_20230609_1738'), + ] + + operations = [ + migrations.AlterField( + model_name='data', + name='data_file', + field=models.FileField(blank=True, null=True, storage=storages.backends.s3boto3.S3Boto3Storage(), upload_to=utils.data.PathWrapper('dataset')), + ), + ] diff --git a/src/apps/datasets/migrations/0009_merge_20241203_1313.py b/src/apps/datasets/migrations/0009_merge_20241203_1313.py new file mode 100644 index 000000000..8094aaba1 --- /dev/null +++ b/src/apps/datasets/migrations/0009_merge_20241203_1313.py @@ -0,0 +1,14 @@ +# Generated by Django 2.2.28 on 2024-12-03 13:13 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('datasets', '0008_auto_20241118_1106'), + ('datasets', '0008_auto_20241121_0922'), + ] + + operations = [ + ]